Команда GRANT
Команда GRANT используется для создания нового аккаунта или модификации уже существующего аккаунта: (сменить пароль или выдать какие-то привилегии). Синтаксис команды Grant следующий:
GRANT SELECT ON mydb.* TO ‘mike’@’localhost’ IDENTIFIED BY ‘qwerty’;
В данном примере команда grant используется для выдачи привилегии SELECT на все таблицы в базе данных mydb пользователю mike, который должен коннектиться с локального хоста с паролем ‘qwerty’.
Соответственно, команда GRANT может состоять из четырех секций:
- ключевое слово GRANT, которое предшествует одной или нескольким привилегиям, которые будут выданы пользователю. Если привилегий несколько, они перечисляются через запятую;
- часть ON, в которой определяется уровень выдаваемых привилегий;
- часть TO определяет аккаунт, которому даются привилегии;
- часть IDENTIFIED BY (необязательная), в которой может быть задан пароль пользователя.
Если аккаунт уже существует и в команде присутствует часть IDENTIFIED BY, то пароль пользователя меняется на новый.
Из соображений безопасности не следует применять команду GRANT для создания новых пользователей без использования IDENTIFIED BY, т.к. это создаст пользователя без пароля. Чтобы вообще исключить такую возможность, надо добавить NO_AUTO_CREATE_USER в переменную sql_mode.
Просмотр привилегий
В основном для просмотра привилегий используется команда SHOW GRANTS:
SHOW GRANTS;
SHOW GRANTS FOR CURENT_USER();
Пользователь с административными правами может также запросить с помощью этой команды и права конкретного пользователя (см. рисунок).
В примере, приведенном на рисунке, видно, что аккаунт jane@localhost имеет две привилегии, выданные на глобальном уровне. Если аккаунт имеет пароль, то команда SHOW GRANTS показывает также часть IDENTIFIED BY с зашифрованным паролем, значение которого берется из таблицы пользователей. Если у аккаунта есть право выдавать данную привилегию другим пользователем (на рисунке выше это не представлено), то это будет отображено словами “WITH GRANT OPTION”.
SHOW GRANTS могут показывать информацию только по конкретному пользователю, т.е. имя пользователя должно быть указано точно, и всякие
маски типа jane@% е допускаются.
Существуют некоторые ограничения при работе с правами пользователя:
- нельзя какому-то аккаунту явно запретить вход в mysql;
- если аккаунт получает какие-то привилегии на объекты в базе данных, ему необходимо также выдать привилегии на саму базу;
- пароль не может ассоциироваться с каким-то объектом, например, с базой данных, таблицей, процедурой и т.п.
Команда REVOKE
Для того, чтобы отобрать привилегии у аккаунта, используется команда REVOKE. Примеры:
REVOKE DELETE, INSERT, UPDATE ON mydb.* FROM ‘jane’@’localhost’;
REVOKE GRANT OPTION ON mydb.* FROM ‘jane’@’localhost’;
Команда REVOKE состоит из следующих частей:
- ключевое слово REVOKE, за которым следуют одна или несколько (через запятую), удаляемых привилегий;
- часть ON – уровень привилегий, по аналогии с командой GRANT;
- часть FROM, в которой определяется аккаунт пользователя.
Рекомендуется перед тем и после того, как Вы использовать команду REVOKE, проверить привилегии пользователя с помощью команды SHOW GRANTS.