概述
今天主要从一个问题来看mysql8的一个新特性:system_user..
一、问题现象
1、赋予新用户所有权限(all privileges)
grant all privileges on *.* to 'hwb'@'%' with grant option;
2、撤销用户所有权限(all privileges)
授权后发现权限过大,要撤销时报错:ERROR 1227 (42000): Access denied; you need (at least one of) the SYSTEM_USER privilege(s) for this operation,如果是5.7版本是不会报错的
REVOKE all privileges ON *.* FROM 'hwb'@'%';
二、新特性:system_user权限
查看完MySQL8.0.16官方文档后得知:若要修改用户,必须在MySQL架构上具有CREATE USER权限或UPDATE权限。在MySQL 8.0.16中我们添加了SYSTEM_USER动态权限,以保护用户不受第一种情况的影响:其他拥有CREATE USER权限的用户进行修改。具有SYSTEM_USER权限的帐户不能被没有SYSTEM_USER的帐户修改,即使该帐户具有CREATE USER权限
SYSTEM_USER权限强制执行这样的约定:如果要修改授予SYSTEM_USER权限的用户,那么除了修改用户所需的权限外,还需要具有SYSTEM_USER权限。换句话说,拥有SYSTEM_USER和CREATE权限的用户可以修改拥有SYSTEM_USER权限的用户
三、解决办法
1、授权SYSTEM_USER权限
在新创建的用户下给root账户赋予SYSTEM_USER权限,然后在用root账户取消新用户的所有权限
#hwb用户下操作
mysql> grant system_user on *.* to root@'localhost';
# root用户下的操作
mysql> revoke all privileges on *.* from hwb;
2、直接在要撤销的账户(hwb)下操作
mysql> revoke all privileges on *.* from hwb;
觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~