Spec-Zone.ru › MySQL 9.2

15.7.1.3 Оператор CREATE USER

CREATE USER [IF NOT EXISTS]
    user [auth_option] [, user [auth_option]] ...
    DEFAULT ROLE role [, role ] ...
    [REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
    [WITH resource_option [resource_option] ...]
    [password_option | lock_option] ...
    [COMMENT 'comment_string' | ATTRIBUTE 'json_object']

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

auth_option: {
    IDENTIFIED BY 'auth_string' [AND 2fa_auth_option]
  | IDENTIFIED BY RANDOM PASSWORD [AND 2fa_auth_option]
  | IDENTIFIED WITH auth_plugin [AND 2fa_auth_option]
  | IDENTIFIED WITH auth_plugin BY 'auth_string' [AND 2fa_auth_option]
  | IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD [AND 2fa_auth_option]
  | IDENTIFIED WITH auth_plugin AS 'auth_string' [AND 2fa_auth_option]
  | IDENTIFIED WITH auth_plugin [initial_auth_option]
}

2fa_auth_option: {
    IDENTIFIED BY 'auth_string' [AND 3fa_auth_option]
  | IDENTIFIED BY RANDOM PASSWORD [AND 3fa_auth_option]
  | IDENTIFIED WITH auth_plugin [AND 3fa_auth_option]
  | IDENTIFIED WITH auth_plugin BY 'auth_string' [AND 3fa_auth_option]
  | IDENTIFIED WITH auth_plugin BY RANDOM PASSWORD [AND 3fa_auth_option]
  | IDENTIFIED WITH auth_plugin AS 'auth_string' [AND 3fa_auth_option]
}

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

initial_auth_option: {
    INITIAL AUTHENTICATION IDENTIFIED BY {RANDOM PASSWORD | 'auth_string'}
  | INITIAL AUTHENTICATION 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 [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
}

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

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

Эти дополнительные соображения по правам также применяются:

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

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

Оператор CREATE USER завершается с ошибкой, если имя любой создаваемой учетной записи указано как атрибут DEFINER для любого сохраненного объекта. (То есть, оператор завершается ошибкой, если создание учетной записи приведет к тому, что учетная запись примет в настоящее время отстраненный сохраненный объект). Чтобы выполнить операцию, необходимо иметь SET_ANY_DEFINER или ALLOW_NONEXISTENT_DEFINER право; в этом случае оператор выполняется с предупреждением, а не с ошибкой. Для выполнения операции создания пользователя без этих прав удалите отстраненные объекты, создайте учетную запись, предоставьте ей права, а затем повторно создайте удаленные объекты. Дополнительную информацию, в том числе о том, как определить, какие объекты называют данную учетную запись атрибутом DEFINER, см. в разделе Orphan Stored Objects.

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

Важно

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

Оператору CREATE USER посвящены следующие разделы:

  • CREATE USER Общие сведения

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

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

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

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

  • CREATE USER Параметры ограничений ресурсов

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

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

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

  • CREATE USER Двоиковая регистрация

Общие сведения об операторе CREATE USER

Для каждой учетной записи CREATE USER создает новую строку в таблице системы mysql.user. Строка учетной записи отражает свойства, указанные в операторе. Неуказанные свойства устанавливаются по умолчанию:

  • Аутентификация: плагин аутентификации по умолчанию (определяется, как описано в The Default Authentication Plugin), и пустые учетные данные

  • Роль по умолчанию: NONE

  • SSL/TLS: NONE

  • Ограничения ресурсов: Неограниченные

  • Управление паролями: PASSWORD EXPIRE DEFAULT PASSWORD HISTORY DEFAULT PASSWORD REUSE INTERVAL DEFAULT PASSWORD REQUIRE CURRENT DEFAULT; отслеживание неудачных попыток входа и временная блокировка учетной записи отключены

  • Блокировка учетной записи: ACCOUNT UNLOCK

Учетная запись при первом создании не имеет прав и роль по умолчанию NONE. Для назначения прав или ролей этой учетной записи используйте один или несколько операторов GRANT.

Каждое имя учетной записи использует формат, описанный в Раздел 8.2.4, “Указание имен учетных записей”. Например:

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

Часть имени учетной записи — имя хоста, если она опущена, по умолчанию задается '%'. Следует помнить, что, хотя MySQL 9.2 рассматривает предоставленные таким пользователям разрешения так, как будто они были предоставлены 'user'@'localhost', это поведение устарело и, следовательно, может быть удалено в будущей версии MySQL.

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

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

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

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

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

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

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

CREATE USER
  'jeffrey'@'localhost' IDENTIFIED WITH caching_sha2_password
                                BY 'new_password1',
  'jeanne'@'localhost' IDENTIFIED WITH caching_sha2_password
                                BY 'new_password2'
  REQUIRE X509 WITH MAX_QUERIES_PER_HOUR 60
  PASSWORD HISTORY 5
  ACCOUNT LOCK;

Каждое значение auth_option (IDENTIFIED WITH ... BY в этом случае) применяется только к учетной записи, имя которой указано непосредственно перед ним, поэтому каждая учетная запись использует следующий плагин аутентификации и пароль.

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

  • Подключения должны выполняться с помощью действительного сертификата X.509.

  • Разрешено до 60 запросов в час.

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

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

END_OF_DOCUMENT_MARKER
Параметры аутентификации пользователя CREATE USER

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

Примечание

MySQL 9.2 поддерживает многофакторную аутентификацию (MFA), позволяя учетным записям иметь до трех методов аутентификации. То есть учетные записи могут использовать двухфакторную аутентификацию (2FA) или трехфакторную аутентификацию (3FA). Синтаксис и семантика auth_option остаются неизменными, но auth_option может быть дополнено указаниями для дополнительных методов аутентификации. В этом разделе описано auth_option. Подробную информацию об необязательных разделах, связанных с MFA, см. в разделе CREATE USER Multifactor Authentication Options.

Примечание

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

      Важно

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

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

CREATE USER разрешает следующие auth_option синтаксисы:

  • IDENTIFIED BY 'auth_string'

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

  • IDENTIFIED BY RANDOM PASSWORD

    Устанавливает плагин аутентификации учетной записи на плагин по умолчанию, генерирует случайный пароль, передает значение пароля в открытом виде плагину для возможного хеширования и сохраняет результат в строке учетной записи в таблице системы 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 BY RANDOM PASSWORD

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

  • IDENTIFIED WITH auth_plugin AS 'auth_string'

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

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

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

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

CREATE USER 'jeffrey'@'localhost'
  IDENTIFIED WITH caching_sha2_password BY 'password';

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

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

Параметры многофакторной аутентификации для CREATE USER

Часть auth_option в CREATE USER определяет метод аутентификации для однофакторной/однократной аутентификации (1FA/SFA). CREATE USER также поддерживает многофакторную аутентификацию (MFA), при которой учетные записи могут иметь до трех методов аутентификации. То есть, учетные записи могут использовать двухфакторную аутентификацию (2FA) или трехфакторную аутентификацию (3FA).

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

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

После auth_option могут появиться различные дополнительные клаузы MFA:

  • 2fa_auth_option: Определяет метод аутентификации второго фактора. В следующем примере caching_sha2_password определен как метод аутентификации первого фактора, а authentication_ldap_sasl — как метод аутентификации второго фактора.

    CREATE USER 'u1'@'localhost'
      IDENTIFIED WITH caching_sha2_password
        BY 'sha2_password'
      AND IDENTIFIED WITH authentication_ldap_sasl
        AS 'uid=u1_ldap,ou=People,dc=example,dc=com';
    
  • 3fa_auth_option: После 2fa_auth_option может появиться клауза 3fa_auth_option для указания метода аутентификации третьего фактора. В следующем примере caching_sha2_password определен как метод аутентификации первого фактора, authentication_ldap_sasl — как метод аутентификации второго фактора, а authentication_webauthn — как метод аутентификации третьего фактора.

    CREATE USER 'u1'@'localhost'
      IDENTIFIED WITH caching_sha2_password
        BY 'sha2_password'
      AND IDENTIFIED WITH authentication_ldap_sasl
        AS 'uid=u1_ldap,ou=People,dc=example,dc=com'
      AND IDENTIFIED WITH authentication_webauthn;
    
  • initial_auth_option: Указывает начальный метод аутентификации для настройки аутентификации без пароля FIDO/FIDO2. Как показано ниже, для включения аутентификации без пароля WebAuthn требуется временная аутентификация с помощью сгенерированного случайного пароля или указанного пользователем auth-string.

    CREATE USER user
      IDENTIFIED WITH authentication_webauthn
      INITIAL AUTHENTICATION IDENTIFIED BY {RANDOM PASSWORD | 'auth_string'};
    

    Сведения о настройке аутентификации без пароля с помощью подключаемого модуля аутентификации WebAuthn см. в Аутентификация без пароля WebAuthn.

Параметры роли CREATE USER

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

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

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

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

Клауза DEFAULT ROLE позволяет указать список из одной или нескольких ролей, разделенных запятыми. Эти роли должны существовать на момент выполнения CREATE USER; в противном случае оператор вызовет ошибку (), и пользователь не будет создан.

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

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

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

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

CREATE USER допускает следующие значения tls_option:

  • NONE

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

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

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

    NONE — это значение по умолчанию, если не указаны параметры, относящиеся к SSL.

  • SSL

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

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

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

  • X509

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

    CREATE 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 в этом случае не нужен.

    CREATE 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 в этом случае не нужен.

    CREATE 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'

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

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

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

CREATE 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';
Параметры лимитов ресурсов пользователя CREATE USER

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

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

CREATE 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 также равно нулю, для учетной записи нет ограничений.

Пример:

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

CREATE USER поддерживает несколько значений password_option для управления паролями:

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

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

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

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

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

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

Примечание

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

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

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

  • PASSWORD EXPIRE

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

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

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

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

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

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

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

    CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
    

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

  • PASSWORD HISTORY DEFAULT

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

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

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

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

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

  • PASSWORD REUSE INTERVAL DEFAULT

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

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

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

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

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

  • PASSWORD REQUIRE CURRENT

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

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

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

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

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

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

CREATE 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 учетной записи должны быть отличны от нуля. Следующая инструкция создает учетную запись, которая остается заблокированной в течение двух дней после четырех последовательных неудачных попыток ввода пароля:

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

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

  • Комментарий пользователя

    Для установки комментария пользователя добавьте COMMENT 'user_comment' к оператору CREATE USER, где user_comment - текст комментария пользователя.

    Пример (без других параметров):

    CREATE USER 'jon'@'localhost' COMMENT 'Some information about Jon';
    
  • Атрибут пользователя

    Атрибут пользователя представляет собой JSON-объект, состоящий из одной или нескольких пар ключ-значение, и устанавливается путём включения ATTRIBUTE 'json_object' в состав CREATE USER. json_object должен быть корректным JSON-объектом.

    Пример (без других параметров):

    CREATE USER 'jim'@'localhost'
        ATTRIBUTE '{"fname": "James", "lname": "Scott", "phone": "123-456-7890"}';
    

Комментарии и атрибуты пользователей хранятся вместе в столбце ATTRIBUTE таблицы Схемы информации USER_ATTRIBUTES. Этот запрос отображает строку в этой таблице, вставленную оператором, только что показанным для создания пользователя jim@localhost:

mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    ->    WHERE USER = 'jim' AND HOST = 'localhost'\G
*************************** 1. row ***************************
     USER: jim
     HOST: localhost
ATTRIBUTE: {"fname": "James", "lname": "Scott", "phone": "123-456-7890"}
1 row in set (0.00 sec)

Вариант COMMENT фактически предоставляет сокращение для установки атрибута пользователя, единственный элемент которого имеет comment в качестве ключа, а значением является аргумент, предоставленный для данного варианта. Вы можете убедиться в этом, выполнив оператор CREATE USER 'jon'@'localhost' COMMENT 'Some information about Jon' и просмотрев строку, которую он вставляет в таблицу USER_ATTRIBUTES:

mysql> CREATE USER 'jon'@'localhost' COMMENT 'Some information about Jon';
Query OK, 0 rows affected (0.06 sec)

mysql> SELECT * FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    ->    WHERE USER = 'jon' AND HOST = 'localhost';
+------+-----------+-------------------------------------------+
| USER | HOST      | ATTRIBUTE                                 |
+------+-----------+-------------------------------------------+
| jon  | localhost | {"comment": "Some information about Jon"} |
+------+-----------+-------------------------------------------+
1 row in set (0.00 sec)

Нельзя использовать COMMENT и ATTRIBUTE вместе в одном и том же операторе CREATE USER; попытка сделать это приводит к синтаксической ошибке. Чтобы установить комментарий пользователя одновременно с установкой атрибута пользователя, используйте ATTRIBUTE и включите в его аргумент значение с ключом comment, например так:

mysql> CREATE USER 'bill'@'localhost'
    ->        ATTRIBUTE '{"fname":"William", "lname":"Schmidt",
    ->        "comment":"Website developer"}';
Query OK, 0 rows affected (0.16 sec)

Поскольку содержимое строки ATTRIBUTE представляет собой JSON-объект, вы можете использовать любые подходящие функции или операторы MySQL JSON для его обработки, как показано здесь:

mysql> SELECT
    ->   USER AS User,
    ->   HOST AS Host,
    ->   CONCAT(ATTRIBUTE->>"$.fname"," ",ATTRIBUTE->>"$.lname") AS 'Full Name',
    ->   ATTRIBUTE->>"$.comment" AS Comment
    -> FROM INFORMATION_SCHEMA.USER_ATTRIBUTES
    -> WHERE USER='bill' AND HOST='localhost';
+------+-----------+-----------------+-------------------+
| User | Host      | Full Name       | Comment           |
+------+-----------+-----------------+-------------------+
| bill | localhost | William Schmidt | Website developer |
+------+-----------+-----------------+-------------------+
1 row in set (0.00 sec)

Для установки или изменения комментария пользователя или атрибута для существующего пользователя можно использовать вариант COMMENT или ATTRIBUTE с оператором ALTER USER.

Поскольку комментарий пользователя и атрибут пользователя хранятся вместе во внутренней единственной колонке типа JSON, это устанавливает верхний предел их максимального объединённого размера. Более подробную информацию см. в разделе Требования к хранению JSON.

См. также описание таблицы Схемы информации USER_ATTRIBUTES для получения дополнительной информации и примеров.

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

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

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

Двоичный протокол регистрации CREATE USER

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

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

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

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

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

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

Операторы CREATE USER с пунктами, поддерживающими многофакторную аутентификацию (МФА), записываются в двоичный журнал.

  • Операторы CREATE USER ... IDENTIFIED WITH .. INITIAL AUTHENTICATION IDENTIFIED WITH ... записываются в двоичный журнал как CREATE USER .. IDENTIFIED WITH .. INITIAL AUTHENTICATION IDENTIFIED WITH .. AS 'password-hash', где password-hash - указанный пользователем auth-string или случайный пароль, сгенерированный сервером при указании пункта RANDOM PASSWORD.

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

Spec-Zone.ru

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