在 RDS 中为 MySQL 创建没有权限的用户失败,错误 1396

Create user with no privileges in RDS for MySQL fails, error 1396

在使用 RDS 工具完成在 AWS 上创建数据库实例的所有操作后,我已经能够通过 MySQL Workbench 访问数据库。我使用了在创建实例时选择的主用户名和密码。

但是我希望创建具有受限权限的新用户并且如果不返回 error 似乎无法实现此目的。

正如你所看到的,我已经通过 workbench 以及 gitbash 进行了尝试,并收到了链接错误。

Here's 界面图片。我已经尝试创建一个具有零权限的用户并且仍然是相同的错误消息。 我知道无法在 RDS 中授予权限 SUPER。创建用户失败,没有任何授权。

我尝试为其创建新用户的数据库是空的,我目前使用的是默认 VPC。不确定其中任何一个是否会影响这一点。

感谢任何帮助!

我还没有设置任何 EC2 实例或 BD 安全组,不确定这是否也相关(即使我打算在 VPC 中设置)。

看起来像是这个问题的重复:Creating A New MySQL User In Amazon RDS Environment

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'@'%';

这与安全组无关。您的 RDS 实例实际上并不知道它们——它们只控制对主机的访问 运行 AWS 网络中 TCP 层的 RDS 实例。

关于您的问题——我认为您会发现您确实设法创建了用户:

mysql> CREATE USER 'Whosebug'@'%';
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE USER 'Whosebug'@'%';
ERROR 1396 (HY000): Operation CREATE USER failed for 'Whosebug'@'%'

mysql> CREATE USER 'Whosebug';
ERROR 1396 (HY000): Operation CREATE USER failed for 'Whosebug'@'%'

mysql>

查看服务器上的用户帐户SELECT * FROM mysql.user;

注意用户'Whosebug''Whosebug'@'%'指的是同一个用户,其中@'%'表示该用户的登录权限不受源IP地址或主机限制通过 MySQL(它可以而且仍然会受到安全组设置的限制,我将在下面更详细地展示)。

mysql.user table 包含服务器知道的所有帐户。这个table(和several other grant tables可以手动操作,但是最好使用GRANTREVOKECREATE USER, 和 DROP USER 语句。


以后可能会有帮助...如果您确实以无法连接到服务器的方式设置安全组(因为您的源 IP 地址不被允许),这不会导致任何行为改变在 MySQL 方面 -- 无论用户名和密码如何,您的连接都会超时,永远不会真正到达服务器。

这是一个常见的错误,你会看到 完全 太多人(包括这里的 SO)在遇到这个特定问题时开始在服务器上寻找权限-- 不要那样做 -- 问题是总是 网络连接之一,如果您看到以下行为:

$ mysql -h my-rds-with-security-group-too-restrictive.jozxyqk.us-west-2.rds.amazonaws.com

ERROR 2003 (HY000): Can't connect to MySQL server on 'my-rds-with...' (110)

ERROR 2003 可能意味着几件事……但钱在行尾。末尾的代码 (110) 告诉您您永远无法访问服务器 - 如果您看到这个确切的代码代码,那 不是 权限问题。查一下:

$ perror 110
OS error code 110:  Connection timed out

(显示 Linux 错误代码 110;Mac 可能是相同的代码,因为我怀疑它是标准的 POSIX 错误代码,而 Windows 组成了他们自己的。我相信 Windows 上的 10060 表达了相同的含义。)