ALTER USER
Синтаксис
ALTER USER [IF EXISTS]
user_specification [,user_specification] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[lock_option] [password_option]
user_specification:
username [authentication_option]
authentication_option:
IDENTIFIED BY 'password'
| IDENTIFIED BY PASSWORD 'password_hash'
| IDENTIFIED {VIA|WITH} authentication_rule [OR authentication_rule] ...
authentication_rule:
authentication_plugin
| authentication_plugin {USING|AS} 'authentication_string'
| authentication_plugin {USING|AS} PASSWORD('password')
tls_option
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
resource_option
MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
| MAX_STATEMENT_TIME time
password_option:
PASSWORD EXPIRE
| PASSWORD EXPIRE DEFAULT
| PASSWORD EXPIRE NEVER
| PASSWORD EXPIRE INTERVAL N DAY
lock_option:
ACCOUNT LOCK
| ACCOUNT UNLOCK
}
Описание
Команда ALTER USER изменяет существующие учётные записи MariaDB. Для её использования необходимо обладать глобальным привилегием CREATE USER или правом UPDATE для базы данных mysql. Также требуется глобальный привилегий SUPER, если переменная сервера read_only включена.
Если какая-либо из указанных учётных записей ещё не существует, произойдёт ошибка. Если ошибка возникает, ALTER USER всё равно изменит учётные записи, для которых ошибка не возникла. Для всех пользователей, которые не были изменены, будет выдано только одно сообщение об ошибке.
Для переименования существующей учётной записи (имя пользователя и/или хост) см. RENAME USER.
IF EXISTS
Когда используется IF EXISTS условие, MariaDB возвращает предупреждение вместо ошибки для каждого указанного пользователя, которого не существует.
Имена учётных записей
Для ALTER USER операторов имена учётных записей указываются в качестве аргумента username аналогично операторам CREATE USER. Подробности о том, как задаются имена учётных записей, см. в разделе имена учётных записей на странице CREATE USER.
CURRENT_USER или CURRENT_USER() также могут быть использованы для изменения учётной записи, вошедшей в текущую сессию. Например, чтобы изменить пароль текущего пользователя на mariadb:
ALTER USER CURRENT_USER() IDENTIFIED BY 'mariadb';
Параметры аутентификации
Начиная с MariaDB 10.4, для каждой учётной записи пользователя можно использовать более одного плагина аутентификации. Например, это может быть полезно для постепенной миграции пользователей на более безопасный плагин аутентификации ed25519 со временем, сохраняя при этом старый плагин аутентификации mysql_native_password в качестве альтернативы на переходный период. Подробнее см. Аутентификация с MariaDB 10.4.
При выполнении ALTER USER, если не указан параметр аутентификации в инструкции IDENTIFIED VIA, этот метод аутентификации будет удалён. (Однако это не так до MariaDB 10.4.13, см. MDEV-21928)
Например, пользователь создаётся с возможностью аутентификации как по паролю, так и по unix_socket:
CREATE USER 'bob'@'localhost'
IDENTIFIED VIA mysql_native_password USING PASSWORD('pwd')
OR unix_socket;
SHOW CREATE USER 'bob'@'localhost'\G
*************************** 1. row ***************************
CREATE USER for bob@localhost: CREATE USER `bob`@`localhost`
IDENTIFIED VIA mysql_native_password
USING '*975B2CD4FF9AE554FE8AD33168FBFC326D2021DD'
OR unix_socket
Если пароль пользователя обновляется, но аутентификация unix_socket не указана в IDENTIFIED VIA фрагменте, аутентификация unix_socket больше не будет разрешена.
ALTER USER 'bob'@'localhost' IDENTIFIED VIA mysql_native_password
USING PASSWORD('pwd2');
SHOW CREATE USER 'bob'@'localhost'\G
*************************** 1. row ***************************
CREATE USER for bob@localhost: CREATE USER `bob`@`localhost`
IDENTIFIED BY PASSWORD '*38366FDA01695B6A5A9DD4E428D9FB8F7EB75512'
IDENTIFIED BY 'пароль'
Необязательная IDENTIFIED BY фраза может быть использована для присвоения пароля учётной записи. Пароль должен быть указан в виде обычного текста. Он будет хэширован функцией PASSWORD перед сохранением в таблице mysql.user.
Например, если наш пароль mariadb, то мы можем установить пароль учётной записи с помощью:
ALTER USER foo2@test IDENTIFIED BY 'mariadb';
Если вы не укажете пароль с помощью IDENTIFIED BY фразы, пользователь сможет подключаться без пароля. Пустой пароль не является подстановкой для совпадения с любым паролем. Пользователь должен подключаться без указания пароля, если пароль не установлен.
Единственные плагины аутентификации, которые поддерживает эта фраза, это mysql_native_password и mysql_old_password.
IDENTIFIED BY PASSWORD 'хэш_пароля'
Необязательная IDENTIFIED BY PASSWORD фраза может быть использована для присвоения учётной записи пароля, который уже хэширован. Пароль должен быть указан в виде хэша, полученного с помощью функции PASSWORD. Он будет сохранён в таблице mysql.user в том виде, в котором он есть.
Например, если наш пароль mariadb, то мы можем найти хэш с помощью:
SELECT PASSWORD('mariadb');
+-------------------------------------------+
| PASSWORD('mariadb') |
+-------------------------------------------+
| *54958E764CE10E50764C2EECBB71D01F08549980 |
+-------------------------------------------+
А затем мы можем установить пароль учётной записи с помощью хэша:
ALTER USER foo2@test IDENTIFIED BY PASSWORD '*54958E764CE10E50764C2EECBB71D01F08549980';
Если вы не укажете пароль с помощью IDENTIFIED BY фразы, пользователь сможет подключаться без пароля. Пустой пароль не является подстановкой для совпадения с любым паролем. Пользователь должен подключаться без указания пароля, если пароль не установлен.
Единственные плагины аутентификации, которые поддерживает эта фраза, это mysql_native_password и mysql_old_password.
IDENTIFIED {VIA|WITH} плагин_аутентификации
Необязательная IDENTIFIED VIA authentication_plugin фраза позволяет указать, что учётная запись должна аутентифицироваться с помощью определённого плагина аутентификации. Имя плагина должно соответствовать активному плагину аутентификации, как указано в SHOW PLUGINS. Если его нет в выводе, необходимо установить его с помощью INSTALL PLUGIN или INSTALL SONAME.
Например, это можно использовать с плагином аутентификации PAM:
ALTER USER foo2@test IDENTIFIED VIA pam;
Некоторые плагины аутентификации позволяют указывать дополнительные аргументы после ключевого слова USING или AS. Например, плагин аутентификации PAM принимает имя службы:
ALTER USER foo2@test IDENTIFIED VIA pam USING 'mariadb';
Точное значение дополнительного аргумента зависит от конкретного плагина аутентификации.
В MariaDB 10.4 и более поздних версиях ключевые слова USING или AS также могут быть использованы для предоставления текстового пароля плагину, если он предоставляется в качестве аргумента функции PASSWORD(). Это справедливо только для плагинов аутентификации, которые реализовали обработчик для функции PASSWORD(). Например, плагин аутентификации ed25519 поддерживает это:
ALTER USER safe@'%' IDENTIFIED VIA ed25519 USING PASSWORD('secret');
Параметры TLS
По умолчанию MariaDB передаёт данные между сервером и клиентами без шифрования. Это обычно приемлемо, когда сервер и клиент работают на одном хосте или в сетях, где безопасность гарантируется другими способами. Однако в случаях, когда сервер и клиент находятся в разных сетях или находятся в сети с высоким риском, отсутствие шифрования вызывает опасения с точки зрения безопасности, так как злоумышленник потенциально может перехватывать трафик во время его передачи по сети между ними.
Для устранения этой проблемы MariaDB позволяет шифровать данные в процессе передачи между сервером и клиентами с помощью протокола Transport Layer Security (TLS). Раньше TLS назывался Secure Socket Layer (SSL), но строго говоря, протокол SSL является предшественником TLS, и сейчас эта версия протокола считается небезопасной. В документации часто используется термин SSL, и по соображениям совместимости переменные сервера и состояния, связанные с TLS, по-прежнему используют префикс ssl_, но внутренне MariaDB поддерживает только его безопасные преемники.
Дополнительную информацию о том, поддерживает ли ваш сервер MariaDB TLS, см. в разделе Обзор безопасных подключений.
Вы можете задать определённые ограничения, связанные с TLS, для конкретных учётных записей пользователей. Например, вы можете использовать это с учётными записями, которые требуют доступа к конфиденциальным данным при передаче их по сетям, которыми вы не управляете. Эти ограничения можно включить для учётной записи пользователя с помощью операторов CREATE USER, ALTER USER или GRANT. Доступны следующие параметры:
| Параметр | Описание |
|---|---|
REQUIRE NONE |
TLS не требуется для этой учётной записи, но может быть использован. |
REQUIRE SSL |
Учётная запись должна использовать TLS, но действительный сертификат X509 не требуется. Этот параметр нельзя комбинировать с другими параметрами TLS. |
REQUIRE X509 |
Учётная запись должна использовать TLS и должна иметь действительный сертификат X509. Этот параметр подразумевает REQUIRE SSL. Этот параметр нельзя комбинировать с другими параметрами TLS. |
REQUIRE ISSUER 'issuer' |
Учётная запись должна использовать TLS и должна иметь действительный сертификат X509. Кроме того, уполномоченная организация по сертификации должна быть указана в строке issuer. Этот параметр подразумевает REQUIRE X509. Этот параметр можно комбинировать с параметрами SUBJECT, и CIPHER в любом порядке. |
REQUIRE SUBJECT 'subject' |
Учётная запись должна использовать TLS и должна иметь действительный сертификат X509. Кроме того, субъект сертификата должен быть указан в строке subject. Этот параметр подразумевает REQUIRE X509. Этот параметр можно комбинировать с параметрами ISSUER, и CIPHER в любом порядке. |
REQUIRE CIPHER 'cipher' |
Учётная запись должна использовать TLS, но действительный сертификат X509 не требуется. Кроме того, шифрование, используемое для подключения, должно использовать определённый метод шифрования, указанный в строке cipher. Этот параметр подразумевает REQUIRE SSL. Этот параметр можно комбинировать с параметрами ISSUER, и SUBJECT в любом порядке. |
Ключевое слово REQUIRE должно использоваться только один раз для всех указанных параметров, а ключевое слово AND может быть использовано для разделения отдельных параметров, но это не обязательно.
Например, вы можете изменить учётную запись пользователя, чтобы потребовать указанные параметры TLS с помощью следующего:
ALTER USER 'alice'@'%' REQUIRE SUBJECT '/CN=alice/O=My Dom, Inc./C=US/ST=Oregon/L=Portland' AND ISSUER '/C=FI/ST=Somewhere/L=City/ O=Some Company/CN=Peter Parker/emailAddress=p.parker@marvel.com' AND CIPHER 'SHA-DES-CBC3-EDH-RSA';
Если для конкретной учётной записи пользователя заданы какие-либо из этих параметров, любой клиент, который пытается подключиться с помощью этой учётной записи, должен быть настроен на подключение с TLS.
См. Защиту подключений для клиента и сервера для получения информации о том, как включить TLS на клиенте и сервере.
Параметры ограничения ресурсов
Можно установить лимиты на определенные ресурсы сервера для каждого пользователя. В следующей таблице показаны значения, которые можно установить для каждого пользователя:
| Тип ограничения | Описание |
|---|---|
MAX_QUERIES_PER_HOUR |
Количество запросов, которые может выполнить пользователь в час (включая обновления) |
MAX_UPDATES_PER_HOUR |
Количество обновлений (а не запросов), которые может выполнить пользователь в час |
MAX_CONNECTIONS_PER_HOUR |
Количество подключений, которые может инициировать пользователь в час |
MAX_USER_CONNECTIONS |
Количество одновременных подключений, которые могут быть приняты от одного пользователя; если это значение равно 0, используется значение max_connections; если max_connections равно 0, ограничений на одновременные подключения для этого пользователя нет. |
MAX_STATEMENT_TIME |
Таймаут, в секундах, для запросов, выполняемых пользователем. Смотрите также Прерывание запросов, превысивших определенное время выполнения. |
Если любое из этих ограничений установлено в значение 0, то для этого ресурса для данного пользователя ограничений нет.
Вот пример того, как установить ограничения на ресурсы пользователя:
ALTER USER 'someone'@'localhost' WITH
MAX_USER_CONNECTIONS 10
MAX_QUERIES_PER_HOUR 200;
Ресурсы отслеживаются по пользователям, а не по имени пользователя или подключению.
Подсчет можно сбросить для всех пользователей, используя FLUSH USER_RESOURCES, FLUSH PRIVILEGES или mysqladmin reload.
Ограничения на ресурсы по пользователю хранятся в таблице user в базе данных mysql. Столбцы, используемые для ограничения ресурсов, называются max_questions, max_updates, max_connections (для MAX_CONNECTIONS_PER_HOUR) и max_user_connections (для MAX_USER_CONNECTIONS).
Срок действия пароля
Помимо автоматического истечения срока действия пароля, определяемого default_password_lifetime, время истечения срока действия пароля можно установить для каждого пользователя, переопределяя глобальное значение, например:
ALTER USER 'monty'@'localhost' PASSWORD EXPIRE INTERVAL 120 DAY; ALTER USER 'monty'@'localhost' PASSWORD EXPIRE NEVER; ALTER USER 'monty'@'localhost' PASSWORD EXPIRE DEFAULT;
Подробнее см. Срок действия пароля пользователя.
Блокировка учетной записи
Блокировка учетных записей позволяет привилегированным администраторам блокировать/разблокировать учетные записи пользователей. Если учетная запись заблокирована, новые подключения клиентов не будут разрешены (существующие подключения не затрагиваются). Например:
ALTER USER 'marijn'@'localhost' ACCOUNT LOCK;
Подробнее см. Блокировка учетных записей.
Начиная с MariaDB 10.4.7 и MariaDB 10.5.8, предложения lock_option и password_option могут быть в любом порядке.
См. также
- Аутентификация с MariaDB 10.4
- GRANT
- CREATE USER
- DROP USER
- SET PASSWORD
- SHOW CREATE USER
- Таблица mysql.user
- Плагины проверки паролей - позволяют устанавливать основные критерии для паролей
- Плагины аутентификации - позволяют использовать различные методы аутентификации и разрабатывать новые.
© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/alter-user/