Spec-Zone.ru › MySQL 8.4

15.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] ...
    [COMMENT 'comment_string' | ATTRIBUTE 'json_object']

ALTER USER [IF EXISTS]
    USER() user_func_auth_option

ALTER USER [IF EXISTS]
    user [registration_option]

ALTER USER [IF EXISTS]
    USER() [registration_option]

ALTER USER [IF EXISTS]
    user DEFAULT ROLE
    {NONE | ALL | role [, role ] ...}

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

auth_option: {
    IDENTIFIED BY 'auth_string'
        [REPLACE 'current_auth_string']
        [RETAIN CURRENT PASSWORD]
  | IDENTIFIED BY RANDOM PASSWORD
        [REPLACE 'current_auth_string']
        [RETAIN CURRENT PASSWORD]
  | IDENTIFIED WITH auth_plugin
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
        [REPLACE 'current_auth_string']
        [RETAIN CURRENT PASSWORD]
  | IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
        [REPLACE 'current_auth_string']
        [RETAIN CURRENT PASSWORD]
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
  | DISCARD OLD PASSWORD
  | ADD factor factor_auth_option [ADD factor factor_auth_option]
  | MODIFY factor factor_auth_option [MODIFY factor factor_auth_option]
  | DROP factor [DROP factor]
}

user_func_auth_option: {
    IDENTIFIED BY 'auth_string'
        [REPLACE 'current_auth_string']
        [RETAIN CURRENT PASSWORD]
  | DISCARD OLD PASSWORD
}

factor_auth_option: {
    IDENTIFIED BY 'auth_string'
  | IDENTIFIED BY RANDOM PASSWORD
  | IDENTIFIED WITH auth_plugin BY 'auth_string'
  | IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD
  | IDENTIFIED WITH auth_plugin AS 'auth_string'
}

registration_option: {
    factor INITIATE REGISTRATION
  | factor FINISH REGISTRATION SET CHALLENGE_RESPONSE AS 'auth_string'
  | factor UNREGISTER
}

factor: {2 | 3} FACTOR

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 [DEFAULT | NEVER | INTERVAL N DAY]
  | PASSWORD HISTORY {DEFAULT | N}
  | PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
  | PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
  | FAILED_LOGIN_ATTEMPTS N
  | PASSWORD_LOCK_TIME {N | UNBOUNDED}
}

lock_option: {
    ACCOUNT LOCK
  | ACCOUNT UNLOCK
}

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

В большинстве случаев, ALTER USER требует глобального CREATE USER разрешения или UPDATE разрешения для схемы mysql системы. Исключение составляют:

  • Любой клиент, который подключается к серверу с использованием неанонимной учетной записи, может изменить пароль для этой учетной записи. (В частности, вы можете изменить свой собственный пароль.) Чтобы узнать, под какой учетной записью сервер вас аутентифицировал, вызовите функцию CURRENT_USER():

    SELECT CURRENT_USER();
    
  • Для синтаксиса DEFAULT ROLE, ALTER USER требует следующих разрешений:

    • Установление стандартных ролей для другого пользователя требует глобального CREATE USER разрешения или UPDATE разрешения для таблицы системы mysql.default_roles.

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

  • Заявления, которые изменяют вторичные пароли, требуют следующих разрешений:

    • Для использования предложения RETAIN CURRENT PASSWORD или DISCARD OLD PASSWORD для заявлений ALTER USER, которые применяются к вашей собственной учетной записи, требуется разрешение APPLICATION_PASSWORD_ADMIN. Разрешение необходимо для управления вашим собственным вторичным паролем, поскольку большинству пользователей нужен только один пароль.

    • Если учетной записи необходимо разрешить управление вторичными паролями для всех учетных записей, требуется разрешение CREATE USER, а не APPLICATION_PASSWORD_ADMIN.

При включенном системной переменной read_only, для ALTER USER дополнительно требуется разрешение CONNECTION_ADMIN (или устаревшее разрешение SUPER).

К этим дополнительным соображениям по разрешениям также относятся:

  • Системная переменная authentication_policy накладывает определенные ограничения на использование связанных с аутентификацией предложений заявлений ALTER USER. Для получения подробной информации смотрите описание этой переменной. Эти ограничения не применяются, если у вас есть разрешение AUTHENTICATION_POLICY_ADMIN.

  • Для изменения учетной записи, использующей аутентификацию без пароля, необходимо разрешение PASSWORDLESS_USER_ADMIN.

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

Важно

В некоторых случаях, ALTER USER может быть записано в журналы сервера или на стороне клиента в файле истории, таком как ~/.mysql_history, что означает, что открытые текстовые пароли могут быть прочитаны кем угодно, имеющим доступ для чтения к этой информации. Информацию о ситуациях, в которых это происходит в журналах сервера, и о том, как это контролировать, см. в Разделе 8.1.2.3, «Пароли и ведение журналов». Аналогичную информацию об организации журналов на стороне клиента см. в Разделе 6.5.1.3, «Ведение журналов клиента mysql».

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

  • Обзор ALTER USER

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

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

  • Параметры регистрации ALTER USER

  • Параметры ролей ALTER USER

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

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

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

  • Параметры комментариев и атрибутов ALTER USER

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

  • Двоичный логгинг ALTER USER

Обзор ALTER USER

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

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

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

ALTER USER USER() IDENTIFIED BY 'auth_string';

Этот синтаксис позволяет изменить свой собственный пароль, не называя свой аккаунт напрямую. (Синтаксис также поддерживает клаузы REPLACE, RETAIN CURRENT PASSWORD и DISCARD OLD PASSWORD, описанные в разделе Параметры аутентификации ALTER USER.)

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

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

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

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

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

ALTER USER 'jeffrey'@'localhost'
  IDENTIFIED WITH caching_sha2_password BY 'new_password'
  PASSWORD EXPIRE INTERVAL 180 DAY
  FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 2;

Пример: Заблокировать или разблокировать аккаунт:

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 'jeffrey_new_password',
  'jeanne'@'localhost',
  'josh'@'localhost'
    IDENTIFIED BY 'josh_new_password'
    REPLACE 'josh_current_password'
    RETAIN CURRENT PASSWORD
  REQUIRE SSL WITH MAX_USER_CONNECTIONS 2
  PASSWORD HISTORY 5;

Значение IDENTIFIED BY, следующая за jeffrey, применяется только к предшествующему аккаунту, поэтому оно меняет пароль на 'jeffrey_new_password' только для jeffrey. Для jeanne нет значения для каждого аккаунта (что приводит к тому, что пароль остается неизменным). Для josh, IDENTIFIED BY устанавливает новый пароль ('josh_new_password'), REPLACE указывается, чтобы проверить, что пользователь, выполняющий оператор ALTER USER, знает текущий пароль ('josh_current_password'), и что текущий пароль также сохраняется как вторичный пароль аккаунта. (В результате josh может подключиться с использованием основного или вторичного пароля.)

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

  • Для подключений требуется использование SSL.

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

  • Изменение пароля не может использовать ни один из пяти последних паролей.

Пример: Удалить вторичный пароль для josh, оставив аккаунт только с основным паролем:

ALTER USER 'josh'@'localhost' DISCARD OLD PASSWORD;

В отсутствие конкретного типа опции аккаунт остается неизменным в этом отношении. Например, при отсутствии опции блокировки состояние блокировки аккаунта не изменяется.

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

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

Примечание

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

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

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

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

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

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

      Случайно сгенерированные пароли обладают характеристиками, описанными в генерации случайных паролей.

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

      Хэшированная строка может быть либо строковым литералом, либо шестнадцатеричным значением. Последнее соответствует типу значения, отображаемого SHOW CREATE USER для хэшей паролей, содержащих непечатаемые символы, когда переменная системы print_identified_with_as_hex включена.

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

  • Клауза REPLACE 'current_auth_string' выполняет проверку пароля. При её использовании:

    • REPLACE определяет текущий пароль учетной записи, который необходимо заменить, как строку открытого текста (незашифрованную).

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

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

    • Запрос завершается неудачно, если клауза указана, но не соответствует текущему паролю, даже если она необязательна.

    • REPLACE может быть указано только при изменении пароля учетной записи текущим пользователем.

    Дополнительную информацию о проверке пароля путём указания текущего пароля см. в разделе 8.2.15 «Управление паролями».

  • Клаузы RETAIN CURRENT PASSWORD и DISCARD OLD PASSWORD реализуют возможность двойного пароля. Обе являются необязательными, но если указаны, то имеют следующие последствия:

    • RETAIN CURRENT PASSWORD сохраняет текущий пароль учетной записи в качестве дополнительного пароля, заменяя любой существующий дополнительный пароль. Новый пароль становится основным, но клиенты могут использовать учетную запись для подключения к серверу, используя как основной, так и дополнительный пароль. (Исключение: Если новый пароль, указанный в операторе ALTER USER, пустой, дополнительный пароль также становится пустым, даже если указан RETAIN CURRENT PASSWORD).

    • Если вы укажете RETAIN CURRENT PASSWORD для учетной записи с пустым основным паролем, запрос завершится неудачно.

    • Если у учетной записи есть дополнительный пароль, и вы меняете её основной пароль, не указывая RETAIN CURRENT PASSWORD, дополнительный пароль останется без изменений.

    • Если вы меняете плагин аутентификации, назначенный для учетной записи, дополнительный пароль удаляется. Если вы меняете плагин аутентификации и также укажете RETAIN CURRENT PASSWORD, запрос завершится неудачно.

    • DISCARD OLD PASSWORD удаляет дополнительный пароль, если он существует. Учетная запись сохраняет только основной пароль, и клиенты могут использовать учетную запись для подключения к серверу только с основным паролем.

    Дополнительную информацию об использовании двойных паролей см. в разделе 8.2.15 «Управление паролями».

ALTER USER допускает эти синтаксические конструкции auth_option:

  • IDENTIFIED BY 'auth_string' [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD]

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

    Оператор REPLACE, если задан, указывает текущий пароль учетной записи, как описано ранее в этом разделе.

    Оператор RETAIN CURRENT PASSWORD, если задан, заставляет текущий пароль учетной записи сохраниться как вторичный пароль, как описано ранее в этом разделе.

  • IDENTIFIED BY RANDOM PASSWORD [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD]

    Устанавливает плагин аутентификации учетной записи на плагин по умолчанию, генерирует случайный пароль, передает значение нешифрованного пароля плагину для возможного хеширования и сохраняет результат в строке учетной записи в таблице системы mysql.user. Выражение также возвращает нешифрованный пароль в наборе результатов, чтобы сделать его доступным для пользователя или приложения, выполняющего выражение. Подробности о наборе результатов и характеристиках случайно сгенерированных паролей см. в разделе Генерация случайных паролей.

    Оператор REPLACE, если задан, указывает текущий пароль учетной записи, как описано ранее в этом разделе.

    Оператор RETAIN CURRENT PASSWORD, если задан, заставляет текущий пароль учетной записи сохраниться как вторичный пароль, как описано ранее в этом разделе.

  • IDENTIFIED WITH auth_plugin

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

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

  • IDENTIFIED WITH auth_plugin BY 'auth_string' [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD]

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

    Оператор REPLACE, если задан, указывает текущий пароль учетной записи, как описано ранее в этом разделе.

    Оператор RETAIN CURRENT PASSWORD, если задан, заставляет текущий пароль учетной записи сохраниться как вторичный пароль, как описано ранее в этом разделе.

  • IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD [REPLACE 'current_auth_string'] [RETAIN CURRENT PASSWORD]

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

    Оператор REPLACE, если задан, указывает текущий пароль учетной записи, как описано ранее в этом разделе.

    Оператор RETAIN CURRENT PASSWORD, если задан, заставляет текущий пароль учетной записи сохраниться как вторичный пароль, как описано ранее в этом разделе.

  • IDENTIFIED WITH auth_plugin AS 'auth_string'

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

  • DISCARD OLD PASSWORD

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

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

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
             BY 'password'
             REPLACE 'current_password';

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

Пример: Установите новый первичный пароль и сохраните существующий пароль как вторичный пароль:

ALTER USER 'jeffrey'@'localhost'
  IDENTIFIED BY 'new_password'
  RETAIN CURRENT PASSWORD;

Пример: Удалите вторичный пароль, оставив в учетной записи только первичный пароль:

ALTER USER 'jeffery'@'localhost' DISCARD OLD PASSWORD;

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

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

Дополнительную информацию о настройке паролей и плагинах аутентификации см. в разделе 8.2.14 Назначение паролей учетной записи и 8.2.17 Подключаемая аутентификация.

Параметры многофакторной аутентификации ALTER USER

ALTER USER имеет операторы ADD, MODIFY и DROP, которые позволяют добавлять, изменять или удалять факторы аутентификации. В каждом случае оператор указывает операцию, выполняемую с одним фактором аутентификации, и необязательно операцию с другим фактором аутентификации. Для каждой операции элемент factor указывает ключевое слово FACTOR, предваряемое числом 2 или 3, чтобы указать, относится ли операция ко второму или третьему фактору аутентификации. (1 в этом контексте не допускается. Чтобы действовать с первым фактором аутентификации, используйте синтаксис, описанный в Параметры аутентификации ALTER USER.)

Ограничения оператора ALTER USER многофакторной аутентификации определяются системной переменной authentication_policy. Например, значение authentication_policy управляет количеством факторов аутентификации, которые могут иметь учетные записи, и для каждого фактора, какие методы аутентификации разрешены. См. Настройка политики многофакторной аутентификации.

Когда ALTER USER добавляет, изменяет или удаляет второй и третий факторы в одном операторе, операции выполняются последовательно, но если какая-либо операция в последовательности завершается ошибкой, весь оператор ALTER USER завершается ошибкой.

Для ADD каждый указанный фактор не должен уже существовать, иначе его нельзя добавить. Для MODIFY и DROP каждый указанный фактор должен существовать, чтобы его можно было изменить или удалить. Если определены второй и третий факторы, удаление второго фактора приводит к тому, что третий фактор занимает его место в качестве второго фактора.

Это выражение удаляет факторы аутентификации 2 и 3, что приводит к преобразованию учетной записи из 3FA в 1FA:

ALTER USER 'user' DROP 2 FACTOR 3 FACTOR;

Для дополнительных ADD, MODIFY и DROP примеров см. Начало работы с многофакторной аутентификацией.

Сведения о факторно-специфических правилах, определяющих плагин аутентификации по умолчанию для операторов аутентификации, не указывающих плагин, см. в разделе Плагин аутентификации по умолчанию.

Параметры регистрации ALTER USER

ALTER USER содержит операторы, позволяющие регистрировать и аннулировать устройства FIDO/FIDO2. Дополнительную информацию см. в разделах Использование аутентификации WebAuthn, Удаление регистрации устройства для WebAuthn и описании опции --register-factor клиента mysql.

Опция --register-factor клиента mysql, используемая для регистрации устройств FIDO/FIDO2, заставляет клиента mysql сгенерировать и выполнить операторы INITIATE REGISTRATION и FINISH REGISTRATION. Эти операторы не предназначены для ручного выполнения.

Параметры ALTER USER для роли

ALTER USER ... DEFAULT ROLE определяет, какие роли станут активными при подключении пользователя к серверу и аутентификации, или при выполнении пользователем инструкции SET ROLE DEFAULT в сессии.

ALTER USER ... DEFAULT ROLE является альтернативной синтаксической конструкцией для SET DEFAULT ROLE (см. Раздел 15.7.1.9, «Инструкция SET DEFAULT ROLE»). Однако, ALTER USER может установить значение по умолчанию только для одного пользователя, в то время как SET DEFAULT ROLE может установить значение по умолчанию для нескольких пользователей. С другой стороны, вы можете указать CURRENT_USER в качестве имени пользователя для инструкции ALTER USER, но не для SET DEFAULT ROLE.

Каждое имя учетной записи пользователя использует описанный ранее формат.

Каждое имя роли использует формат, описанный в Разделе 8.2.5, «Указание имён ролей». Например:

ALTER USER 'joe'@'10.0.0.1' DEFAULT ROLE administrator, developer;

Часть имени роли, относящаяся к имени хоста, если она опущена, по умолчанию равна '%'.

Клауза, следующая за ключевыми словами DEFAULT ROLE, допускает следующие значения:

  • NONE: Установить значение по умолчанию на NONE (без ролей).

  • ALL: Установить значение по умолчанию на все роли, предоставленные учетной записи.

  • role [, role ] ...: Установить значение по умолчанию на указанные роли, которые должны существовать и быть предоставлены учетной записи на момент выполнения инструкции ALTER USER ... DEFAULT ROLE.

Параметры ALTER USER для SSL/TLS

MySQL может проверять атрибуты сертификатов X.509 помимо обычной аутентификации на основе имени пользователя и учетных данных. Дополнительную информацию об использовании SSL/TLS с MySQL см. в Разделе 8.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

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

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

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

  • ... (остальные пункты переведены аналогично) ...

... (остальные элементы HTML переведены аналогично) ...

Параметры лимитов ресурсов пользователя ALTER USER

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

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

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

  • MAX_QUERIES_PER_HOUR count, MAX_UPDATES_PER_HOUR count, MAX_CONNECTIONS_PER_HOUR count

    Для всех учетных записей, указанных в предложении, эти параметры ограничивают количество запросов, обновлений и подключений к серверу, разрешенных для каждой учетной записи в течение любого одного часа. Если 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 для управления паролями:

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

  • Параметры повторного использования пароля: вы можете ограничить повторное использование пароля на основе числа изменений пароля, прошедшего времени или того и другого.

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

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

В этом разделе описывается синтаксис параметров управления паролями. Для получения информации о создании политики управления паролями см. Раздел 8.2.15, «Управление паролями».

Если указано несколько параметров управления паролями одного типа, последний имеет приоритет. Например, PASSWORD EXPIRE DEFAULT PASSWORD EXPIRE NEVER то же самое, что и PASSWORD EXPIRE NEVER.

Примечание

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

Пароль клиента устарел, если срок действия пароля учетной записи истек вручную или возраст пароля считается больше, чем допустимый срок службы в соответствии с политикой автоматического истечения срока действия. В этом случае сервер либо отключает клиента, либо ограничивает разрешенные ему операции (см. Раздел 8.2.16, «Обработка сервером истекших паролей»). Операции, выполняемые ограниченным клиентом, приводят к ошибке, пока пользователь не установит новый пароль учетной записи.

Примечание

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

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 допускает следующие значения password_option для управления повторным использованием предыдущих паролей на основе необходимого минимального числа изменений пароля:

  • PASSWORD HISTORY DEFAULT

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

    ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY DEFAULT;
    
  • PASSWORD HISTORY N

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

    ALTER USER 'jeffrey'@'localhost' PASSWORD HISTORY 6;
    

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

  • PASSWORD REUSE INTERVAL DEFAULT

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

    ALTER USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL DEFAULT;
    
  • PASSWORD REUSE INTERVAL N DAY

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

    ALTER USER 'jeffrey'@'localhost' PASSWORD REUSE INTERVAL 360 DAY;
    

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

  • PASSWORD REQUIRE CURRENT

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

    ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT;
    
  • PASSWORD REQUIRE CURRENT OPTIONAL

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

    ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT OPTIONAL;
    
  • PASSWORD REQUIRE CURRENT DEFAULT

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

    ALTER USER 'jeffrey'@'localhost' PASSWORD REQUIRE CURRENT DEFAULT;
    

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

  • FAILED_LOGIN_ATTEMPTS N

    Следует ли отслеживать попытки входа в учетную запись, указывающие неправильный пароль. N должно быть числом от 0 до 32767. Значение 0 отключает отслеживание неудачных попыток входа. Значения, большие 0, указывают, сколько неудачных попыток ввода пароля подряд приводят к временной блокировке учетной записи (если PASSWORD_LOCK_TIME также не равно нулю).

  • PASSWORD_LOCK_TIME {N | UNBOUNDED}

    Как долго блокировать учетную запись после того, как слишком много попыток входа подряд указали неправильный пароль. N должно быть числом от 0 до 32767 или UNBOUNDED. Значение 0 отключает временную блокировку учетной записи. Значения, большие 0, указывают, как долго блокировать учетную запись в днях. Значение UNBOUNDED приводит к неограниченной продолжительности блокировки учетной записи; после блокировки учетная запись остается заблокированной до разблокировки. Для получения информации об условиях, при которых происходит разблокировка, см. Отслеживание неудачных попыток входа и временная блокировка учетной записи.

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

ALTER USER 'jeffrey'@'localhost'
  FAILED_LOGIN_ATTEMPTS 4 PASSWORD_LOCK_TIME 2;
Варианты комментариев и атрибутов пользователя ALTER USER

MySQL 8.4 поддерживает комментарии и атрибуты пользователей, как описано в разделе 15.7.1.3 «Заявление CREATE USER». Их можно изменить, используя ALTER USER с помощью опций COMMENT и ATTRIBUTE соответственно. Вы не можете указать обе опции в одном и том же заявлении ALTER USER; попытка сделать это приводит к синтаксической ошибке.

Комментарий и атрибут пользователя хранятся в таблице схемы информации USER_ATTRIBUTES в виде JSON-объекта; комментарий пользователя хранится как значение для ключа comment в столбце ATTRIBUTE этой таблицы, как показано далее в этом обсуждении. Текст COMMENT может быть любым произвольным цитируемым текстом и заменяет любой существующий комментарий пользователя. Значение ATTRIBUTE должно быть корректным строковым представлением JSON-объекта. Это объединяется с любым существующим атрибутом пользователя, как если бы функция JSON_MERGE_PATCH() использовалась для существующего атрибута пользователя и нового; для любых повторно используемых ключей новое значение перезаписывает старое, как показано здесь:

mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    ->     WHERE USER='bill' AND HOST='localhost';
+------+-----------+----------------+
| USER | HOST      | ATTRIBUTE      |
+------+-----------+----------------+
| bill | localhost | {"foo": "bar"} |
+------+-----------+----------------+
1 row in set (0.11 sec)

mysql> ALTER USER 'bill'@'localhost' ATTRIBUTE '{"baz": "faz", "foo": "moo"}';
Query OK, 0 rows affected (0.22 sec)

mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    ->     WHERE USER='bill' AND HOST='localhost';
+------+-----------+------------------------------+
| USER | HOST      | ATTRIBUTE                    |
+------+-----------+------------------------------+
| bill | localhost | {"baz": "faz", "foo": "moo"} |
+------+-----------+------------------------------+
1 row in set (0.00 sec)

Чтобы удалить ключ и его значение из атрибута пользователя, установите ключ в JSON null (должен быть в нижнем регистре и без кавычек), как показано ниже:

mysql> ALTER USER 'bill'@'localhost' ATTRIBUTE '{"foo": null}';
Query OK, 0 rows affected (0.08 sec)

mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    ->     WHERE USER='bill' AND HOST='localhost';
+------+-----------+----------------+
| USER | HOST      | ATTRIBUTE      |
+------+-----------+----------------+
| bill | localhost | {"baz": "faz"} |
+------+-----------+----------------+
1 row in set (0.00 sec)

Чтобы установить существующий комментарий пользователя на пустую строку, используйте ALTER USER ... COMMENT ''. Это оставляет пустое comment значение в таблице USER_ATTRIBUTES; чтобы полностью удалить комментарий пользователя, используйте ALTER USER ... ATTRIBUTE ... со значением для ключа столбца, установленным в JSON null (без кавычек, строчные буквы). Это проиллюстрировано следующей последовательностью SQL-заявлений:

mysql> ALTER USER 'bill'@'localhost' COMMENT 'Something about Bill';
Query OK, 0 rows affected (0.06 sec)

mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    ->     WHERE USER='bill' AND HOST='localhost';
+------+-----------+---------------------------------------------------+
| USER | HOST      | ATTRIBUTE                                         |
+------+-----------+---------------------------------------------------+
| bill | localhost | {"baz": "faz", "comment": "Something about Bill"} |
+------+-----------+---------------------------------------------------+
1 row in set (0.00 sec)

mysql> ALTER USER 'bill'@'localhost' COMMENT '';
Query OK, 0 rows affected (0.09 sec)

mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    ->     WHERE USER='bill' AND HOST='localhost';
+------+-----------+-------------------------------+
| USER | HOST      | ATTRIBUTE                     |
+------+-----------+-------------------------------+
| bill | localhost | {"baz": "faz", "comment": ""} |
+------+-----------+-------------------------------+
1 row in set (0.00 sec)

mysql> ALTER USER 'bill'@'localhost' ATTRIBUTE '{"comment": null}';
Query OK, 0 rows affected (0.07 sec)

mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    ->     WHERE USER='bill' AND HOST='localhost';
+------+-----------+----------------+
| USER | HOST      | ATTRIBUTE      |
+------+-----------+----------------+
| bill | localhost | {"baz": "faz"} |
+------+-----------+----------------+
1 row in set (0.00 sec)
Параметры блокировки учетных записей ALTER USER

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

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

ALTER USER ... ACCOUNT UNLOCK разблокирует любую учетную запись, указанную в заявлении, которая временно заблокирована из-за слишком большого количества неудачных попыток входа. См. раздел 8.2.15 «Управление паролями».

Логирование двоичных данных ALTER USER

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

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

  • Плагин, указанный в исходном заявлении, если он был указан.

  • В противном случае плагин, связанный с учетной записью пользователя, если пользователь существует, или плагин по умолчанию, если пользователь не существует. (Если в заявлении, записанном в двоичный журнал, необходимо указать конкретный плагин аутентификации для пользователя, укажите его в исходном заявлении.)

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

Если исходное заявление указывает опцию FAILED_LOGIN_ATTEMPTS или PASSWORD_LOCK_TIME, в записанном в двоичный журнал заявлении эта опция также будет указана.

ALTER USER с пунктами, поддерживающими многофакторную аутентификацию (MFA), записываются в двоичный журнал за исключением ALTER USER user factor INITIATE REGISTRATION.

  • Заявления ALTER USER user factor FINISH REGISTRATION SET CHALLENGE_RESPONSE AS 'auth_string' записываются в двоичный журнал как ALTER USER user MODIFY factor IDENTIFIED WITH authentication_webauthn AS webauthn_hash_string;

  • В контексте репликации пользователю репликации требуется привилегия PASSWORDLESS_USER_ADMIN для выполнения операций ALTER USER ... MODIFY с учетными записями, настроенными для аутентификации без пароля, используя плагин authentication_webauthn.

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

Spec-Zone.ru

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