Spec-Zone.ru › MySQL 9.2

8.2.8 Добавление учетных записей, назначение привилегий и удаление учетных записей

Для управления учетными записями MySQL используйте SQL-команды, предназначенные для этой цели:

  • CREATE USER и DROP USER создают и удаляют учетные записи.

  • GRANT и REVOKE назначают и отменяют привилегии для учетных записей.

  • SHOW GRANTS отображает назначения привилегий для учетных записей.

Команды управления учетными записями производят соответствующие изменения в базовых таблицах предоставления прав доступа, которые описаны в разделе 8.2.3 «Таблицы предоставления прав доступа».

Примечание

Не рекомендуется напрямую изменять таблицы предоставления прав доступа с помощью команд, таких как INSERT, UPDATE или DELETE. Делайте это на свой страх и риск. Сервер может игнорировать строки, которые становятся некорректными в результате таких изменений.

При любой операции, изменяющей таблицу предоставления прав доступа, сервер проверяет, соответствует ли структура таблицы ожидаемой структуре, и выдает ошибку, если это не так. Чтобы обновить таблицы до ожидаемой структуры, выполните процедуру обновления MySQL. См. главу 3 «Обновление MySQL».

Другой вариант создания учетных записей — использование графического инструмента 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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/creating-accounts.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API