Kay*_*Kay 5 mysql amazon-rds terraform
我有一个 mysql rds 实例,当您创建该实例时,您声明一个 root 用户和密码。
然后,我使用 terraform 创建一个新用户并为该用户授予一个角色。但是我收到以下错误:
Error running SQL (GRANT 'test_role' TO 'test_user'@'%'): Error 1227: Access denied; you need (at least one of) the WITH ADMIN, ROLE_ADMIN, SUPER privilege(s) for this operation
Run Code Online (Sandbox Code Playgroud)
抛开 terraform 不谈,如果我尝试直接使用 mysql 为用户分配角色。我犯了同样的错误
CREATE ROLE 'test_role';
GRANT SELECT, EXECUTE ON checkpoint_gg.* TO 'test_role';
CREATE USER 'test_user'@'%' IDENTIFIED BY 'password';
GRANT 'test_role' TO 'test_user'@'%';
Run Code Online (Sandbox Code Playgroud)
显示 'root'@'%' 的补助金;
'GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE ROLE, DROP ROLE ON *.* TO `root`@`%` WITH GRANT OPTION'
'GRANT APPLICATION_PASSWORD_ADMIN,BACKUP_ADMIN,FLUSH_OPTIMIZER_COSTS,FLUSH_STATUS,FLUSH_TABLES,FLUSH_USER_RESOURCES,INNODB_REDO_LOG_ARCHIVE,PASSWORDLESS_USER_ADMIN,SHOW_ROUTINE ON *.* TO `root`@`%` WITH GRANT OPTION'
Run Code Online (Sandbox Code Playgroud)
mysql 8
我联系了 aws 技术支持,他们设法复制了该问题并提出了解决方案。
AWS技术支持
由于RDS是托管服务,为了维护系统的完整性和稳定性,即使是数据库实例的主用户也没有提供超级用户权限,因此,出现这样的错误消息是预料之中的,因为RDS MySQL主用户默认情况下不提供超级用户权限。拥有 ADMIN、ROLE_ADMIN、SUPER 权限。
他们建议,有趣的是,主/根用户可以将这些角色分配给自己。
GRANT ROLE_ADMIN on *.* to root;
Run Code Online (Sandbox Code Playgroud)
一旦拥有该权限,我们就可以向用户授予角色
GRANT 'test_role' TO 'test_user'@'%';
Run Code Online (Sandbox Code Playgroud)
我不知道主 root 用户(不是 rdsadmin)可以给它自我管理角色,当它本身不是管理员或没有超级权限时。