搜索

首页  >  问答  >  正文

是否可以在 MySQL 中独占地授予元数据权限?

TLDR;

目标:

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

版本

MySQL 8+

尝试:

在此问题之前,

我已经尝试过或知道:

背景:

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

P粉715274052P粉715274052277 天前431

全部回复(1)我来回复

  • P粉739706089

    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 权限才能查看存储过程或函数的主体。但您在问题中没有提到审计员查看例程。

    回复
    0
  • 取消回复