You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL创建可授权专属受限用户遇权限报错,需补充哪些权限?

MySQL受限用户授权失败问题解决

需求:创建一个专属受限用户,用于新建数据库、新建用户,并能为新用户授予该新数据库的全部权限。

根据MySQL 5.7官方手册,要向任意用户授予任意权限,需满足:

或者,若您拥有mysql系统数据库中权限表的UPDATE权限,则可为任意账号授予任意权限。

已尝试的权限配置

GRANT CREATE, CREATE ROLE, CREATE TEMPORARY TABLES, CREATE USER, DROP ROLE, RELOAD, SHOW DATABASES ON *.* TO `admin-xxx`@`46.x.x.x` WITH GRANT OPTION;
GRANT INSERT, SELECT, UPDATE ON `mysql`.* TO `admin-xxx`@`46.x.x.x`;

问题现象

可以正常创建数据库和用户,但执行GRANT语句为新用户授权新数据库权限时,报错:

ERROR 1044 (42000): Access denied for user 'admin-xxx'@'46.x.x.x' to database 'xxx_abc'

当前权限详情

mysql> show grants;
+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for admin-xxx@46.x.x.x                                                                                                                         |
+--------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT CREATE, RELOAD, SHOW DATABASES, CREATE TEMPORARY TABLES, CREATE USER, CREATE ROLE, DROP ROLE ON *.* TO `admin-xxx`@`46.x.x.x` WITH GRANT OPTION |
| GRANT SELECT, INSERT, UPDATE ON `mysql`.* TO `admin-xxx`@`46.x.x.x`                                                                                   |
+--------------------------------------------------------------------------------------------------------------------------------------------------------+

问题原因

虽然你拥有mysql系统库的UPDATE权限(可直接修改权限表),但使用GRANT语句执行授权时,要求执行用户本身拥有目标数据库的对应权限,并且具备WITH GRANT OPTION权限。当前你的admin-xxx用户仅拥有全局创建类权限,没有对新创建数据库的操作权限(如SELECT、INSERT等),因此无法通过GRANT语句转授权限。

解决方案

方案1:授予全局数据库操作权限(简便直接)

给admin-xxx授予所有数据库的全部操作权限,并保留转授权限,后续创建的新数据库会自动继承权限:

GRANT ALL PRIVILEGES ON *.* TO `admin-xxx`@`46.x.x.x` WITH GRANT OPTION;
FLUSH PRIVILEGES;

方案2:精准授予必要权限(更严格受限)

若希望最小化权限,可仅授予需要转授的数据库操作权限:

GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, EVENT, TRIGGER ON *.* TO `admin-xxx`@`46.x.x.x` WITH GRANT OPTION;
FLUSH PRIVILEGES;

方案3:直接修改权限表(符合手册描述)

利用已有的mysql库UPDATE权限,直接修改权限表为新用户授权(无需GRANT语句的权限限制):

  1. 创建新用户:
    CREATE USER 'new-user'@'xxx' IDENTIFIED BY 'password';
    
  2. 插入权限记录到mysql.db表:
    INSERT INTO mysql.db (Host, Db, User, Select_priv, Insert_priv, Update_priv, Delete_priv, Create_priv, Drop_priv, Grant_priv, References_priv, Index_priv, Alter_priv, Create_tmp_table_priv, Lock_tables_priv, Create_view_priv, Show_view_priv, Create_routine_priv, Alter_routine_priv, Execute_priv, Event_priv, Trigger_priv)
    VALUES ('xxx', 'xxx_abc', 'new-user', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'N', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y', 'Y');
    
  3. 刷新权限:
    FLUSH PRIVILEGES;
    

内容的提问来源于stack exchange,提问作者Marki555

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 16:25:25