Spec-Zone.ru › MySQL 5.7

13.7.1.1 Заявление ALTER USER

ALTER USER [IF EXISTS]
    user [auth_option] [, user [auth_option]] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH resource_option [resource_option] ...]
    [password_option | lock_option] ...

ALTER USER [IF EXISTS]
    USER() IDENTIFIED BY 'auth_string'

user:
    (see Section 6.2.4, “Specifying Account Names”)

auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
}

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
}

password_option: {
    PASSWORD EXPIRE
  | PASSWORD EXPIRE DEFAULT
  | PASSWORD EXPIRE NEVER
  | PASSWORD EXPIRE INTERVAL N DAY
}

lock_option: {
    ACCOUNT LOCK
  | ACCOUNT UNLOCK
}

Заявление ALTER USER изменяет учётные записи MySQL. Оно позволяет изменять параметры аутентификации, SSL/TLS, лимиты ресурсов и управления паролями для существующих учётных записей. Также оно может использоваться для блокировки и разблокировки учётных записей.

Для использования ALTER USER, необходимо иметь глобальный CREATE USER привилегий или привилегию UPDATE для базы данных системы mysql. Когда системная переменная read_only включена, ALTER USER дополнительно требует привилегию SUPER.

По умолчанию, происходит ошибка, если вы пытаетесь изменить пользователя, который не существует. Если указан пункт IF EXISTS, то для каждого указанного пользователя, который не существует, вместо ошибки будет выведено предупреждение.

Важно

В некоторых случаях ALTER USER может быть записан в журналы сервера или на стороне клиента в файле истории, таком как ~/.mysql_history, что означает, что открытые текстовые пароли могут быть прочитаны любым пользователем, имеющим доступ к этой информации. Для получения информации о условиях, при которых это происходит для журналов сервера, и о том, как это контролировать, см. Раздел 6.1.2.3, “Пароли и регистрация”. Для аналогичной информации о регистрации на стороне клиента, см. Раздел 4.5.1.3, “Регистрация клиента mysql”.

Существует несколько аспектов заявления ALTER USER, описанных в следующих разделах:

  • Обзор ALTER USER

  • Параметры аутентификации ALTER USER

  • Параметры SSL/TLS ALTER USER

  • Параметры лимитов ресурсов ALTER USER

  • Параметры управления паролями ALTER USER

  • Параметры блокировки учётных записей ALTER USER

Обзор ALTER USER

Для каждой затронутой учётной записи, ALTER USER изменяет соответствующую строку в таблице системы mysql.user, чтобы отразить свойства, указанные в заявлении. Неуказанные свойства сохранят свои текущие значения.

Каждое имя учётной записи использует формат, описанный в Разделе 6.2.4, “Указание имён учётных записей”. Часть имени хоста учётной записи, если она опущена, по умолчанию равна '%'. Также возможно указать CURRENT_USER или CURRENT_USER() для ссылки на учётную запись, связанную с текущей сессией.

Только в одном случае учётная запись может быть указана с помощью функции USER():

ALTER USER USER() IDENTIFIED BY 'auth_string';

Этот синтаксис позволяет изменить свой собственный пароль, не называя свою учётную запись напрямую.

Для синтаксиса ALTER USER, который допускает, что за значением auth_option следует значение user, auth_option указывает, как учётная запись проходит аутентификацию, задавая плагин аутентификации учётной записи, данные для входа (например, пароль) или оба. Каждое значение auth_option применяется только к учётной записи, указанной непосредственно перед ним.

После указания параметров user в заявлении могут быть включены параметры для SSL/TLS, ограничений ресурсов, управления паролями и блокировки. Все такие параметры глобальны для заявления и применяются ко всем учётным записям, указанным в заявлении.

Пример: Изменить пароль учётной записи и установить его срок действия. В результате пользователь должен подключиться с указанным паролем и выбрать новый при следующем подключении:

ALTER USER 'jeffrey'@'localhost'
  IDENTIFIED BY 'new_password' PASSWORD EXPIRE;

Пример: Изменить учётную запись, чтобы использовать плагин аутентификации sha256_password и указанный пароль. Требовать, чтобы новый пароль выбирался каждые 180 дней:

ALTER USER 'jeffrey'@'localhost'
  IDENTIFIED WITH sha256_password BY 'new_password'
  PASSWORD EXPIRE INTERVAL 180 DAY;

Пример: Блокировать или разблокировать учётную запись:

ALTER USER 'jeffrey'@'localhost' ACCOUNT LOCK;
ALTER USER 'jeffrey'@'localhost' ACCOUNT UNLOCK;

Пример: Требовать от учётной записи подключения с использованием SSL и установить лимит в 20 подключений в час:

ALTER USER 'jeffrey'@'localhost'
  REQUIRE SSL WITH MAX_CONNECTIONS_PER_HOUR 20;

Пример: Изменить несколько учётных записей, указав некоторые параметры для каждой учётной записи и некоторые глобальные параметры:

ALTER USER
  'jeffrey'@'localhost' IDENTIFIED BY 'new_password',
  'jeanne'@'localhost'
  REQUIRE SSL WITH MAX_USER_CONNECTIONS 2;

Значение IDENTIFIED BY, следующая за jeffrey, применяется только к предшествующей ей учётной записи, поэтому оно изменяет пароль на 'jeffrey_new_password' только для jeffrey. Для jeanne нет значения на уровне учётной записи (поэтому пароль остаётся без изменений).

Остальные свойства применяются глобально ко всем учётным записям, указанным в заявлении, поэтому для обеих учётных записей:

  • Подключения должны использовать SSL.

  • Учётная запись может использоваться для максимум двух одновременных подключений.

При отсутствии определённого типа опции учётная запись остаётся неизменной в этом отношении. Например, при отсутствии опции блокировки состояние блокировки учётной записи не изменяется.

END_OF_DOCUMENT_MARKER
Параметры аутентификации ALTER USER

Имя учетной записи может быть дополнено параметром аутентификации auth_option, который указывает плагин аутентификации, учетные данные или оба:

  • auth_plugin задаёт имя плагина аутентификации. Имя плагина может быть строковым литералом в кавычках или некавычным именем. Имена плагинов хранятся в столбце plugin таблицы системы mysql.user.

    Для синтаксиса auth_option, который не указывает плагин аутентификации, используется плагин по умолчанию, указанный значением системной переменной default_authentication_plugin. Описание каждого плагина можно найти в разделе 6.4.1, «Плагины аутентификации».

  • Учетные данные хранятся в таблице системы mysql.user. Значение 'auth_string' определяет учетные данные пользователя, либо как открытый текст (незашифрованный), либо в формате, ожидаемом плагином аутентификации, связанным с пользователем:

    • Для синтаксиса, использующего BY 'auth_string', строка представляет собой открытый текст, который передаётся плагину аутентификации для возможного шифрования. Результат, возвращённый плагином, сохраняется в таблице mysql.user. Плагин может использовать значение как есть, в таком случае шифрование не выполняется.

    • Для синтаксиса, использующего AS 'auth_string', строка предполагается уже в формате, требуемом плагином аутентификации, и сохраняется как есть в таблице mysql.user. Если плагин требует хэшированное значение, оно должно быть предварительно хэшировано в формате, подходящем для плагина, иначе значение не может быть обработано плагином, и правильная аутентификация клиентских подключений невозможна.

    • Если плагин аутентификации не выполняет хэширование строки аутентификации, фразы BY 'auth_string' и AS 'auth_string' имеют одинаковый эффект: строка аутентификации сохраняется как есть в таблице системы mysql.user.

ALTER USER допускает следующие синтаксические варианты auth_option:

  • IDENTIFIED BY 'auth_string'

    Устанавливает плагин аутентификации пользователя на плагин по умолчанию, передаёт значение открытого текста 'auth_string' в плагин для возможного хэширования и сохраняет результат в строке пользователя в таблице системы mysql.user.

  • IDENTIFIED WITH auth_plugin

    Устанавливает плагин аутентификации пользователя на auth_plugin, очищает учетные данные до пустой строки (учетные данные связаны со старым плагином аутентификации, а не с новым) и сохраняет результат в строке пользователя в таблице системы mysql.user.

    Кроме того, пароль отмечается как просроченный. Пользователь должен выбрать новый при следующем подключении.

  • IDENTIFIED WITH auth_plugin BY 'auth_string'

    Устанавливает плагин аутентификации пользователя на auth_plugin, передаёт значение открытого текста 'auth_string' в плагин для возможного хэширования и сохраняет результат в строке пользователя в таблице системы mysql.user.

  • IDENTIFIED WITH auth_plugin AS 'auth_string'

    Устанавливает плагин аутентификации пользователя на auth_plugin и сохраняет значение 'auth_string' как есть в строке пользователя mysql.user. Если плагин требует хэшированной строки, предполагается, что строка уже хэширована в требуемом формате.

Пример: Укажите пароль как открытый текст; используется плагин по умолчанию:

ALTER USER 'jeffrey'@'localhost'
  IDENTIFIED BY 'password';

Пример: Укажите плагин аутентификации вместе со значением пароля как открытого текста:

ALTER USER 'jeffrey'@'localhost'
  IDENTIFIED WITH mysql_native_password
             BY 'password';

Пример: Укажите плагин аутентификации вместе со значением хэшированного пароля:

ALTER USER 'jeffrey'@'localhost'
  IDENTIFIED WITH mysql_native_password
             AS '*6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4';

Дополнительную информацию о настройке паролей и плагинов аутентификации можно найти в разделе 6.2.10, «Установка паролей учетной записи», и разделе 6.2.13, «Подключаемая аутентификация».

Параметры SSL/TLS для пользователя

MySQL может проверять атрибуты сертификата X.509 помимо обычной аутентификации, основанной на имени пользователя и учетных данных. Дополнительную информацию об использовании SSL/TLS с MySQL см. в разделе 6.3, «Использование защищённых соединений».

Для указания параметров SSL/TLS для учетной записи MySQL используйте клаузу REQUIRE, которая указывает одно или несколько значений tls_option.

Порядок параметров REQUIRE не имеет значения, но один параметр нельзя указать дважды. Ключевое слово AND необязательно между параметрами REQUIRE.

ALTER USER допускает указание этих значений tls_option:

  • NONE

    Указывает, что для всех учетных записей, указанных в команде, нет требований к SSL или X.509. Разрешены незащищённые соединения, если имя пользователя и пароль валидны. Защищённые соединения могут использоваться по выбору клиента, если у клиента есть соответствующие сертификат и закрытый ключ.

    ALTER USER 'jeffrey'@'localhost' REQUIRE NONE;
    

    Клиенты по умолчанию пытаются установить защищённое соединение. Для клиентов, у которых REQUIRE NONE, попытка соединения переходит к незащищённому соединению, если защищённое соединение не может быть установлено. Чтобы потребовать защищённое соединение, клиенту достаточно указать только параметр --ssl-mode=REQUIRED; попытка соединения завершается ошибкой, если защищённое соединение не может быть установлено.

  • SSL

    Указывает серверу разрешить только защищённые соединения для всех учетных записей, указанных в команде.

    ALTER USER 'jeffrey'@'localhost' REQUIRE SSL;
    

    Клиенты по умолчанию пытаются установить защищённое соединение. Для учетных записей, у которых REQUIRE SSL, попытка соединения завершается ошибкой, если защищённое соединение не может быть установлено.

  • X509

    Для всех учетных записей, указанных в команде, требуется предоставление валидного сертификата клиентом, но точный сертификат, издатель и предмет не важны. Единственное требование состоит в том, что его подпись должна быть проверена с помощью одного из сертификатов CA. Использование сертификатов X.509 всегда подразумевает шифрование, поэтому параметр SSL в этом случае излишен.

    ALTER USER 'jeffrey'@'localhost' REQUIRE X509;
    

    Для учетных записей с REQUIRE X509, клиенты должны указать параметры --ssl-key и --ssl-cert для подключения. (Рекомендуется, но не обязательно указать --ssl-ca, чтобы можно было проверить общедоступный сертификат, предоставленный сервером). Это верно для ISSUER и SUBJECT, так как эти параметры REQUIRE подразумевают требования X509.

  • ISSUER 'issuer'

    Для всех учетных записей, указанных в команде, требуется, чтобы клиенты представили действительный сертификат X.509, выпущенный центром сертификации 'issuer'. Если клиент предоставляет сертификат, который действителен, но имеет другого издателя, сервер отклоняет соединение. Использование сертификатов X.509 всегда подразумевает шифрование, поэтому параметр SSL в этом случае излишен.

    ALTER USER 'jeffrey'@'localhost'
      REQUIRE ISSUER '/C=SE/ST=Stockholm/L=Stockholm/
        O=MySQL/CN=CA/emailAddress=ca@example.com';
    

    Так как ISSUER подразумевает требования X509, клиенты должны указать параметры --ssl-key и --ssl-cert для подключения. (Рекомендуется, но не обязательно указать --ssl-ca, чтобы можно было проверить общедоступный сертификат, предоставленный сервером).

  • SUBJECT 'subject'

    Для всех учетных записей, указанных в команде, требуется предоставление клиентом действительного сертификата X.509 с темой subject. Если клиент предоставляет сертификат, который действителен, но имеет другую тему, сервер отклоняет соединение. Использование сертификатов X.509 всегда подразумевает шифрование, поэтому параметр SSL в этом случае излишен.

    ALTER USER 'jeffrey'@'localhost'
      REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/
        O=MySQL demo client certificate/
        CN=client/emailAddress=client@example.com';
    

    MySQL выполняет простое сравнение строковых значений 'subject' со значением в сертификате, поэтому регистр букв и порядок компонентов должны быть точно такими же, как в сертификате.

    Так как SUBJECT подразумевает требования X509, клиенты должны указать параметры --ssl-key и --ssl-cert для подключения. (Рекомендуется, но не обязательно указать --ssl-ca, чтобы можно было проверить общедоступный сертификат, предоставленный сервером).

  • CIPHER 'cipher'

    Для всех учетных записей, указанных в команде, требуется определённый метод шифрования соединений. Этот параметр необходим для обеспечения использования шифров и ключей достаточной силы. Шифрование может быть слабым, если используются старые алгоритмы с короткими ключами шифрования.

    ALTER USER 'jeffrey'@'localhost'
      REQUIRE CIPHER 'EDH-RSA-DES-CBC3-SHA';
    

Параметры SUBJECT, ISSUER и CIPHER могут быть объединены в клаузу REQUIRE:

ALTER USER 'jeffrey'@'localhost'
  REQUIRE SUBJECT '/C=SE/ST=Stockholm/L=Stockholm/
    O=MySQL demo client certificate/
    CN=client/emailAddress=client@example.com'
  AND ISSUER '/C=SE/ST=Stockholm/L=Stockholm/
    O=MySQL/CN=CA/emailAddress=ca@example.com'
  AND CIPHER 'EDH-RSA-DES-CBC3-SHA';
Параметры ограничения ресурсов для пользователя

Можно установить ограничения на использование ресурсов сервера для учетной записи, как описано в разделе 6.2.16, «Установка ограничений на ресурсы учетных записей». Для этого используйте клаузу WITH, которая указывает одно или несколько значений resource_option.

Порядок параметров WITH не имеет значения, за исключением того, что если определенное ограничение ресурса указано несколько раз, последнее значение имеет приоритет.

ALTER USER допускает указание этих значений resource_option:

  • MAX_QUERIES_PER_HOUR count, MAX_UPDATES_PER_HOUR count, MAX_CONNECTIONS_PER_HOUR count

    Для всех учетных записей, указанных в команде, эти параметры ограничивают количество запросов, обновлений и соединений с сервером, разрешённых для каждой учетной записи в течение любого заданного одного часа. (Запросы, результаты которых передаются из кэша запросов, не учитываются в ограничении MAX_QUERIES_PER_HOUR). Если count равно 0 (значение по умолчанию), это означает, что для учетной записи нет ограничений.

  • MAX_USER_CONNECTIONS count

    Для всех учетных записей, указанных в команде, ограничивает максимальное количество одновременных соединений с сервером для каждой учетной записи. ненулевое значение count явно указывает ограничение для учетной записи. Если count равно 0 (значение по умолчанию), сервер определяет количество одновременных соединений для учетной записи на основе глобального значения системной переменной max_user_connections. Если max_user_connections также равно нулю, ограничений для учетной записи нет.

Пример:

ALTER USER 'jeffrey'@'localhost'
  WITH MAX_QUERIES_PER_HOUR 500 MAX_UPDATES_PER_HOUR 100;
Параметры управления паролями ALTER USER

ALTER USER поддерживает несколько значений password_option для управления истечением срока действия пароля, чтобы вручную истечь паролем учетной записи или установить политику истечения срока действия пароля. Параметры политики не истекают пароль. Вместо этого они определяют, как сервер применяет автоматическое истечение срока действия для учетной записи на основе возраста пароля учетной записи. Для данной учетной записи ее возраст пароля оценивается с даты и времени последнего изменения пароля.

В этом разделе описывается синтаксис параметров управления паролями. Сведения об установлении политики управления паролями см. в разделе 6.2.11 «Управление паролями».

Если задано несколько параметров управления паролями, приоритет имеет последний.

Эти параметры применяются только к учетным записям, которые используют плагин аутентификации, хранящий данные для авторизации внутри MySQL. Для учетных записей, которые используют плагин, осуществляющий аутентификацию по системе авторизации, внешней по отношению к MySQL, управление паролями должно выполняться внешне по отношению к этой системе. Дополнительную информацию об хранении данных для авторизации внутри см. в разделе 6.2.11 «Управление паролями».

Сеанс клиента работает в ограниченном режиме, если пароль учетной записи истек вручную или если возраст пароля считается большим, чем разрешенный срок действия по политике автоматического истечения срока действия. В ограниченном режиме операции, выполняемые в сеансе, приводят к ошибке, пока пользователь не установит новый пароль учетной записи. Дополнительную информацию об ограниченном режиме см. в разделе 6.2.12 «Обработка сервером истекших паролей».

Примечание

Хотя возможно “сбросить” истекший пароль, установив его на текущее значение, предпочтительнее выбрать другой пароль.

ALTER USER допускает следующие password_option значения для управления истечением пароля:

  • PASSWORD EXPIRE

    Немедленно отмечает пароль как истекший для всех учетных записей, указанных в инструкции.

    ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE;
    
  • PASSWORD EXPIRE DEFAULT

    Устанавливает для всех учетных записей, указанных в инструкции, чтобы применялась глобальная политика истечения срока действия, как указано в переменной системы default_password_lifetime.

    ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE DEFAULT;
    
  • PASSWORD EXPIRE NEVER

    Этот параметр истечения срока действия переопределяет глобальную политику для всех учетных записей, указанных в инструкции. Для каждой из них он отключает истечение пароля, так что пароль никогда не истекает.

    ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE NEVER;
    
  • PASSWORD EXPIRE INTERVAL N DAY

    Этот параметр истечения срока действия переопределяет глобальную политику для всех учетных записей, указанных в инструкции. Для каждой из них он устанавливает срок действия пароля на N дней. Следующее утверждение требует изменения пароля каждые 180 дней:

    ALTER USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
    
Параметры блокировки учетных записей ALTER USER

MySQL поддерживает блокировку и разблокировку учетных записей с помощью параметров ACCOUNT LOCK и ACCOUNT UNLOCK, которые задают состояние блокировки для учетной записи. Дополнительные сведения см. в разделе 6.2.15 «Блокировка учетных записей».

Если задано несколько параметров блокировки учетных записей, приоритет имеет последний.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/alter-user.html

Spec-Zone.ru

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