在 amazon RDS 的 mysql/mariadb 上创建用户时出现问题

Issue creating users on mysql/mariadb on amazon RDS

仍在尝试了解 AWS 上的 RDS。我设置了一个可以通过 SSH 进入的 EC2 实例。然后我创建了一个 MariaDB 的 RDS 实例。我可以通过 SSH 连接到我的 EC2,然后使用 MySQL 使用我在设置 RDS 实例时创建的 username/password 连接到 RDS 实例。当我查看用户时,我看到

'myusername'@'%' 
'rdsadmin'@'localhost'

在以 'myusername' 身份登录到 mysql 数据库时,我创建了一个具有更多有限主机的新用户:

CREATE USER 'otheruser'@'nnn.nnn.nnn.nnn' IDENTIFIED BY 'good_password'

目前没有问题。现在给 'otheruser' 一些权限:

GRANT ALL PRIVILEGES ON mydatabase.* TO 'otheruser'@'nnn.nnn.nnn.nnn' IDENTIFIED BY 'same_password';

似乎有效。从我的 IP 地址,我可以使用 Navicat 作为 'otheruser' 连接到 'mydatabase',并且可以创建表、添加数据、删除表、创建索引,没问题。但是,当我这样做时,所有权限都显示 'N':

SELECT * FROM mysql.user WHERE user = 'otheruser'\G

如果我查看 information_schema,唯一的特权是 'usage'

SELECT * FROM information_schema.user_privileges;

如果,作为我在 RDS 设置期间创建的根用户,我尝试为 'otheruser' 指定特定权限,我收到拒绝访问错误。

所以如果所有权限都显示 'N',而 information_scheme 只显示 'usage',Navicat 如何能够以该用户身份连接并执行几乎所有操作?

在 RDS 实例上创建受限用户的正确方法是什么?与 'rdsadmin'@'localhost' 相比,实例创建期间创建的用户似乎略有限制,但据我所知,现在可以从本地主机连接到 RDS 了吗?

mysql.usertable中的权限为全局权限。它们适用于服务器上的所有数据库,现在和将来。您没有发表声明会授予其中任何一项。

SELECT * FROM mysql.db; 会告诉你在哪里可以找到你授予的 navicat 用户的权限。

您可以 GRANT ALL PRIVILEGES ON some_database.* 在 RDS 中,它只授予该数据库的数据库级权限。

...但是您不能 GRANT ALL PRIVILEGES ON *.* 因为您,主用户,不拥有所有全局权限。 RDS 不会将它们提供给您。要进行全局授权,您必须授予特定权限。

SHOW GRANTS FOR 'myusername@'%';

您在此处看到的权限是您可以授予的唯一全局(服务器级)权限。

是的,您可以使用 RDS 提供的权限执行的操作是有限的,大概是因为它是一项托管服务...因此他们不希望您破坏他们必须修复的任何内容你......他们会的,因为它是一项托管服务。这是 RDS 的缺点之一。您可以用一些灵活性来换取易于管理(时间点恢复、creation/monitoring/destruction 只读副本、备份快照等)。

rdsadmin@localhost 是 RDS 基础架构用于管理和监控您的实例的帐户。这就是为什么它拥有所有这些特权。你是对的——你不能从本地主机登录。只有RDS监管进程可以。