2016-03-10 4 views
0

По-прежнему пытается выяснить RDS на AWS. Я настраиваю экземпляр EC2, в который я могу включить SSH. Затем я создал экземпляр RDS MariaDB. Я могу использовать SSH в своем EC2, а затем использовать MySQL для подключения к экземпляру RDS с использованием имени пользователя/пароля, которое я создал при настройке экземпляра RDS. Когда я смотрю на пользователей я вижуПроблема создания пользователей на mysql/mariadb на amazon 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 единственная привилегия «использование»

SELECT * FROM information_schema.user_privileges; 

Если, как мой корневой пользователь, созданный во время установки RDS Я пытаюсь указать конкретную привилегию для «otheruser». Я получаю ошибку отказа в доступе.

Итак, если все разрешения показывают «N», а information_scheme просто показывает «использование», как Navicat может подключиться как этот пользователь и сделать почти все?

Каков правильный способ создания ограниченного пользователя на экземпляре RDS? Кажется, пользователь, созданный при создании экземпляра, немного ограничен vs. «rdsadmin» @ «localhost», но AFAIK теперь есть способ подключиться к RDS с локального хоста?

ответ

0

Привилегии в таблице mysql.user являются глобальными привилегиями. Они применяются ко всем базам данных на сервере, настоящем и будущем. Вы не представили заявление, которое предоставило бы любой из них.

SELECT * FROM mysql.db; покажет вам, где могут быть предоставлены разрешения пользователя navicat.

Вы можете GRANT ALL PRIVILEGES ON some_database.* в RDS, который предоставляет только разрешения на уровне базы данных для этой базы данных.

... но вы не можете GRANT ALL PRIVILEGES ON *.*, потому что вы, главный пользователь, не обладаете всеми глобальными привилегиями. RDS не дает их вам. Чтобы сделать глобальные гранты, вы должны предоставить конкретные привилегии.

SHOW GRANTS FOR '[email protected]'%';

Привилегии, которые вы видите перечисленные есть только глобальные (на уровне сервера) привилегии вы можете предоставить.

Да, все, что вы можете сделать с привилегиями, предоставляемыми RDS, ограничено, по-видимому, потому что это управляемый сервис ... поэтому они не хотят, чтобы вы могли сломать все, что им нужно было бы исправить для вас ... которые они хотели бы, потому что это управляемая услуга. Это один из недостатков RDS. Для упрощения администрирования вы получаете определенную гибкость (восстановление времени, создание/мониторинг/уничтожение прочитанных реплик, моментальные копии резервных копий и т. Д.).

[email protected] - это учетная запись, используемая инфраструктурой RDS для управления и контроля вашего экземпляра.Вот почему у него есть все те привилегии. Вы правы - вы не можете войти в систему с localhost. Только процесс контроля RDS может.

+0

Благодарим за объяснение! – Steve

Смежные вопросы