![无法在 AWS RDS MySQL 实例上创建具有所有权限的新用户](https://linux22.com/image/735934/%E6%97%A0%E6%B3%95%E5%9C%A8%20AWS%20RDS%20MySQL%20%E5%AE%9E%E4%BE%8B%E4%B8%8A%E5%88%9B%E5%BB%BA%E5%85%B7%E6%9C%89%E6%89%80%E6%9C%89%E6%9D%83%E9%99%90%E7%9A%84%E6%96%B0%E7%94%A8%E6%88%B7.png)
我已经启动了 AWS RDS MySQL 实例,并想要创建一个额外的用户,该用户对所有数据库拥有所有权限;
grant all privileges on *.* to "someuser"@"10.0.0.0/255.255.0.0";
ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)
正如您所看到的,尽管我以 root 身份触发该命令,但我却不被允许这样做。
我该如何解决这个问题?
答案1
RDS 中不允许授予所有权限*.*
,但您可以使用一个技巧:
GRANT ALL PRIVILEGES ON `%`.* TO 'someuser'@XXX;
另外,不要忘记:授予除和ALL [PRIVILEGES]
之外的所有权限!GRANT OPTION
PROXY
答案2
当使用 RDS(托管数据库服务)时,您根本无法像您尝试的那样创建根用户。
只需使用
CREATE USER 'username'@'%' IDENTIFIED BY 'userpassword';
GRANT SELECT ON [your_database].[some_table] TO 'username'@'%';
答案3
我必须使用两个 GRANT 查询来最大化 RDS MySQL 上新用户的权限。
正如其他人所提到的,此查询授予除某些系统数据库之外的所有数据库的完全权限(请注意`%`
而不是*
):
GRANT ALL PRIVILEGES ON `%`.* TO 'myuser'@'host';
为了满足我的需求,我还需要尽可能多的系统表权限(例如,这样该用户可以创建新用户)。为此,我发现我可以全局指定除CREATE TABLESPACE
、FILE
、SHUTDOWN
和之外的所有权限SUPER
:
GRANT EXECUTE, PROCESS, SELECT, SHOW DATABASES, SHOW VIEW, ALTER, ALTER ROUTINE, CREATE, CREATE ROUTINE,
DELETE, CREATE VIEW, INDEX, EVENT, DROP, TRIGGER, REFERENCES, INSERT, CREATE USER,
UPDATE, RELOAD, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, CREATE TEMPORARY TABLES ON *.* TO 'myuser'@'host' WITH GRANT OPTION;
我想允许的权限的确切列表可能会随着 MySQL 的新版本和时间而改变,所以希望这个答案不会过时太快。
编辑:功劳归功劳——大部分问题都是我通过这篇关于这个问题的博客文章才弄明白的。我发现了一个略有不同的不允许权限列表:http://www.fidian.com/problems-only-tyler-has/using-grant-all-with-amazons-mysql-rds
答案4
因为你本质上是在尝试创建一个新的根你可以为你的应用提供现有用户的凭据主用户这是在设置 RDS 时创建的。这不是一个好的做法,但应该可以解决您的问题。