美文网首页
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