Spec-Zone.ru › MySQL 5.7

6.2.13 Подключаемые модули аутентификации

Когда клиент подключается к серверу MySQL, сервер использует имя пользователя, предоставленное клиентом, и хост клиента для выбора соответствующей записи учетной записи из таблицы системы mysql.user. Затем сервер аутентифицирует клиента, определяя из записи учетной записи, какой плагин аутентификации применим к клиенту:

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

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

Подключаемые модули аутентификации обеспечивают эти важные возможности:

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

  • Внешняя аутентификация. Подключаемые модули аутентификации позволяют клиентам подключаться к серверу MySQL с учетными данными, подходящими для методов аутентификации, которые хранят учетные данные не в таблице системы mysql.user. Например, могут быть созданы плагины для использования внешних методов аутентификации, таких как PAM, идентификаторы входа в Windows, LDAP или Kerberos.

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

Примечание

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

  • Доступные плагины аутентификации

  • Использование плагинов аутентификации

  • Ограничения на использование подключаемых модулей аутентификации

Доступные плагины аутентификации

MySQL 5.7 предоставляет следующие плагины аутентификации:

  • Плагины, выполняющие родную аутентификацию; то есть, аутентификация на основе методов хэширования паролей, используемых до появления подключаемых модулей аутентификации в MySQL. Плагин mysql_native_password реализует аутентификацию на основе метода родного хэширования паролей. Плагин mysql_old_password реализует родную аутентификацию на основе более старого (до 4.1) метода хэширования паролей (и устарел и удален в MySQL 5.7.5). См. раздел 6.4.1.1, «Родная подключаемая аутентификация» и раздел 6.4.1.2, «Старая родная подключаемая аутентификация».

  • Плагины, выполняющие аутентификацию с использованием хэширования паролей SHA-256. Это более сильное шифрование, чем доступное с родной аутентификацией. См. раздел 6.4.1.5, «Подключаемая аутентификация SHA-256» и раздел 6.4.1.4, «Подключаемая аутентификация кэширования SHA-2».

  • Плагин на стороне клиента, отправляющий пароль на сервер без хэширования или шифрования. Этот плагин используется совместно с плагинами на стороне сервера, которые требуют доступа к паролю точно в том виде, в котором он предоставлен пользователем клиента. См. раздел 6.4.1.6, «Подключаемая аутентификация с открытым текстом на стороне клиента».

  • Плагин, выполняющий внешнюю аутентификацию с использованием PAM (подключаемых модулей аутентификации), позволяющий серверу MySQL использовать PAM для аутентификации пользователей MySQL. Этот плагин также поддерживает пользователей-прокси. См. раздел 6.4.1.7, «Подключаемая аутентификация PAM».

  • Плагин, выполняющий внешнюю аутентификацию в Windows, позволяющий серверу MySQL использовать собственные службы Windows для аутентификации подключений клиентов. Пользователи, вошедшие в систему Windows, могут подключаться из программ MySQL-клиентов к серверу на основе информации в их среде без указания дополнительного пароля. Этот плагин также поддерживает пользователей-прокси. См. раздел 6.4.1.8, «Подключаемая аутентификация Windows».

  • Плагины, выполняющие аутентификацию с использованием LDAP (Lightweight Directory Access Protocol) для аутентификации пользователей MySQL путем доступа к службам каталогов, таким как X.500. Эти плагины также поддерживают пользователей-прокси. См. раздел 6.4.1.9, «Подключаемая аутентификация LDAP».

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

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

  • Плагин тестирования, проверяющий учетные данные учетной записи и регистрирующий успех или неудачу в журнале ошибок сервера. Этот плагин предназначен для целей тестирования и разработки и как пример написания плагина аутентификации. См. раздел 6.4.1.12, «Подключаемый модуль аутентификации для тестирования».

Примечание

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

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

Если вас интересует написание собственных плагинов аутентификации, см. Написание плагинов аутентификации.

Использование плагина аутентификации

В этом разделе приведены общие инструкции по установке и использованию плагинов аутентификации. Инструкции, специфичные для конкретного плагина, см. в разделе, описывающем данный плагин в разделе 6.4.1, «Плагины аутентификации».

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

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

  • Для каждой учетной записи MySQL, которую вы создаете, укажите соответствующий плагин серверной стороны для использования в процессе аутентификации. Если учетная запись должна использовать плагин аутентификации по умолчанию, не нужно явно указывать плагин в инструкции создания учетной записи. Переменная системы default_authentication_plugin настраивает плагин аутентификации по умолчанию.

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

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

Для стандартных MySQL-клиентов, таких как mysql и mysqladmin, опцию --default-auth=plugin_name можно указать в командной строке, чтобы указать, какой плагин клиентской стороны может ожидать использовать программа, хотя сервер переопределяет это, если плагин серверной стороны, связанный с учетной записью пользователя, требует другого плагина клиентской стороны.

Если клиентская программа не находит файл библиотеки плагина клиентской стороны, укажите опцию --plugin-dir=dir_name, чтобы указать расположение каталога с библиотеками плагинов.

Ограничения плагиновой аутентификации

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

Термин «“родная аутентификация” здесь относится к аутентификации по паролям, хранящимся в таблице системы mysql.user. Это тот же метод аутентификации, который предоставляли более старые серверы MySQL до реализации плагиновой аутентификации. «“Родная аутентификация Windows” относится к аутентификации с использованием учетных данных пользователя, уже вошедшего в систему Windows, реализованной плагином Windows Native Authentication (“плагин Windows” для краткости).

  • Общие ограничения плагиновой аутентификации

  • Плагиновая аутентификация и сторонние соединители

Общие ограничения плагиновой аутентификации
  • Connector/C++: Клиенты, использующие этот соединитель, могут подключаться к серверу только через учетные записи, использующие родную аутентификацию.

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

  • Connector/NET: Клиенты, использующие Connector/NET, могут подключаться к серверу через учетные записи, использующие родную аутентификацию или родную аутентификацию Windows.

  • Connector/PHP: Клиенты, использующие этот соединитель, могут подключаться к серверу только через учетные записи, использующие родную аутентификацию, при компиляции с использованием родного драйвера MySQL для PHP (mysqlnd).

  • Родная аутентификация Windows: Подключение через учетную запись, использующую плагин Windows, требует настройки домена Windows. Без неё используется аутентификация NTLM, и тогда возможны только локальные подключения; то есть, клиент и сервер должны работать на одном компьютере.

  • Пользователи-прокси: Поддержка пользователей-прокси доступна в той степени, в которой клиенты могут подключаться через учетные записи, аутентифицированные плагинами, которые реализуют функцию пользователя-прокси (то есть плагины, которые могут возвращать имя пользователя, отличное от имени подключающегося пользователя). Например, плагины PAM и Windows поддерживают пользователей-прокси. Плагины аутентификации mysql_native_password и sha256_password по умолчанию не поддерживают пользователей-прокси, но могут быть настроены на это; см. Поддержка сервера для сопоставления пользователей-прокси.

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

  • FEDERATED таблицы: Таблица FEDERATED может получить доступ к удалённой таблице только через учетные записи на удалённом сервере, использующие родную аутентификацию.

Плагиновая аутентификация и сторонние соединители

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

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

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

  • Чтобы использовать возможности плагиновой аутентификации, соединитель, основанный на libmysqlclient, должен быть переподключен к текущей версии libmysqlclient. Это позволит соединителю поддерживать подключения через учетные записи, требующие теперь плагины клиентской стороны, встроенные в libmysqlclient (например, плагин cleartext, необходимый для аутентификации PAM, и плагин Windows, необходимый для родной аутентификации Windows). Связывание с текущим libmysqlclient также позволит соединителю получить доступ к плагинам клиентской стороны, установленным в стандартном каталоге плагинов MySQL (обычно каталог, задаваемый значением по умолчанию для локальной переменной системы сервера plugin_dir).

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

  • Другой способ для соединителя поддерживать заданный метод аутентификации — реализовать его непосредственно в протоколе клиент-сервер. Connector/NET использует этот подход для обеспечения поддержки родной аутентификации Windows.

  • Если соединитель должен быть в состоянии загружать плагины клиентской стороны из каталога, отличного от каталога плагинов по умолчанию, он должен реализовать способ для пользователей клиента указать каталог. Возможности для этого включают опцию командной строки или переменную среды, из которой соединитель может получить имя каталога. Стандартные MySQL-клиентские программы, такие как mysql и mysqladmin, реализуют опцию --plugin-dir. См. также .

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

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/pluggable-authentication.html

Spec-Zone.ru

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