在 Amazon RDS 环境中创建新的 MySQL 用户

Posted

技术标签:

【中文标题】在 Amazon RDS 环境中创建新的 MySQL 用户【英文标题】:Creating A New MySQL User In Amazon RDS Environment 【发布时间】:2012-04-29 05:08:00 【问题描述】:

我需要在现有 Amazon RDS 实例上创建一个具有有限权限的新 mysql 用户。在遇到几条错误消息后,我可以使用官方的 MySQL 管理员工具执行此操作,并且用户现在出现在列表中。但是,我无法分配任何架构权限,因为所有用户都是灰色的。我以实例启动时创建的“主用户”身份登录。不知道从这里去哪里。我确实安装了 RDS 命令行工具,但也无法在那里找到任何东西。想法

【问题讨论】:

【参考方案1】:

我是这样创建的:

CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'somepassword';
GRANT SELECT ON mydatabase.* TO 'jeffrey'@'localhost';

但是,AWS 拒绝登录该用户。我试图更改管理员权限,但没有成功。我通过 mysql 工作台将 'localhost' 更改为 '%'。 (或者您可以删除用户并重新创建),例如:

CREATE USER 'jeffrey'@'%' IDENTIFIED BY 'somepassword';
GRANT SELECT ON mydatabase.* TO 'jeffrey'@'%';

然后只有我能够通过这个新用户登录。

此外: 完成此更改后,您的数据库就允许从任何 ip 进行连接。如果您需要提高安全性并限制访问ip(例如:如果这是一个临时数据库),您可以在您的服务器的my.cnf文件中设置bind-address。

绑定地址 = your.ip.add.ress

enter link description here

【讨论】:

已经尝试了上述许多解决方案。对我有用的是删除我正在搞砸的用户,然后按照这些步骤操作。效果很好。【参考方案2】:

我知道这个帖子已经有几年的历史了,而且我一直在寻找它,所以我想了解有关 AWS RDS 和用户权限的更新。

您不能将GRANT ALL 用于任何具有 RDS 的用户。当您使用GRANT ALL 语句时,您还试图提供Global(AWS 称它们为Super Permissions),并且通过设置AWS RDS 系统的方式,它们不允许将全局选项分配给用户。

您必须打破以下权限:

GRANT SELECT,INSERT,UPDATE,DELETE,DROP on

一旦安全设置设置为允许从您的 EC2 实例或 Internet 进行访问,这将允许您的用户连接到 RDS。

希望此信息对遇到与我在 AWS RDS 系统中遇到的相同问题的其他人有所帮助。

沃尔多

【讨论】:

它也救了我。我非常沮丧,为什么在GRANT ALL 之后我仍然无法连接。现在很清楚了。 好点! ALL 得到的错误是:ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES) 对于 RDS,您可以为数据库上的用户添加的最大权限是 SELECT、ALTER、UPDATE、INSERT、CREATE、DELETE、DROP、INDEX、REFERENCES 我使用的图形界面会自动使用GRANT ALL(如果选择了所有权限)。分两步添加权限,使其不使用GRANT ALL 让我在尝试添加权限时克服“权限被拒绝”错误,并且必须分两步完成,这有点烦人。 可以在RDS上运行如下语句: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 ON *.* TO 'user'@'%' WITH GRANT OPTION;【参考方案3】:

您最好的选择可能是使用 mysql 命令行客户端连接到数据库并调用 SQL 命令来创建新用户并为其分配权限。

例如,您可能会运行如下代码:

mysql -u [your_master_username] -p -h YOURRDSENDPOINT.rds.amazonaws.com

CREATE USER 'jeffrey'@'%' IDENTIFIED BY 'somepassword';
GRANT SELECT ON [your_database].[some_table] TO 'jeffrey'@'%';

在 Windows 上,无论在哪里,您都可以使用 mysql.exe 客户端。

实用文档

AWS RDS 安全组文档(常见的混淆区域):http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_WorkingWithSecurityGroups.html

用户创建文档:http://dev.mysql.com/doc/refman/5.5/en/create-user.html

权限授予文档:http://dev.mysql.com/doc/refman/5.5/en/grant.html

【讨论】:

只是一个问题。由于主机是 YOURRDSENDPOINT.rds.amazonaws.com,因此授予 localhost 权限有效吗?我已经尝试了很长一段时间没有成功 这只是作为示例提供的,我将更新答案以使用通配符主机名。 这里是您可以为 RDS 选择的授予权限的完整列表:aws.amazon.com/premiumsupport/knowledge-center/… GRANT SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、RELOAD、PROCESS、REFERENCES、INDEX、ALTER、SHOW数据库、创建临时表、锁定表、执行、复制从属、复制客户端、创建视图、显示视图、创建例程、更改例程、创建用​​户、事件、触发 . 到 'new_master_user'@' %' 带有授予选项;【参考方案4】:

我使用了 mySQL 工作台,它工作正常。只需转到管理/用户和权限,按左下角的“添加帐户”按钮,然后进行配置。您不能授予 SUPER 特权,但其余的大部分都是

【讨论】:

【参考方案5】:

我在使用 MySQL Workbench 并针对 RDS 执行原始 SQL 方面取得了最大的成功:

CREATE USER 'foo'@'localhost' IDENTIFIED BY 'password';

更大的问题是权限。最初我尝试过:

Grant ALL on *.* to 'foo'@'localhost'

... 这会导致访问被拒绝错误。

Error Code: 1045. Access denied for user 'foo'@'%' (using password: YES)

麻烦的权限是RDS没有给我的“超级”权限,而我又不能授予。结果,我只能手动执行权限:

Grant SELECT on *.* to 'foo'@'localhost';
Grant INSERT on *.* to 'foo'@'localhost';
Grant CREATE on *.* to 'foo'@'localhost';

【讨论】:

如果你将你的数据库上的 ALL 授予 'foo'@'localhost' 你可能会取得更大的成功。 * 将包括系统数据库(模式)。 GRANT USAGE ON *.* TO 'foo'@'localhost'在rds mariadb上测试过,我觉得mysql应该是一样的。见MySQL on Amazon RDS

以上是关于在 Amazon RDS 环境中创建新的 MySQL 用户的主要内容,如果未能解决你的问题,请参考以下文章

Amazon RDS:ER_RECORD_FILE_FULL:在存储过程中创建临时表时表已满

无法在 AWS Elastic Beanstalk 上创建新的 RDS 数据库

Amazon Elastic Beanstalk:多个应用程序可以共享一个 Amazon RDS 数据库实例吗?

如何在 OpenAI 中创建新的健身房环境?

使用 MySQL Workbench 通过 EC2 实例连接到 Amazon RDS 实例

EF Core使用CodeFirst在MySql中创建新数据库以及已有的Mysql数据库如何使用DB First生成域模型