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

2020-05-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语句对主从的影响可能不同,从而可能导致复制不一致或错误。

上一篇 下一篇

猜你喜欢

热点阅读