Spec-Zone.ru › MySQL 8.4

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

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

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

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

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

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

  • CREATE USER Бинарный журнал

Обзор оператора CREATE USER

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

  • Аутентификация: Подключаемый модуль аутентификации по умолчанию (определяется, как описано в Подключаемый модуль аутентификации по умолчанию) и пустые учетные данные

  • Роль по умолчанию: 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 8.4 обрабатывает предоставление разрешений такому пользователю так, как будто они были предоставлены пользователю '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 mysql_native_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 8.4 поддерживает многофакторную аутентификацию (MFA), благодаря чему учетные записи могут иметь до трех методов аутентификации. То есть, учетные записи могут использовать двухфакторную аутентификацию (2FA) или трехфакторную аутентификацию (3FA). Синтаксис и семантика auth_option остаются неизменными, но auth_option могут быть дополнены спецификациями для дополнительных методов аутентификации. В этом разделе описывается auth_option. Подробные сведения об опциональных дополнительных пунктах, связанных с MFA, см. в разделе CREATE USER Multifactor Authentication Options.

Примечание

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

Spec-Zone.ru

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