Работа с пользователями MySQL
В компьютерных сетях localhost
это имя хоста, которое относится к текущему компьютеру. %
это любой хост за исключением localhost. Для просмотра привилегий и хостов в к которым они принадлежат используется команда SHOW GRANTS FOR 'имя_пользователя'@'хост';
Вывести список пользователей с хостами:
mysql>SELECT User,Host FROM mysql.user;
Показать список привилегий пользователя для всех хостов кроме localhost:
mysql>SHOW GRANTS FOR 'имя_пользователя'@'%';
Показать список привилегий пользователя для localhost:
mysql>SHOW GRANTS FOR 'имя_пользователя'@'localhost';
Изменение прав пользователя
Для изменения прав пользователя, применяется команда GRANT
:
GRANT привилегии ON имя_базы_данных . имя_таблицы TO 'имя_пользователя'@'хост';
Здесь можем дать определённые привилегии для опредёленного пользователя к базе данных или таблице. Если нужно дать права для всех баз данных или таблиц, используйте вместо названия звездочку *
.
Основные права пользователя MySQL, которые вы можете использовать:
ALL PRIVILEGES
все, кроме GRANTUSAGE PRIVILEGES
никаких привилегийSELECT
делать выборки из таблицINSERT
вставлять данные в таблицуUPDATE
обновлять данные в таблицеDELETE
удалять данные из таблицыFILE
разрешает читать файлы на сервереCREATE
создавать таблицы или базы данныхALTER
изменять структуру таблицINDEX
создавать индексы для таблицDROP
удалять таблицыEVENT
обработка событийTRIGGER
создание триггеров
Привилегии администрирования баз данных:
GRANT
изменять права пользователейSUPER
суперпользовательPROCESS
получение информации о состоянии MySQLRELOAD
позволяет перезагружать таблицы привилегийSHUTDOWN
позволяет отключать или перезапускать базу данныхSHOW DATABASES
просмотр списка баз данныхLOCK TABLES
блокирование таблиц при использовании SELECTREFERENCES
создание внешних ключей для связывания таблицCREATE USER
создание пользователей
Чтобы изменить права пользователю, иногда удобно сначала сбросить все права:
mysql>REVOKE ALL PRIVILEGES ON *.* FROM 'имя_пользователя'@'хост';
Добавить указанные привилегии для таблиц базы данных пользователю user@localhost:
mysql>GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,INDEX
ON имя_базы_данных . * TO 'user'@'localhost';
Добавить все привилегии для таблиц базы данных пользователю user@localhost:
mysql>GRANT ALL PRIVILEGES ON имя_базы_данных . * TO 'user'@'localhost';
Удаление привилегий пользователя user@localhost для базы данных:
mysql>REVOKEALLON имя_базы_данных . * FROM 'user'@'localhost';
Сделать из пользователя суперпользователя и дать полный доступ ко всем базам данных на сервере:
mysql>GRANT ALL ON *.* TO 'имя_пользователя'@'localhost';
Перузагрузка привилегий
Перезагрузить созданные привилегии пользователя необходимо после каждой манипуляции:
mysql>FLUSH PRIVILEGES;
Удаление прав пользователя
Чтобы отозвать права у пользователя MySQL, используйте команду REVOKE
вместо GRANT
, синтаксис похож на GRANT
:
REVOKE привилегии ON имя_базы_данных . имя_таблицы FROM 'имя_пользователя'@'хост';
Заберём все права на базу данных test_database
у нашего пользователя:
REVOKE ALL PRIVILEGES ON test_database . * FROM 'test_user'@'localhost';
Добавление пользователя
Создать нового пользователя:
mysql>CREATE USER 'имя_пользователя'@'хост' IDENTIFIED BY 'пароль';
имя_пользователя
имя нового пользователяхост
имя хоста, доменное имя, ip адрес, с которого пользователь сможет подключаться к серверу, напримерuser@localhost
Кроме имени пользователя, здесь нужно задать хост с которого может авторизоваться этот пользователь. Это может быть доменное имя, IP-адрес, адрес подсети или знак %
, который означает все возможные хосты. Это очень удобно, потому что вы можете создать пользователя к которому можно будет подключится только локально или настроить отдельно права для локального или удалённого пользователя.
Чтобы создаваемый пользователь смог подключаться к серверу MySQL с любого IP адреса или хоста (за исключением localhost), можно использовать символ процента:
mysql>CREATE USER 'имя_пользователя'@'%' IDENTIFIED BY 'пароль';
Чтобы разрешрешить пользователю подключаться вообще со всех хостов, придётся создать для него две учётные записи:
mysql>CREATE USER 'имя_пользователя'@'%' IDENTIFIED BY 'пароль';
CREATE USER 'имя_пользователя'@'localhost' IDENTIFIED BY 'пароль';
Добавление суперпользователя
Если вам необходимо создать пользователя со всеми правами MySQL на замену для root
, можно использовать такую конструкцию:
GRANT ALL PRIVILEGES ON * . * TO 'test_user'@'localhost';
Даём все привилегии для пользователя test_user
над всеми базами данными и всеми таблицами. Но наш пользователь не сможет давать права другим пользователям. Чтобы это исправить, нужно дать ему привилегию GRANT
, а для этого используется такая команда:
GRANT ALL PRIVILEGES ON * . * TO 'test_user'@'localhost' WITH GRANT OPTION;
Теперь пользователь test_user
является суперпользователем для MySQL, авторизовавшись от его имени в PhpMyAdmin, вы можете делать всё то же самое, что и с помощью root
.
Удаление пользователя
Удалить пользователя:
mysql>DROP USER 'имя_пользователя'@'хост';
Изменение пароля
Изменить пароль пользователя в консоли MySQL:
SET PASSWORD FOR 'имя_пользователя'@'хост' = PASSWORD('пароль');
Изменить пароль пользователя в консоли сервера:
mysqladmin -uимя_пользователя password'пароль'