2015-05-15 4 views
5

Я этого не понимаю. У меня есть база данных, my_database и таблица, tablename. У меня есть пользователь, ken, у которого есть доступ только для чтения к базе данных. Этот пользователь уже настроен с паролем, и люди используют это имя пользователя удаленно. Я хочу дать им некоторые разрешения на tablename.Почему 'определенные' обязательны для некоторых команд гранта?

Это не работает:

mysql> grant SELECT, INSERT, UPDATE, DELETE on my_database.tablename to 'ken'@'%'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> flush privileges; 
Query OK, 0 rows affected (0.00 sec) 

Но это делает:

mysql> grant SELECT, INSERT, UPDATE, DELETE on my_database.tablename to 'ken'@'%' identified by password '<existing password hash>'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> flush privileges; 
Query OK, 0 rows affected (0.00 sec) 

Почему? Я думал, что часть identified by не является обязательной, если она уже является пользователем?

+0

Просто из любопытства: почему вы делаете что-то настолько запутанное, чтобы предоставить возможность «ВСТАВИТЬ», «ОБНОВИТЬ» и «УДАЛИТЬ» пользователю, которого вы назвали 'read_only' (который, кажется, указывает, что они разрешено читать ('SELECT') из данных? Это кажется очень плохо продуманной идеей для меня. –

+0

Потому что это не настоящее имя пользователя. –

+0

Хм .. ОК. Лично я бы пошел с« У меня есть пользователь , Джо, который ... ». :-) –

ответ

0

Скорее всего, проблема с репликацией MySQL.

0

Возможно, вы можете ограничить оператор GRANT пользователю только в том случае, если он выполнил вход в систему по этому конкретному методу аутентификации (здесь: пароль). Это, по крайней мере, относится к заявлению CREATE USER, и я думаю, что это должно быть похоже здесь ...

Для получения более подробной информации, пожалуйста, найдите auth_option на странице this.