美文网首页
MySQL8.0新功能-取消部分权限

MySQL8.0新功能-取消部分权限

作者: 月饮沙 | 来源:发表于2020-05-12 16:12 被阅读0次

    MySQL8.0.16开始,可以将权限授予给全局,同时取消对某个库的权限。比如可以设置一个用户,对除了mysql库以外的其他库都具有读写权限,以前,需要对每个库进行读写授权,当有新库增加时,需要为该账号增加新库的读写权限。在MySQL8.0.16以后,如果启用了取消部分权限功能,可以直接对用户授予全局读写权限,然后取消mysql的读写权限,之后再有新库增加后,该用户自动具有新库的读写权限,不需要额外添加。

    启用取消部分权限功能

    通过设置partial_revokes=ON来启用取消部分权限功能。默认情况下,该功能是禁用的
    SET PERSIST partial_revokes = ON;

    禁用取消部分权限功能

    SET PERSIST partial_revokes = OFF;
    当服务器中存在被取消部分权限的用户时,无法对功能进行禁用。
    取消部分权限示例

    mysql> CREATE USER u1;
    mysql> GRANT SELECT, INSERT ON *.* TO u1;
    mysql> REVOKE INSERT ON world.* FROM u1;
    mysql> SHOW GRANTS FOR u1;
    +------------------------------------------+
    | Grants for u1@%                          |
    +------------------------------------------+
    | GRANT SELECT, INSERT ON *.* TO `u1`@`%`  |
    | REVOKE INSERT ON `world`.* FROM `u1`@`%` |
    +------------------------------------------+
    

    恢复被取消的部分权限

    重新授权给全局

    GRANT INSERT ON *.* TO u1;

    对被取消的权限部分重新授权

    GRANT INSERT ON world.* TO u1;

    撤销全局授权

    REVOKE INSERT ON *.* FROM u1;

    mysql如何记录取消部分权限

    存储在mysql.userUser_attributes->>'$.Restrictions'

    mysql> SELECT User, Host, User_attributes->>'$.Restrictions'
           FROM mysql.user WHERE User_attributes->>'$.Restrictions' <> '';
    +------+------+------------------------------------------------------+
    | User | Host | User_attributes->>'$.Restrictions'                   |
    +------+------+------------------------------------------------------+
    | u1   | %    | [{"Database": "world", "Privileges": ["INSERT"]}] |
    +------+------+------------------------------------------------------+
    

    取消部分权限在SHOW GRANTS中如何显示

    显示为一个REVOKE语句

    mysql> SHOW GRANTS FOR u1;
    +------------------------------------------+
    | Grants for u1@%                          |
    +------------------------------------------+
    | GRANT SELECT, INSERT ON *.* TO `u1`@`%`  |
    | REVOKE INSERT ON `world`.* FROM `u1`@`%` |
    +------------------------------------------+
    

    取消部分权限功能限制

    • 必须使用库的全名,不能包含通配符(%或_)
    • 可以对不存在的库取消权限,前提是必须之前授予过全局权限。
    • 取消部分权限进适用于库级别。

    权限继承

    • 如果一个账号本身已经被取消部分权限,那么当使用这个账号给其他账号授权时,被授权的账号也会被取消部分权限。(被授权账号已具有该账号被取消的权限情况除外)
    • 账号授权时只会添加新权限,不会删除现有权限

    取消部分权限与复制的关系

    partial_revokes必须在复制的所有主机上同时启用或禁用,否则REVOKE语句对主从的影响可能不同,从而可能导致复制不一致或错误。

    相关文章

      网友评论

          本文标题:MySQL8.0新功能-取消部分权限

          本文链接:https://www.haomeiwen.com/subject/kfobnhtx.html