繁体   English   中英

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

[英]Issue creating users on mysql/mariadb on amazon RDS

仍在尝试找出AWS上的RDS。 我设置了可以通过SSH进入的EC2实例。 然后,我创建了MariaDB的RDS实例。 我可以通过SSH进入EC2,然后使用MySQL通过我在设置RDS实例时创建的用户名/密码连接到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作为“其他用户”连接到“ mydatabase”,并且可以创建表,添加数据,删除表,创建索引。 但是,当我这样做时,所有特权都显示为“ N”:

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

如果我查看information_schema,唯一的特权是“使用”

SELECT * FROM information_schema.user_privileges;

如果作为我的RDS设置过程中创建的root用户,我尝试为“ otheruser”指定特定特权,则会收到拒绝访问错误。

因此,如果所有权限都显示为“ N”,而information_scheme仅显示为“使用情况”,那么Navicat如何能够以该用户身份连接并执行几乎所有操作?

在RDS实例上创建受限用户的正确方法是什么? 与“ rdsadmin” @“ localhost”相比,在实例创建过程中创建的用户似乎受到了一些限制,但是AFAIK现在有从本地主机连接到RDS的方法吗?

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

SELECT * FROM mysql.db; 将显示您在哪里可以找到您授予的navicat用户的权限。

您可以在RDS中的GRANT ALL PRIVILEGES ON some_database.*上授予GRANT ALL PRIVILEGES ON some_database.* ,这将仅授予该数据库一个数据库级别的权限。

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

SHOW GRANTS FOR 'myusername@'%';

您看到的特权列出了您可以授予的唯一全局(服务器级别)特权。

是的,您可以使用RDS提供的特权来做的事情是有限的,大概是因为这是一项托管服务...所以他们不希望您能够破坏必须为您解决的任何问题...他们会的,因为这是一项托管服务。 这是RDS的缺点之一。 您需要牺牲一些灵活性来简化管理(时间点恢复,只读副本的创建/监视/销毁,备份快照等)。

rdsadmin@localhost是RDS基础结构用来管理和监视您的实例的帐户。 这就是为什么它拥有所有这些特权。 您是正确的-您无法从localhost登录。 只有RDS监督过程可以。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM