13.7.1.2 Заявление CREATE USER
CREATE USER [IF NOT EXISTS]
user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH resource_option [resource_option] ...]
[password_option | lock_option] ...
user:
(see Section 6.2.4, “Specifying Account Names”)
auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| IDENTIFIED BY PASSWORD 'auth_string'
}
tls_option: {
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
}
resource_option: {
MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
}
password_option: {
PASSWORD EXPIRE
| PASSWORD EXPIRE DEFAULT
| PASSWORD EXPIRE NEVER
| PASSWORD EXPIRE INTERVAL N DAY
}
lock_option: {
ACCOUNT LOCK
| ACCOUNT UNLOCK
}
Заявление CREATE USER создает новые учетные записи MySQL. Оно позволяет устанавливать параметры аутентификации, SSL/TLS, лимитов ресурсов и управления паролями для новых учетных записей и управляет тем, заблокированы ли учетные записи по умолчанию.
Для использования CREATE USER, необходимо иметь глобальный CREATE USER привилегию или INSERT привилегию для базы данных системы mysql. Когда системная переменная read_only включена, CREATE USER дополнительно требует SUPER привилегию.
Возникает ошибка, если вы пытаетесь создать учетную запись, которая уже существует. Если используется клауза IF NOT EXISTS, то для каждой именованной учетной записи, которая уже существует, генерируется предупреждение вместо ошибки.
В некоторых обстоятельствах, CREATE
USER может быть записано в журналы сервера или на стороне клиента в файле истории, таком как ~/.mysql_history, что означает, что открытый текст паролей может быть прочитан любым пользователем, имеющим доступ к этой информации. Для получения информации о ситуациях, при которых это происходит в журналах сервера, и о том, как это контролировать, см. Раздел 6.1.2.3, «Пароли и регистрация». Для получения аналогичной информации о регистрации на стороне клиента см. Раздел 4.5.1.3, «Регистрация клиента mysql».
Существует несколько аспектов заявления CREATE
USER, описанных в следующих темах:
Обзор CREATE USER
Для каждой учетной записи CREATE USER создает новую строку в таблице системы mysql.user. Строка учетной записи отражает свойства, указанные в заявлении. Неуказанные свойства устанавливаются по умолчанию:
Аутентификация: плагин аутентификации, определенный системной переменной
default_authentication_plugin, и пустые учетные данныеSSL/TLS:
NONEЛимиты ресурсов: Неограниченно
Управление паролями:
PASSWORD EXPIRE DEFAULTБлокировка учетной записи:
ACCOUNT UNLOCK
Учетная запись при первом создании не имеет привилегий. Для назначения привилегий этой учетной записи используйте одно или несколько заявлений GRANT.
Каждое имя учетной записи использует формат, описанный в Разделе 6.2.4, «Указание имен учетных записей». Например:
CREATE USER 'jeffrey'@'localhost' IDENTIFIED BY 'password';
Часть имени учетной записи, относящаяся к хосту, если она опущена, по умолчанию равна '%'.
Каждое значение user, указывающее имя учетной записи, может быть дополнено необязательным значением auth_option, которое указывает способ аутентификации учетной записи. Эти значения позволяют указать плагины аутентификации учетных записей и учетные данные (например, пароль). Каждое значение auth_option применяется только к учетной записи, имя которой указано непосредственно перед ним.
После указания user, в заявлении могут быть включены параметры для свойств SSL/TLS, лимитов ресурсов, управления паролями и блокировки. Все такие параметры являются глобальными для данного заявления и применяются к всем учетным записям, указанным в заявлении.
Пример: Создание учетной записи, использующей плагин аутентификации по умолчанию и заданный пароль. Отметить пароль как просроченный, чтобы пользователь должен был выбрать новый при первом подключении к серверу:
CREATE USER 'jeffrey'@'localhost'
IDENTIFIED BY 'new_password' PASSWORD EXPIRE;
Пример: Создание учетной записи, использующей плагин аутентификации sha256_password и заданный пароль. Требовать, чтобы новый пароль выбирался каждые 180 дней:
CREATE USER 'jeffrey'@'localhost'
IDENTIFIED WITH sha256_password BY 'new_password'
PASSWORD EXPIRE INTERVAL 180 DAY;
Пример: Создание нескольких учетных записей, задавая некоторые свойства для каждой учетной записи и некоторые глобальные свойства:
CREATE USER
'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password
BY 'new_password1',
'jeanne'@'localhost' IDENTIFIED WITH sha256_password
BY 'new_password2'
REQUIRE X509 WITH MAX_QUERIES_PER_HOUR 60
ACCOUNT LOCK;
Каждое значение auth_option (IDENTIFIED WITH ... BY в данном случае) применяется только к учетной записи, имя которой указано непосредственно перед ним, поэтому каждая учетная запись использует плагин аутентификации и пароль, указанные сразу после неё.
Остальные свойства применяются глобально ко всем учетным записям, указанным в заявлении, поэтому для обеих учетных записей:
Подключения должны осуществляться с использованием действительного сертификата X.509.
Допускается до 60 запросов в час.
Учетная запись заблокирована изначально, поэтому фактически она является заглушкой и не может быть использована до тех пор, пока администратор её не разблокирует.
Параметры аутентификации пользователя CREATE USER
Имя учетной записи может быть дополнено опцией аутентификации auth_option, которая указывает плагин аутентификации учетной записи, учетные данные или оба параметра:
-
auth_pluginзадаёт имя плагина аутентификации. Имя плагина может быть строковой литералом в кавычках или именованием без кавычек. Имена плагинов хранятся в столбцеpluginтаблицы системыmysql.user.Для синтаксиса
auth_option, который не указывает плагин аутентификации, используемый по умолчанию плагин обозначается значением системной переменнойdefault_authentication_plugin. Описание каждого плагина см. в разделе 6.4.1, «Плагины аутентификации». -
Учетные данные хранятся в таблице системы
mysql.user. Значение'указывает учетные данные учетной записи, либо как обычный (незашифрованный) текст, либо в формате хеширования, ожидаемом плагином аутентификации, связанным с учетной записью, соответственно:auth_string'Для синтаксиса с использованием
BY 'строка представляет собой обычный текст и передается плагину аутентификации для возможного хеширования. Результат, возвращаемый плагином, сохраняется в таблицеauth_string'mysql.user. Плагин может использовать значение как указано, в этом случае хеширование не выполняется.Для синтаксиса с использованием
AS 'строка предполагается уже в формате, требуемом плагином аутентификации, и сохраняется как есть в таблицеauth_string'mysql.user. Если плагин требует хешированного значения, значение должно быть уже хешировано в формате, подходящем для плагина, иначе значение не может быть использовано плагином, и корректная аутентификация клиентских подключений невозможна.Если плагин аутентификации не выполняет хеширования строки аутентификации, фрагменты
BY 'иauth_string'AS 'имеют одинаковый эффект: строка аутентификации сохраняется как есть в таблице системыauth_string'mysql.user.
CREATE USER допускает следующие auth_option синтаксисы:
-
IDENTIFIED BY 'auth_string'Устанавливает плагин аутентификации учетной записи на плагин по умолчанию, передает значение обычного текста
'плагину для возможного хеширования и сохраняет результат в строке учетной записи в таблице системыauth_string'mysql.user. -
IDENTIFIED WITHauth_pluginУстанавливает плагин аутентификации учетной записи на
auth_plugin, очищает учетные данные до пустой строки и сохраняет результат в строке учетной записи в таблице системыmysql.user. -
IDENTIFIED WITHauth_pluginBY 'auth_string'Устанавливает плагин аутентификации учетной записи на
auth_plugin, передает значение обычного текста'плагину для возможного хеширования и сохраняет результат в строке учетной записи в таблице системыauth_string'mysql.user. -
IDENTIFIED WITHauth_pluginAS 'auth_string'Устанавливает плагин аутентификации учетной записи на
auth_pluginи сохраняет значение'как есть в строке учетной записиauth_string'mysql.user. Если плагин требует хешированной строки, предполагается, что строка уже хеширована в формате, требуемом плагином. -
IDENTIFIED BY PASSWORD 'auth_string'Устанавливает плагин аутентификации учетной записи на плагин по умолчанию и сохраняет значение
'как есть в строке учетной записиauth_string'mysql.user. Если плагин требует хешированной строки, предполагается, что строка уже хеширована в формате, требуемом плагином.ПримечаниеСинтаксис
IDENTIFIED BY PASSWORDустарел; ожидается его удаление в будущих выпусках MySQL.
Пример: Укажите пароль в виде обычного текста; используется плагин по умолчанию:
CREATE USER 'jeffrey'@'localhost'
IDENTIFIED BY 'password';
Пример: Укажите плагин аутентификации вместе со значением пароля в виде обычного текста:
CREATE USER 'jeffrey'@'localhost'
IDENTIFIED WITH mysql_native_password BY 'password';
В каждом случае значение пароля, сохраненное в строке учетной записи, представляет собой значение обычного текста ' после его хеширования плагином аутентификации, связанным с учетной записью.password'
Дополнительную информацию о настройке паролей и плагинах аутентификации см. в разделе 6.2.10, «Назначение паролей учетной записи» и разделе 6.2.13, «Подключаемая аутентификация».
Параметры SSL/TLS для создания пользователя
MySQL может проверять атрибуты сертификатов X.509 помимо обычной аутентификации, основанной на имени пользователя и учетных данных. Для получения дополнительной информации об использовании SSL/TLS с MySQL см. раздел 6.3, «Использование защищённых соединений».
Для указания параметров SSL/TLS для учётной записи MySQL используйте предложение REQUIRE, которое задаёт одно или несколько значений tls_option.
Порядок параметров REQUIRE не имеет значения, но один и тот же параметр нельзя указать дважды. Ключевое слово AND является необязательным между параметрами REQUIRE.
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, выданного УЦ
'. Если клиент предоставляет действительный сертификат, но с другим издателем, сервер отклоняет соединение. Использование сертификатов X.509 всегда подразумевает шифрование, поэтому параметрissuer'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';
Параметры ограничений ресурсов для создания пользователя
Возможно ограничить использование ресурсов сервера учётной записью, как описано в разделе 6.2.16, «Установка ограничений на ресурсы учётной записи». Для этого используйте предложение WITH, которое задаёт одно или несколько значений resource_option.
Порядок параметров WITH не имеет значения, за исключением того, что если определённое ограничение ресурса задано несколько раз, то последнее значение имеет приоритет.
CREATE USER допускает следующие значения resource_option:
-
MAX_QUERIES_PER_HOUR,countMAX_UPDATES_PER_HOUR,countMAX_CONNECTIONS_PER_HOURcountДля всех учётных записей, указанных в запросе, эти параметры ограничивают количество запросов, обновлений и подключений к серверу, разрешённых каждой учётной записи в течение любого одного часа. (Запросы, результаты которых выдаются из кэша запросов, не учитываются в отношении ограничения
MAX_QUERIES_PER_HOUR.) Еслиcountравно0(значение по умолчанию), это означает, что для учётной записи нет ограничений. -
MAX_USER_CONNECTIONScountДля всех учётных записей, указанных в запросе, ограничивает максимальное количество одновременных подключений к серверу для каждой учётной записи. Неноль
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 для управления сроком действия пароля, чтобы вручную истечь срок действия пароля учетной записи или установить политику истечения срока действия пароля. Параметры политики не истекают срок действия пароля. Вместо этого они определяют, как сервер применяет автоматическое истечение срока действия пароля учетной записи на основе возраста пароля учетной записи. Для данной учетной записи ее возраст пароля оценивается по дате и времени последней смены пароля.
В этом разделе описывается синтаксис параметров управления паролями. Сведения об установлении политики управления паролями см. в разделе 6.2.11 «Управление паролями».
Если указано несколько параметров управления паролями, приоритет имеет последний параметр.
Эти параметры применяются только к учетным записям, использующим плагин аутентификации, который хранит учетные данные внутри MySQL. Для учетных записей, использующих плагин, который выполняет аутентификацию по системе учетных данных, внешней по отношению к MySQL, управление паролями также должно выполняться внешне по отношению к этой системе. Дополнительные сведения об хранении учетных данных внутри см. в разделе 6.2.11 «Управление паролями».
Сеанс клиента работает в ограниченном режиме, если пароль учетной записи истек вручную или если возраст пароля считается больше допустимого срока службы по политике автоматического истечения срока действия. В режиме ограниченного доступа операции, выполняемые в сеансе, приводят к ошибке, пока пользователь не установит новый пароль учетной записи. Сведения о режиме ограниченного доступа см. в разделе 6.2.12 «Обработка сервером истекших паролей».
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 INTERVALNDAYЭтот параметр истечения срока действия переопределяет глобальную политику для всех учетных записей, указанных в инструкции. Для каждой учетной записи устанавливается срок действия пароля в
Nднях. Следующее утверждение требует смены пароля каждые 180 дней:CREATE USER 'jeffrey'@'localhost' PASSWORD EXPIRE INTERVAL 180 DAY;
Параметры блокировки учетных записей CREATE USER
MySQL поддерживает блокировку и разблокировку учетных записей с помощью параметров ACCOUNT LOCK и ACCOUNT
UNLOCK, которые определяют состояние блокировки учетной записи. Дополнительные сведения см. в разделе 6.2.15 «Блокировка учетных записей».
Если указано несколько параметров блокировки учетных записей, приоритет имеет последний параметр.
© 2025 Oracle
Licensed under the GPLv2 License.