6.4.1.8 Windows Pluggable Authentication
Windows Pluggable Authentication — это расширение, включенное в MySQL Enterprise Edition, коммерческий продукт. Дополнительную информацию о коммерческих продуктах см. на странице https://www.mysql.com/products/.
MySQL Enterprise Edition для Windows поддерживает метод аутентификации, выполняющий внешнюю аутентификацию в Windows, позволяя MySQL Server использовать собственные службы Windows для аутентификации подключений клиентов. Пользователи, авторизованные в Windows, могут подключаться к серверу из программ-клиентов MySQL на основе информации в своей среде без указания дополнительного пароля.
Клиент и сервер обмениваются пакетами данных в процессе рукопожатия аутентификации. В результате этого обмена сервер создает объект контекста безопасности, представляющий личность клиента в ОС Windows. Эта личность включает имя учетной записи клиента. Windows Pluggable Authentication использует личность клиента для проверки, является ли это заданная учетная запись или член группы. По умолчанию переговоры используют Kerberos для аутентификации, а затем NTLM, если Kerberos недоступен.
Windows Pluggable Authentication предоставляет следующие возможности:
Внешняя аутентификация: аутентификация Windows позволяет MySQL Server принимать подключения от пользователей, определенных вне таблиц разрешений MySQL, которые авторизованы в Windows.
Поддержка пользователей-прокси: аутентификация Windows может возвращать MySQL имя пользователя, отличное от имени внешнего пользователя, переданного программой-клиентом. Это означает, что плагин может возвращать MySQL-пользователя, определяющего привилегии, которые должен иметь внешний пользователь, авторизованный в Windows. Например, пользователь Windows с именем
joeможет подключаться и иметь привилегии MySQL-пользователя с именемdeveloper.
В следующей таблице показаны имена плагина и файла библиотеки. Файл должен находиться в каталоге, указанном переменной среды plugin_dir.
Таблица 6.14 Названия плагина и библиотеки для аутентификации Windows
| Плагин или файл | Название плагина или файла |
|---|---|
| Плагин на стороне сервера | authentication_windows |
| Плагин на стороне клиента | authentication_windows_client |
| Файл библиотеки | authentication_windows.dll |
Файл библиотеки содержит только плагин на стороне сервера. Плагин на стороне клиента встроен в библиотеку клиента libmysqlclient.
Плагин аутентификации Windows на стороне сервера включён только в MySQL Enterprise Edition. Он не входит в дистрибутивы MySQL Community. Плагин на стороне клиента включён во все дистрибутивы, включая дистрибутивы Community. Это позволяет клиентам из любого дистрибутива подключаться к серверу, на котором загружен плагин на стороне сервера.
В следующих разделах приведена информация об установке и использовании, специфичная для аутентификации Windows Pluggable:
Для получения общей информации об аутентификации с плагинами в MySQL см. Раздел 6.2.13, «Pluggable Authentication». Сведения о пользователях-прокси см. в Разделе 6.2.14, «Proxy Users».
Установка Windows Pluggable Authentication
В этом разделе описывается, как установить плагин аутентификации Windows на стороне сервера. Для общей информации об установке плагинов см. Раздел 5.5.1, «Установка и удаление плагинов».
Для использования плагином на сервере, файл библиотеки плагина должен находиться в каталоге плагинов MySQL (каталог, указанный переменной среды plugin_dir). При необходимости, настройте расположение каталога плагинов, установив значение plugin_dir при запуске сервера.
Для загрузки плагина при запуске сервера используйте параметр --plugin-load-add для указания файла библиотеки, содержащего его. С этим методом загрузки плагина параметр должен указываться каждый раз при запуске сервера. Например, впишите эти строки в файл сервера my.cnf:
[mysqld]
plugin-load-add=authentication_windows.dll
После изменения my.cnf перезапустите сервер, чтобы новые настройки вступили в силу.
В качестве альтернативы, для загрузки плагина во время выполнения, используйте данное выражение:
INSTALL PLUGIN authentication_windows SONAME 'authentication_windows.dll';
INSTALL PLUGIN загружает плагин немедленно и также регистрирует его в таблице системы mysql.plugins, чтобы сервер загружал его при каждом последующем обычном запуске без необходимости в --plugin-load-add.
Для проверки установки плагина, проверьте таблицу схемы информации PLUGINS или используйте оператор SHOW PLUGINS (см. Раздел 5.5.2, «Получение информации о плагинах сервера»). Например:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE '%windows%';
+------------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+------------------------+---------------+
| authentication_windows | ACTIVE |
+------------------------+---------------+
Если плагин не может быть инициализирован, проверьте журналы ошибок сервера на наличие диагностических сообщений.
Чтобы связать учётные записи MySQL с плагином аутентификации Windows, см. Использование Windows Pluggable Authentication. Дополнительный контроль над плагином обеспечивают переменные среды authentication_windows_use_principal_name и authentication_windows_log_level. См. Раздел 5.1.7, «Переменные среды сервера».
Удаление Windows Pluggable Authentication
Способ удаления плагина аутентификации Windows зависит от способа его установки:
Если вы установили плагин при запуске сервера с помощью параметра
--plugin-load-add, перезапустите сервер без этого параметра.-
Если вы установили плагин во время работы с оператором
INSTALL PLUGIN, он остаётся установленным после перезапуска сервера. Чтобы удалить его, используйте операторUNINSTALL PLUGIN:UNINSTALL PLUGIN authentication_windows;
Кроме того, удалите любые параметры запуска, которые устанавливают переменные среды, относящиеся к плагину Windows.
Использование аутентификации Windows Pluggable
Плагин аутентификации Windows поддерживает использование учетных записей MySQL таким образом, что пользователи, авторизованные в Windows, могут подключаться к серверу MySQL без необходимости указывать дополнительный пароль. Предполагается, что сервер работает с включенным плагином на стороне сервера, как описано в Установка аутентификации Windows Pluggable. После того, как DBA включит плагин на стороне сервера и настроит учетные записи для его использования, клиенты могут подключаться с помощью этих учетных записей без каких-либо дополнительных настроек со своей стороны.
Для обращения к плагину аутентификации Windows в пункте IDENTIFIED WITH оператора CREATE USER используйте имя authentication_windows. Предположим, что пользователи Windows Rafal и Tasha должны иметь право подключаться к MySQL, а также любые пользователи в группе Administrators или Power
Users. Для настройки этого, создайте учетную запись MySQL с именем sql_admin, которая использует плагин Windows для аутентификации:
CREATE USER sql_admin
IDENTIFIED WITH authentication_windows
AS 'Rafal, Tasha, Administrators, "Power Users"';
Имя плагина — authentication_windows. Строка, следующая за ключевым словом AS, является строкой аутентификации. Она указывает, что пользователи Windows с именем Rafal или Tasha имеют право аутентифицироваться на сервере как пользователь MySQL sql_admin, а также любые пользователи Windows в группе Administrators или Power
Users. Последнее имя группы содержит пробел, поэтому оно должно быть заключено в двойные кавычки.
После создания учетной записи sql_admin пользователь, авторизованный в Windows, может попытаться подключиться к серверу с помощью этой учетной записи:
C:\> mysql --user=sql_admin
Пароль здесь не требуется. Плагин authentication_windows использует API безопасности Windows для проверки, какой пользователь Windows подключается. Если этот пользователь имеет имя Rafal или Tasha, или является членом группы Administrators или Power
Users, сервер предоставляет доступ, и клиент аутентифицируется как sql_admin и имеет любые привилегии, предоставленные учетной записи sql_admin. В противном случае сервер отказывает в доступе.
Синтаксис строки аутентификации для плагина аутентификации Windows следует этим правилам:
Строка состоит из одного или нескольких сопоставлений пользователей, разделенных запятыми.
-
Каждое сопоставление пользователя связывает имя пользователя или группы Windows с именем пользователя MySQL:
win_user_or_group_name=mysql_user_namewin_user_or_group_nameДля последнего синтаксиса, при отсутствии значения
mysql_user_name, неявным значением является пользователь MySQL, созданный операторомCREATE USER. Таким образом, эти операторы эквивалентны:CREATE USER sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal, Tasha, Administrators, "Power Users"'; CREATE USER sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal=sql_admin, Tasha=sql_admin, Administrators=sql_admin, "Power Users"=sql_admin'; Каждый символ обратного слэша (
\) в значении должен быть удвоен, поскольку обратный слэш является символом экранирования в строках MySQL.Пробелы в начале и конце, не находящиеся внутри двойных кавычек, игнорируются.
Незаключенные в кавычки значения
win_user_or_group_nameиmysql_user_nameмогут содержать любые символы, кроме знака равенства, запятой или пробела.Если значение
win_user_or_group_nameи/илиmysql_user_nameзаключено в двойные кавычки, все символы между кавычками являются частью значения. Это необходимо, например, если имя содержит пробелы. Все символы внутри двойных кавычек являются допустимыми, кроме двойной кавычки и обратного слэша. Чтобы включить любой из этих символов, экранируйте его с помощью обратного слэша.-
Значения
win_user_or_group_nameиспользуют стандартный синтаксис для принципов Windows, как локальных, так и в домене. Примеры (обратите внимание на удвоение обратных слэшей):domain\\user .\\user domain\\group .\\group BUILTIN\\WellKnownGroup
При вызове сервером для аутентификации клиента плагин сканирует строку аутентификации слева направо в поисках совпадения пользователя или группы с пользователем Windows. Если совпадение найдено, плагин возвращает соответствующее mysql_user_name серверу MySQL. Если совпадения нет, аутентификация завершается неудачно.
Совпадение имени пользователя имеет приоритет над совпадением имени группы. Предположим, что пользователь Windows с именем win_user является членом win_group, и строка аутентификации выглядит следующим образом:
'win_group = sql_user1, win_user = sql_user2'
Когда win_user подключается к серверу MySQL, совпадение находится как с win_group, так и с win_user. Плагин аутентифицирует пользователя как sql_user2, поскольку более конкретное совпадение пользователя имеет приоритет над совпадением группы, даже если группа указана первой в строке аутентификации.
Аутентификация Windows всегда работает для подключений с одного и того же компьютера, на котором работает сервер. Для подключений между компьютерами оба компьютера должны быть зарегистрированы в Microsoft Active Directory. Если они находятся в одном домене Windows, нет необходимости указывать имя домена. Также возможно разрешить подключения из другого домена, как в этом примере:
CREATE USER sql_accounting
IDENTIFIED WITH authentication_windows
AS 'SomeDomain\\Accounting';
Здесь SomeDomain — имя другого домена. Символ обратного слэша удвоен, потому что это символ экранирования MySQL внутри строк.
MySQL поддерживает концепцию прокси-пользователей, когда клиент может подключаться и аутентифицироваться на сервере MySQL с одной учетной записью, но при подключении имеет привилегии другой учетной записи (см. Раздел 6.2.14, «Proxy Users»). Предположим, что вы хотите, чтобы пользователи Windows подключались с использованием одного имени пользователя, но были сопоставлены по своим именам пользователей и группам Windows на определенные учетные записи MySQL следующим образом:
Локальные и доменные пользователи Windows
local_userиMyDomain\domain_userдолжны быть сопоставлены с учетной записью MySQLlocal_wlad.Пользователи в группе домена
MyDomain\Developersдолжны быть сопоставлены с учетной записью MySQLlocal_dev.Администраторы локальной машины должны быть сопоставлены с учетной записью MySQL
local_admin.
Для настройки этого создайте прокси-учетную запись для подключения пользователей Windows и настройте эту учетную запись таким образом, чтобы пользователи и группы были сопоставлены с соответствующими учетными записями MySQL (local_wlad, local_dev, local_admin). Кроме того, предоставьте учетным записям MySQL привилегии, соответствующие необходимым операциям. В следующих инструкциях используется win_proxy в качестве прокси-учетной записи, а local_wlad, local_dev и local_admin — в качестве прокси-учетных записей.
-
Создайте прокси-учетную запись MySQL:
CREATE USER win_proxy IDENTIFIED WITH authentication_windows AS 'local_user = local_wlad, MyDomain\\domain_user = local_wlad, MyDomain\\Developers = local_dev, BUILTIN\\Administrators = local_admin'; -
Для работы проксирования проксируемые учетные записи должны существовать, поэтому создайте их:
CREATE USER local_wlad IDENTIFIED WITH mysql_no_login; CREATE USER local_dev IDENTIFIED WITH mysql_no_login; CREATE USER local_admin IDENTIFIED WITH mysql_no_login;
Проксируемые учетные записи используют плагин аутентификации
mysql_no_login, чтобы предотвратить использование клиентов для прямого входа в сервер MySQL. Вместо этого ожидается, что пользователи, прошедшие аутентификацию с помощью Windows, будут использовать прокси-учетную записьwin_proxy. (Это предполагает, что плагин установлен. Инструкции см. в Разделе 6.4.1.10, «No-Login Pluggable Authentication».) Для альтернативных методов защиты проксируемых учетных записей от прямого использования см. Предотвращение прямого входа в проксируемые учетные записи.Вам также следует выполнить операторы
GRANT(не показаны), которые предоставляют каждой проксируемой учетной записи привилегии, необходимые для доступа к MySQL. -
Предоставьте прокси-учетной записи привилегию
PROXYдля каждой проксируемой учетной записи:GRANT PROXY ON local_wlad TO win_proxy; GRANT PROXY ON local_dev TO win_proxy; GRANT PROXY ON local_admin TO win_proxy;
Теперь пользователи Windows local_user и MyDomain\domain_user могут подключаться к серверу MySQL как win_proxy и при аутентификации имеют привилегии учетной записи, указанной в строке аутентификации (в данном случае local_wlad). Пользователь из группы MyDomain\Developers, подключающийся как win_proxy, имеет привилегии учетной записи local_dev. Пользователь из группы BUILTIN\Administrators имеет привилегии учетной записи local_admin.
Чтобы настроить аутентификацию таким образом, чтобы все пользователи Windows, у которых нет собственной учетной записи MySQL, проходили через прокси-учетную запись, замените стандартную прокси-учетную запись (''@'') на win_proxy в предыдущих инструкциях. Сведения о стандартных прокси-учетных записях см. в Разделе 6.2.14, «Proxy Users».
Если ваша установка MySQL имеет анонимных пользователей, они могут конфликтовать с прокси-пользователем по умолчанию. Более подробную информацию об этой проблеме и способах ее решения см. в Конфликты между прокси-пользователем по умолчанию и анонимным пользователем.
Чтобы использовать плагин аутентификации Windows с строками подключения Connector/NET в Connector/NET 8.0 и выше, см. .
© 2025 Oracle
Licensed under the GPLv2 License.