Spec-Zone.ru › MySQL 9.2

8.2.4 Указание имён учётных записей

Имена учётных записей MySQL состоят из имени пользователя и имени хоста, что позволяет создавать отдельные учётные записи для пользователей с одинаковым именем пользователя, которые подключаются с разных хостов. В этом разделе описывается синтаксис имён учётных записей, включая специальные значения и правила использования подстановочных символов.

Во многих отношениях имена учётных записей похожи на имена ролей MySQL, с некоторыми различиями, описанными в разделе 8.2.5 «Указание имён ролей».

Имена учётных записей появляются в операторах SQL, таких как CREATE USER, GRANT и SET PASSWORD, и следуют этим правилам:

  • Синтаксис имени учётной записи — 'user_name'@'host_name'.

  • Часть @'host_name' является необязательной. Имя учётной записи, состоящее только из имени пользователя, эквивалентно 'user_name'@'%'. Например, 'me' эквивалентно 'me'@'%'.

  • Имя пользователя и имя хоста не нужно заключать в кавычки, если они допустимы как необрамлённые идентификаторы. Кавычки необходимо использовать, если строка user_name содержит специальные символы (например, пробел или -), или строка host_name содержит специальные символы или символы подстановки (например, . или %). Например, в имени учётной записи 'test-user'@'%.com' и имя пользователя, и имя хоста требуют кавычек.

  • Заключайте имена пользователей и имена хостов в кавычки как идентификаторы или как строки, используя обратные кавычки (`), одинарные кавычки (') или двойные кавычки ("). Сведения о правилах заключения в кавычки строк и идентификаторов см. в разделе 11.1.1 «Строковые литералы» и разделе 11.2 «Имена объектов схемы». В результатах оператора SHOW имена пользователей и имена хостов заключаются в обратные кавычки (`).

  • Если имя пользователя и имя хоста заключены в кавычки, они должны быть заключены в кавычки отдельно. То есть запишите 'me'@'localhost', а не 'me@localhost'. (Последнее фактически эквивалентно 'me@localhost'@'%', хотя такое поведение сейчас устарело).

  • Ссылка на функцию CURRENT_USER или CURRENT_USER() эквивалентна явному указанию имени пользователя и имени хоста текущего клиента.

MySQL сохраняет имена учётных записей в таблицах разрешений в базе данных системы mysql, используя отдельные столбцы для имени пользователя и имени хоста:

  • Таблица user содержит по одной строке для каждой учётной записи. Столбцы User и Host хранят имя пользователя и имя хоста. Эта таблица также указывает, какими глобальными привилегиями обладает учётная запись.

  • Другие таблицы разрешений указывают привилегии учётной записи для баз данных и объектов внутри баз данных. Эти таблицы имеют столбцы User и Host для хранения имени учётной записи. Каждая строка в этих таблицах ассоциируется с учётной записью в таблице user, имеющей одинаковые значения User и Host.

  • Для целей проверки доступа сравнения значений User чувствительны к регистру. Сравнения значений Host нечувствительны к регистру.

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

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

Часть имени пользователя имени учётной записи — это либо ненулевое значение, которое буквально соответствует имени пользователя для попыток входящего подключения, либо пустое значение (пустая строка), которое соответствует любому имени пользователя. Учётная запись с пустым именем пользователя — это анонимный пользователь. Чтобы указать анонимного пользователя в операторах SQL, используйте часть имени пользователя с пустой строкой в кавычках, например, ''@'localhost'.

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

  • Значение хоста может быть именем хоста или IP-адресом (IPv4 или IPv6). Название 'localhost' обозначает локальный хост. IP-адрес '127.0.0.1' обозначает IPv4-петлевой интерфейс. IP-адрес '::1' обозначает IPv6-петлевой интерфейс.

  • Допускается использование подстановочных символов % и _ в значениях имени хоста или IP-адреса, но это устаревшая функция и, следовательно, может быть удалена в будущих версиях MySQL. Эти символы имеют то же значение, что и в операциях сопоставления шаблонов с оператором LIKE. Например, значение хоста '%' соответствует любому имени хоста, а значение '%.mysql.com' соответствует любому хосту в домене mysql.com. '198.51.100.%' соответствует любому хосту в сети класса C 198.51.100.

    Поскольку IP-значения подстановки разрешены в значениях хоста (например, '198.51.100.%' для соответствия всем хостам в подсети), кто-то мог бы попытаться использовать эту возможность, назвав хост 198.51.100.somewhere.com. Чтобы предотвратить такие попытки, MySQL не выполняет сопоставление с именами хостов, начинающимися с цифр и точки. Например, если хосту присвоено имя 1.2.example.com, его имя никогда не соответствует части имени хоста имени учётной записи. Значение IP-подстановки может соответствовать только IP-адресам, а не именам хостов.

    Если partial_revokes равно ON, MySQL обрабатывает % и _ в разрешениях как буквальные символы, а не подстановочные символы. Использование этих подстановочных символов устарело (независимо от значения этой переменной); вы должны ожидать, что эта функциональность будет удалена в будущей версии MySQL.

  • Для значения хоста, заданного как IPv4-адрес, можно указать маску подсети, чтобы указать, сколько битов адреса использовать для номера сети. Запись маски подсети нельзя использовать для IPv6-адресов.

    Синтаксис — host_ip/netmask. Например:

    CREATE USER 'david'@'198.51.100.0/255.255.255.0';
    

    Это позволяет david подключаться с любого хоста-клиента, имеющего IP-адрес client_ip, для которого выполняется следующее условие:

    client_ip & netmask = host_ip
    

    То есть для оператора CREATE USER, только что показанного:

    client_ip & 255.255.255.0 = 198.51.100.0
    

    IP-адреса, удовлетворяющие этому условию, находятся в диапазоне от 198.51.100.0 до 198.51.100.255.

    Маска подсети обычно начинается с установленных в 1 битов, за которыми следуют установленные в 0 биты. Примеры:

    • 198.0.0.0/255.0.0.0: Любой хост в сети класса А 198

    • 198.51.0.0/255.255.0.0: Любой хост в сети класса В 198.51

    • 198.51.100.0/255.255.255.0: Любой хост в сети класса С 198.51.100

    • 198.51.100.1: Только хост с этим конкретным IP-адресом

  • Значение хоста, указанное как IPv4-адрес, можно записать с использованием нотации CIDR, например, 198.51.100.44/24.

Сервер выполняет сопоставление значений хостов в именах учётных записей с хостом клиента, используя значение, возвращаемое системным резолвером DNS для имени хоста или IP-адреса клиента. За исключением случаев, когда значение хоста учётной записи задано с помощью нотации маски подсети, сервер выполняет это сравнение как соответствие строк, даже если значение хоста учётной записи задано как IP-адрес. Это означает, что вы должны указывать значения хостов учётных записей в том же формате, который используется DNS. Ниже приведены примеры проблем, на которые следует обратить внимание:

  • Предположим, что хост в локальной сети имеет полное имя host1.example.com. Если DNS возвращает результаты поиска имени для этого хоста как host1.example.com, используйте это имя в значениях хоста учётной записи. Если DNS возвращает только host1, используйте host1 вместо него.

  • Если DNS возвращает IP-адрес для данного хоста как 198.51.100.2, это соответствует значению хоста учётной записи 198.51.100.2, но не 198.051.100.2. Аналогично, это соответствует шаблону имени хоста учётной записи, такому как 198.51.100.%, но не 198.051.100.%.

Чтобы избежать таких проблем, рекомендуется проверить формат, в котором ваш DNS возвращает имена и адреса хостов. Используйте значения в том же формате в именах учётных записей MySQL.

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

Spec-Zone.ru

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