TLDR;
目标:
是否可以向某个“审核”用户授予仅访问 MySQL 元数据(至少是架构、表、列)的权限,而不访问表中的确切数据?
版本
MySQL 8+
尝试:
在此问题之前,
我已经尝试过或知道:
- 评论MySQL official docs on privileges (如果我错过了答案,请通知我)
- 在 SOF 上搜索关键字:
mysql
、privilege
、metadata
等 - 与我的 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/