通过控制台创建的数据库账号,默认情况下可以选择授予其管理整个数据库的权限。如果需要限制账号仅管理数据库中的某些表、视图或字段,则可以通过 SQL 命令进行精细化授权。
前提条件
操作步骤
- 使用高权限账号,通过命令行、客户端连接RDS MySQL实例。 
- 执行以下命令,创建新用户并授予其管理特定数据库中表、视图和字段的权限。 说明- 此账号在控制台上无法查看到所属数据库。 - 创建新用户: - CREATE USER `<用户名>`@`%` IDENTIFIED BY '<密码>';
- 为用户授予全局权限(如 - PROCESS和复制相关权限):- GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '<用户名>'@'%';
- 为用户授予对指定数据库中表的完全控制权限: - GRANT ALL PRIVILEGES ON `<数据库名>`.`<表名>` TO '<用户名>'@'%';
- 为用户授予对 - mysql系统数据库中常用表的只读权限:- GRANT SELECT ON `mysql`.`help_topic` TO '<用户名>'@'%'; GRANT SELECT ON `mysql`.`func` TO '<用户名>'@'%'; GRANT SELECT ON `mysql`.`time_zone` TO '<用户名>'@'%'; GRANT SELECT ON `mysql`.`slow_log` TO '<用户名>'@'%'; GRANT SELECT ON `mysql`.`proc` TO '<用户名>'@'%'; GRANT SELECT ON `mysql`.`general_log` TO '<用户名>'@'%'; -- 其他系统表权限可根据需求添加- 示例 - 授权单表:创建新用户test01并授权管理数据库rds001中的表test100。 - CREATE USER `test01`@`%`IDENTIFIED BY 'passwd'; GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test01'@'%'; GRANT ALL PRIVILEGES ON `rds001`.`test100` TO 'test01'@'%'; GRANT SELECT ON `mysql`.`help_topic` TO 'test01'@'%'; GRANT SELECT ON `mysql`.`func` TO 'test01'@'%';说明- 如果将 - test100替换为- *,则该用户将拥有对- rds001数据库中所有表的权限,并且可以在RDS控制台上查看其所属数据库。
- 授权多表:创建新用户test02并授权管理数据库rds001中的表test100,test200和test300。 - CREATE USER `test02`@`%`IDENTIFIED BY 'passwd'; GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test02'@'%'; GRANT ALL PRIVILEGES ON `rds001`.`test100` TO 'test02'@'%'; GRANT ALL PRIVILEGES ON `rds001`.`test200` TO 'test02'@'%'; GRANT ALL PRIVILEGES ON `rds001`.`test300` TO 'test02'@'%'; GRANT SELECT ON `mysql`.`help_topic` TO 'test02'@'%'; GRANT SELECT ON `mysql`.`func` TO 'test02'@'%';
 
- 授权查询数据库中的视图: - GRANT SELECT ON <数据库名>.<视图名> to <用户名>;- 示例 - 授权单个视图:授权用户test01查询数据库rds001的视图view_test1。 - GRANT SELECT ON rds001.view_test1 to test01;
- 授权多个视图:授权用户test01查询数据库rds001的视图view_test1和view_test2。 - GRANT SELECT ON rds001.view_test1 to test01; GRANT SELECT ON rds001.view_test2 to test01;
 
- 授权更新或查询表中的字段 : - GRANT UPDATE (<字段名>) ON TABLE <表名> to <用户名>; -----授权更新表中字段 GRANT SELECT (<字段名>) ON TABLE <表名> to <用户名>; -----授权查询表中字段- 示例 - 授权单个字段:授权用户test01更新表testtable的字段testid。 - GRANT UPDATE (testid) ON TABLE testtable to test01;
- 授权多个字段:授权用户test01更新表testtable的字段test_id和test_name。 - GRANT UPDATE (test_id) ON TABLE testtable to test01; GRANT UPDATE (test_name) ON TABLE testtable to test01;
 
 - 除了通过SQL命令,也可以在DMS上进行修改。详情请参见MySQL数据库账号权限管理。 
常见问题
Q:执行SQL报错提示“Access denied; you need (at least one of) the CREATE USER privilege(s) for this operation TraceId.”怎么解决?
A:
- 报错原因:SQL脚本里面包括CREATE USER权限的语句,您当前账号权限不足。 
- 解决方法: - (方式一)使用高权限账号登录数据库后执行。 
- (方式二)通过 - GRANT CREATE USER ON *.* TO 'your_user'@'host';FLUSH PRIVILEGES;为普通账号授予CREATE USER权限后再执行。