TLDR;
是否可以向某个“审核”用户授予仅访问 MySQL 元数据(至少是架构、表、列)的权限,而不访问表中的确切数据?
MySQL 8+
在此问题之前,
我已经尝试过或知道:
mysql
、privilege
、metadata
等showdatabases
权限,但只能获取schema列表infomatica_schema
的所有资助都白费了SELECT ON *.*
是另一个答案,但我的领导不想通过它泄漏数据我的公司命令 devops 收集 MySQL 元数据,以用于审计或安全监控或其他问题(我不知道整个故事的细节)。我的领导预计不会发生不必要的数据泄露。 顺便说一句,我不知道他们(也许是审计部门)将收集元数据的具体方法。我所要做的就是为他们创建一个授权用户。
P粉7397060892024-03-22 18:38:15
我想我找到了解决这个问题的方法,但这只是一种黑客行为,而不是真正的解决方案。
https://dev.mysql.com/doc /refman/8.0/en/show-tables.html 说:
也就是说,您不能使用 SHOW TABLES,也不能在针对 INFORMATION_SCHEMA 的查询中查看表(因为 SHOW TABLES 实际上只是针对这些系统视图的查询)。
但是“没有特权”的语言让我思考。是否存在用户可以拥有但不允许读取或写入数据的权限?
https://dev.mysql.com/doc/refman /8.0/en/grant.html 说:
SHOW 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 | ...
我还可以查看列等。
需要明确的是,这些是具体的表,而不是视图。但由于我的审核员用户对表没有任何权限(甚至是不相关的权限),因此它符合让他们查看有关表的元数据的目的。
在 MySQL 8.0.20 中,他们添加了 SHOW ROUTINES
权限。在此之前,您需要 SELECT
权限才能查看存储过程或函数的主体。但您在问题中没有提到审计员查看例程。