【问题标题】:Prevent MySQL user from creating/deleting databases防止 MySQL 用户创建/删除数据库
【发布时间】:2021-09-15 10:17:37
【问题描述】:

我们正在开发一个 UI 面板,用于管理 MySQL 用户和数据库的创建/更改/删除。为防止出现不同步的情况,我们希望为 MySQL 用户禁用 MySQL 数据库的创建/删除。

我们的“全局”用户 - 可以访问以其用户名开头的所有数据库 - 目前能够创建和删除数据库。这是全局用户权限的样子(这不是 admin/root 用户):

GRANT USAGE ON *.* TO `testtt`@`%`
GRANT ALL PRIVILEGES ON `testtt\_%`.* TO `testtt`@`%`

我知道可以在 PHPMyAdmin 中禁用数据库的创建,但我更有信心在特定用户的 PRIVILEGES 中进行配置。我很难找出我们需要撤销或更改哪个 PRIVILEGE 以防止用户能够创建/删除数据库。

希望您能帮助我们!

【问题讨论】:

    标签: mysql


    【解决方案1】:

    您可以使用部分撤销的权限限制。

    partial_revokes 系统变量控制是否可以对帐户设置权限限制。要允许 REVOKE 操作,请启用 partial_revokes:

    SET PERSIST partial_revokes = ON;
    
    mysql> REVOKE UPDATE ON mysql.* FROM u1;
    mysql> REVOKE DELETE ON world.* FROM u1;
    

    从 MySQL 8.0.16 开始,如果启用了 partial_revokes 系统变量,这是可能的。具体来说,适用于在全局级别具有权限的用户。

    为了更好地理解它,请参阅文档:- partial-revokes in MYSQL DB

    【讨论】:

    • 有趣,我们在 8.0.25 版本上运行,所以这可能就足够了。我尝试申请REVOKE UPDATE ON mysql.* FROM 'testtt'@'%',但它返回错误#1141 - There is no such grant defined for user 'testtt' on host '%'。可能是因为我们还没有为 mysql 数据库申请授权,所以我们不希望用户看到这个数据库的内容。
    猜你喜欢
    • 1970-01-01
    • 2016-11-26
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 2021-05-15
    • 2016-08-01
    • 1970-01-01
    • 2011-10-02
    相关资源
    最近更新 更多