mysql - 是否可以在 MySQL 中仅授予元数据权限

标签 mysql privileges

TLDR;

目标:

是否可以向某个“审核”用户授予仅访问 MySQL 元数据(至少是架构、表、列)的权限,而不访问表中的确切数据?

版本

MySQL 8+

尝试:

在此问题之前,

我已经尝试过或知道:

  • 评论MySQL official docs on privileges (如果我错过了答案,请通知我)
  • 在 SOF 上搜索关键字:mysqlprivilegemetadata
  • 与我的 DBA friend 一起寻找解决方案
  • 向用户授予显示数据库权限,但只能获取架构列表
  • 众所周知,对 infomatica_schema 的所有资助都是徒劳的
  • SELECT ON *.* 是另一个答案,但我的领导不想通过它泄漏数据

背景:

我的公司命令 devops 收集 MySQL 元数据,以用于审计或安全监控或其他问题(我不知道整个故事的细节)。我的领导预计不会发生不必要的数据泄露。 顺便说一句,我不知道他们(也许是审计部门)将收集元数据的具体方法。我所要做的就是为他们创建一个授权用户。

最佳答案

我想我找到了解决这个问题的方法,但这只是一种黑客行为,而不是真正的解决方案。

https://dev.mysql.com/doc/refman/8.0/en/show-tables.html说:

If you have no privileges for a base table or view, it does not show up in the output from SHOW TABLES or mysqlshow db_name.

也就是说,您不能使用 SHOW TABLES,也不能在针对 INFORMATION_SCHEMA 的查询中查看表(因为 SHOW TABLES 实际上只是针对这些系统 View 的查询)。

但是“没有特权”的语言让我思考。是否存在用户可以拥有但不允许读取或写入数据的权限?

https://dev.mysql.com/doc/refman/8.0/en/grant.html说:

The permissible priv_type values at the table level are ALTER, CREATE VIEW, CREATE, DELETE, DROP, GRANT OPTION, INDEX, INSERT, REFERENCES, SELECT, SHOW VIEW, TRIGGER, and UPDATE.

显示 View 怎么样?这仅允许查看元数据,而不允许查询表或 View 。

所以我尝试了一下:

mysql> create user 'auditor'@'%';
mysql> grant show view on test.* to 'auditor'@'%';

然后我以该用户身份登录并尝试:

mysql> show grants;
+----------------------------------------------+
| Grants for auditor@%                         |
+----------------------------------------------+
| GRANT USAGE ON *.* TO `auditor`@`%`          |
| GRANT SHOW VIEW ON `test`.* TO `auditor`@`%` |
+----------------------------------------------+

mysql> use test

mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| Accounts       |
| Bugs           |
| BugsProducts   |
| BugStatus      |
...

我还可以查看列等。

需要明确的是,这些是具体的表,而不是 View 。但由于我的审计用户对表没有任何权限(甚至是不相关的权限),因此它符合让他们查看有关表的元数据的目的。

在 MySQL 8.0.20 中,他们添加了 SHOW ROUTINES 权限。在此之前,您需要 SELECT 权限才能查看存储过程或函数的主体。但您在问题中没有提到审计员查看例程。

关于mysql - 是否可以在 MySQL 中仅授予元数据权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71857160/

相关文章:

php - 将excel文件导入PHP并存储在MySQL中时如何使用PHPExcel库读取下标/上标/换行

php - 为什么我不能索引 mysql 返回的数组?

c# 添加 GridView - 类 dataGridView1 无法识别

Tensorflow 警告 - 权限不足 : 'cupti64_101.dll' ; dlerror: cupti64_101. dll

mysql - 触发器未在 Mysql 中创建

PHP Count SQL 没有给出结果

php - 表布局 - foreach

oracle - 如何/sysdba到在Docker上运行的数据库?

sql - 授予 PostgreSQL 中特定数据库的权限

windows - 在 C :\ProgramData\中写入时的权限/所有者问题