8.2.8 Добавление учетных записей, назначение привилегий и удаление учетных записей
Для управления учетными записями MySQL используйте SQL-команды, предназначенные для этой цели:
CREATE USERиDROP USERсоздают и удаляют учетные записи.GRANTиREVOKEназначают привилегии и отзывают привилегии у учетных записей.SHOW GRANTSотображает назначения привилегий для учетных записей.
Команды управления учетными записями производят соответствующие изменения в таблицах предоставления, которые описаны в разделе 8.2.3 «Таблицы предоставления».
Прямое изменение таблиц предоставления с помощью команд, таких как INSERT, UPDATE или DELETE, не рекомендуется и выполняется на ваш страх и риск. Сервер может игнорировать строки, которые становятся неверными в результате таких изменений.
Для любой операции, изменяющей таблицу предоставления, сервер проверяет, имеет ли таблица ожидаемую структуру, и выдает ошибку в случае отсутствия. Чтобы обновить таблицы до ожидаемой структуры, выполните процедуру обновления MySQL. См. главу 3 «Обновление MySQL».
Еще один вариант создания учетных записей — использование инструмента GUI MySQL Workbench. Также ряд сторонних программ предлагает возможности администрирования учетных записей MySQL. phpMyAdmin — одна из таких программ.
В этом разделе рассматриваются следующие темы:
Дополнительную информацию о рассмотренных здесь командах см. в разделе 15.7.1 «Команды управления учетными записями».
Создание учетных записей и предоставление привилегий
В следующих примерах показано, как использовать программу-клиент mysql для настройки новых учетных записей. Предполагается, что учетная запись MySQL root имеет привилегию CREATE USER и все привилегии, которые она предоставляет другим учетным записям.
В командной строке подключитесь к серверу как пользователь MySQL root, введя соответствующий пароль в ответ на запрос пароля:
$> mysql -u root -p
Enter password: (enter root password here)
После подключения к серверу вы можете добавить новые учетные записи. В следующем примере используются команды CREATE USER
и GRANT для настройки четырех учетных записей (где вы видите ', замените подходящим паролем):password'
CREATE USER 'finley'@'localhost'
IDENTIFIED BY 'password';
GRANT ALL
ON *.*
TO 'finley'@'localhost'
WITH GRANT OPTION;
CREATE USER 'finley'@'%.example.com'
IDENTIFIED BY 'password';
GRANT ALL
ON *.*
TO 'finley'@'%.example.com'
WITH GRANT OPTION;
CREATE USER 'admin'@'localhost'
IDENTIFIED BY 'password';
GRANT RELOAD,PROCESS
ON *.*
TO 'admin'@'localhost';
CREATE USER 'dummy'@'localhost';
Учетные записи, созданные этими командами, имеют следующие свойства:
-
Две учетные записи имеют имя пользователя
finley. Обе являются суперпользовательскими учетными записями с полными глобальными привилегиями для выполнения любых действий. Учетная запись'finley'@'localhost'может использоваться только при подключении с локального хоста. Учетная запись'finley'@'%.example.com'использует подстановочный символ'%'в части имени хоста, поэтому она может использоваться для подключения с любого хоста в доменеexample.com.Учетная запись
'finley'@'localhost'необходима, если есть учетная запись анонимного пользователя дляlocalhost. Без учетной записи'finley'@'localhost'учетная запись анонимного пользователя имеет приоритет при подключенииfinleyс локального хоста, иfinleyрассматривается как анонимный пользователь. Причина в том, что учетная запись анонимного пользователя имеет значение столбцаHostболее конкретного характера, чем учетная запись'finley'@'%', и, следовательно, появляется раньше в отсортированном порядке таблицыuser. (Дополнительную информацию о сортировке таблицыuserсм. в разделе 8.2.6 «Контроль доступа, этап 1: Проверка подключения».) Учетная запись
'admin'@'localhost'может использоваться только пользователемadminдля подключения с локального хоста. Ей предоставляются глобальные административные привилегииRELOADиPROCESS. Эти привилегии позволяют пользователюadminвыполнять команды mysqladmin reload, mysqladmin refresh и mysqladmin flush-xxx, а также mysqladmin processlist. Привилегии доступа к базам данных не предоставляются. Вы можете добавить такие привилегии с помощью командGRANT.Учетная запись
'dummy'@'localhost'не имеет пароля (что небезопасно и не рекомендуется). Эта учетная запись может использоваться только для подключения с локального хоста. Привилегии не предоставляются. Предполагается, что вы предоставите конкретные привилегии учетной записи с помощью командGRANT.
В предыдущем примере привилегии предоставляются на глобальном уровне. В следующем примере создаются три учетные записи и предоставляется им доступ на более низких уровнях; то есть, к определенным базам данных или объектам внутри баз данных. Каждая учетная запись имеет имя пользователя custom, но части имени хоста различаются:
CREATE USER 'custom'@'localhost'
IDENTIFIED BY 'password';
GRANT ALL
ON bankaccount.*
TO 'custom'@'localhost';
CREATE USER 'custom'@'host47.example.com'
IDENTIFIED BY 'password';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON expenses.*
TO 'custom'@'host47.example.com';
CREATE USER 'custom'@'%.example.com'
IDENTIFIED BY 'password';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP
ON customer.addresses
TO 'custom'@'%.example.com';
Три учетные записи могут использоваться следующим образом:
Учетная запись
'custom'@'localhost'имеет все привилегии на уровне базы данных для доступа к базе данныхbankaccount. К серверу можно подключиться только с локального хоста.Учетная запись
'custom'@'host47.example.com'имеет определенные привилегии на уровне базы данных для доступа к базе данныхexpenses. К серверу можно подключиться только с хостаhost47.example.com.Учетная запись
'custom'@'%.example.com'имеет определенные привилегии на уровне таблиц для доступа к таблицеaddressesв базе данныхcustomerс любого хоста в доменеexample.com. К серверу можно подключиться со всех машин в домене из-за использования подстановочного символа%в части имени хоста учетной записи.
Проверка привилегий и свойств учетной записи
Для просмотра привилегий учетной записи используйте команду SHOW GRANTS:
mysql> SHOW GRANTS FOR 'admin'@'localhost';
+-----------------------------------------------------+
| Grants for admin@localhost |
+-----------------------------------------------------+
| GRANT RELOAD, PROCESS ON *.* TO `admin`@`localhost` |
+-----------------------------------------------------+
Для просмотра свойств учетной записи, не являющихся привилегиями, используйте команду SHOW CREATE USER:
mysql> SET print_identified_with_as_hex = ON;
mysql> SHOW CREATE USER 'admin'@'localhost'\G
*************************** 1. row ***************************
CREATE USER for admin@localhost: CREATE USER `admin`@`localhost`
IDENTIFIED WITH 'caching_sha2_password'
AS 0x24412430303524301D0E17054E2241362B1419313C3E44326F294133734B30792F436E77764270373039612E32445250786D43594F45354532324B6169794F47457852796E32
REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK
PASSWORD HISTORY DEFAULT
PASSWORD REUSE INTERVAL DEFAULT
PASSWORD REQUIRE CURRENT DEFAULT
Включение системной переменной print_identified_with_as_hex приводит к тому, что SHOW CREATE
USER отображает значения хэшей, содержащие непечатаемые символы в виде шестнадцатеричных строк, а не обычных строковых литералов.
Отмена привилегий учетной записи
Для отмены привилегий учетной записи используйте команду REVOKE. Привилегии могут быть отменены на различных уровнях, так же как и предоставлены на различных уровнях.
Отмена глобальных привилегий:
REVOKE ALL
ON *.*
FROM 'finley'@'%.example.com';
REVOKE RELOAD
ON *.*
FROM 'admin'@'localhost';
Отмена привилегий на уровне базы данных:
REVOKE CREATE,DROP
ON expenses.*
FROM 'custom'@'host47.example.com';
Отмена привилегий на уровне таблиц:
REVOKE INSERT,UPDATE,DELETE
ON customer.addresses
FROM 'custom'@'%.example.com';
Для проверки результата отмены привилегий используйте команду SHOW GRANTS:
mysql> SHOW GRANTS FOR 'admin'@'localhost';
+---------------------------------------------+
| Grants for admin@localhost |
+---------------------------------------------+
| GRANT PROCESS ON *.* TO `admin`@`localhost` |
+---------------------------------------------+
Удаление учетных записей
Для удаления учетной записи используйте команду DROP
USER. Например, чтобы удалить некоторые из ранее созданных учетных записей:
DROP USER 'finley'@'localhost';
DROP USER 'finley'@'%.example.com';
DROP USER 'admin'@'localhost';
DROP USER 'dummy'@'localhost';
© 2025 Oracle
Licensed under the GPLv2 License.