用户不持有ALL PRIVILEGES权限时能否拥有GRANT授权权限?
问题原因及实现方案
报错根因
你遇到的报错是MySQL/MariaDB的权限规则限制导致的:
- 你给
USER账号授予的WITH GRANT OPTION仅支持它将自身持有的同范围权限(即database.*下的SELECT/INSERT/UPDATE)授予其他用户,并没有赋予它创建新用户的权限 - 当你使用
GRANT语句为不存在的用户授权时,MySQL/MariaDB默认会尝试自动创建该用户,这个自动创建动作需要账号持有CREATE USER全局权限,或者mysql系统库user表的INSERT权限,你的USER账号没有该权限,因此触发报错。
最小权限实现方案
你无需给USER账号授予ALL PRIVILEGES,仅需补充创建用户所需的最小权限即可,操作步骤如下:
- 使用root或其他高权限账号执行以下SQL,为
USER账号补充必要权限:
-- 授予创建用户的全局最小权限,不会开放其他库的操作权限 GRANT CREATE USER ON *.* TO 'USER'@'对应的访问主机范围'; FLUSH PRIVILEGES;
- 切换到
USER账号登录后,按如下流程操作即可完成新用户授权:
- 先创建新用户:
CREATE USER 'new_user'@'访问主机范围' IDENTIFIED BY '新用户密码';
- 再将自身持有的单库权限授予新用户(
WITH GRANT OPTION已支持该操作):
GRANT SELECT, INSERT, UPDATE ON database.* TO 'new_user'@'访问主机范围';
权限验证
配置完成后,可在USER账号下执行SHOW GRANTS;确认权限配置,输出应包含如下条目:
GRANT CREATE USER ON *.* TO 'USER'@'xxx' GRANT SELECT, INSERT, UPDATE ON `database`.* TO 'USER'@'xxx' WITH GRANT OPTION
符合上述配置即可正常实现需求,无需授予更高权限。
内容的提问来源于stack exchange,提问作者Gabriel Lorscheiter
相关产品推荐
相关产品推荐

