4.3.5 Использование аутентификации LDAP и Kerberos
MySQL Enterprise Edition поддерживает методы аутентификации, которые позволяют MySQL Server использовать LDAP (Lightweight Directory Access Protocol), LDAP с Kerberos или нативный Kerberos для аутентификации пользователей MySQL. MySQL Shell поддерживает аутентификацию LDAP и Kerberos для подключений к классическому протоколу MySQL. Эта функциональность не поддерживается для подключений X Protocol.
Следующие разделы описывают, как включить подключения к серверу MySQL с использованием аутентификации LDAP и Kerberos. Предполагается, что сервер работает с включенным серверным плагином, а клиентский плагин доступен на хосте клиента.
Простая аутентификация LDAP
MySQL и LDAP работают вместе для получения информации о пользователе, учетных данных и группах. Обзор процесса простой аутентификации LDAP см. в . Для использования простой аутентификации LDAP с MySQL Shell должны быть выполнены следующие условия:
-
Должна быть создана учетная запись пользователя на сервере MySQL, настроенная для связи с сервером LDAP. Пользователь MySQL должен быть идентифицирован с помощью серверного плагина
authentication_ldap_simpleи, необязательно, с помощью имени различения (DN) пользователя LDAP. Например:CREATE USER 'admin'@'localhost' IDENTIFIED WITH authentication_ldap_simple BY 'uid=admin,ou=People,dc=my-domain,dc=com';
Оператор
BYв данном примере указывает, к какой записи LDAP аутентифицируется учетная запись MySQL. Конкретные атрибуты DN могут различаться в зависимости от сервера LDAP. MySQL Shell использует клиентский плагин
mysql_clear_password, который отправляет пароль на сервер в виде открытого текста. Шифрование или хеширование пароля не используются, поэтому требуется безопасное соединение (с использованием SSL или сокетов) между MySQL Shell и сервером. Более подробную информацию см. в Разделе 4.3.4 «Использование зашифрованных подключений» или Разделе 4.3.3 «Подключение с использованием Unix-сокетов и именных каналов Windows».-
Для минимизации рисков безопасности плагин
mysql_clear_passwordдолжен быть явно включён, установив значение параметра командной строки--auth-methodнаclear_text_passwordпри безопасном соединении. Например, следующая команда позволяет установить глобальную сессию для пользователя, созданного в предыдущем примере:$>
mysqlsh admin@localhost:3308 --auth-method=clear_text_passwordPlease provide the password for 'admin@localhost:3308':admin_password(admin LDAP password)ПримечаниеВы также можете установить переменную среды
LIBMYSQL_ENABLE_CLEARTEXT_PLUGINи включить плагинmysql_clear_passwordдля всех клиентских подключений. Однако этот метод изначально небезопасен и не рекомендуется для использования в каких-либо сценариях, кроме тестирования. Дополнительную информацию см. в .
Аутентификация LDAP на основе SASL
MySQL Server может принимать подключения от пользователей, определённых вне таблиц наград MySQL в каталогах LDAP. Клиентские и серверные плагины LDAP SASL используют сообщения SASL для безопасной передачи учетных данных в рамках протокола LDAP (см. ).
Для аутентификации на основе SASL пользователь MySQL должен быть идентифицирован с помощью серверного плагина authentication_ldap_sasl и, необязательно, записи LDAP, к которой аутентифицируется учетная запись MySQL. Например:
CREATE USER 'sammy'@'localhost'
IDENTIFIED WITH authentication_ldap_sasl
BY 'uid=sammy_ldap,ou=People,dc=my-domain,dc=com';
Клиентский плагин authentication_ldap_sasl_client поставляется с пакетами MySQL Server, а не встроен в библиотеку клиента libmysqlclient. MySQL Shell предоставляет параметр сохранения соединения shell.options.mysqlPluginDir, который позволяет указать расположение необходимого плагина. В качестве альтернативы вы можете переопределить настройку сохранения, указав путь с помощью параметра командной строки --mysql-plugin-dir. Например, следующая команда позволяет установить глобальную сессию на хосте Linux для пользователя, созданного в предыдущем примере:
$> mysqlsh sammy@localhost:3308 --mysql-plugin-dir="/usr/local/mysql/lib/plugin"
Please provide the password for 'sammy@localhost:3308': sammy_password (sammy_ldap LDAP password)
Дополнительные примеры использования см. в и .
Аутентификация GSSAPI/Kerberos через LDAP SASL
MySQL Shell также поддерживает аутентификацию Kerberos через LDAP SASL. Используя абстракцию интерфейса приложения безопасности общего назначения (GSSAPI), подключение такого типа аутентифицируется с Kerberos для получения учетных данных службы, а затем эти учетные данные используются для безопасного доступа к другим службам. GSSAPI/Kerberos поддерживается как метод аутентификации LDAP для серверов MySQL и MySQL Shell только в Linux.
Для успешного подключения должна быть доступна библиотека GSSAPI и службы Kerberos на сервере MySQL. Сведения о конфигурации сервера см. в .
Следующий общий пример создает пользователя-прокси с именем lucy@MYSQL.LOCAL, который принимает права проксируемого пользователя с именем proxied_krb_usr. Предполагается, что домен области MYSQL.LOCAL настроен в файле конфигурации Kerberos /etc/krb5.conf.
Часть имени учетной записи, включающая домен принципала, указывается как одно значение для аутентификации LDAP Kerberos, например, 'lucy@MYSQL.LOCAL'.
CREATE USER 'lucy@MYSQL.LOCAL'
IDENTIFIED WITH authentication_ldap_sasl
BY '#krb_grp=proxied_krb_user';
CREATE USER 'proxied_krb_user';
GRANT ALL PRIVILEGES ON my_db.* TO 'proxied_krb_user';
GRANT PROXY on 'proxied_krb_user' TO 'lucy@MYSQL.LOCAL';
Следующая команда позволяет установить глобальную сессию на хосте Linux для пользователя, созданного в предыдущем примере. Необходимо указать расположение директории плагинов сервера, либо как параметр сохранения подключения shell.options.mysqlPluginDir, либо как параметр командной строки, например:
$> mysqlsh lucy%40MYSQL.LOCAL:password@localhost:3308/my_db
--mysql-plugin-dir="/usr/local/mysql/lib/plugin"
В этом примере кодирование процентов (%40) заменяет зарезервированный символ @ в имени принципала, и password — значение переменной сервера MySQL authentication_ldap_sasl_bind_root_pwd. Список переменных сервера, связанных с аутентификацией Kerberos через LDAP SASL, см. в .
Перед вызовом MySQL Shell вы можете получить и кэшировать билет-генератор билетов (ticket-granting ticket) из центра распределения ключей независимо от MySQL. В этом случае вызовите MySQL Shell без указания имени пользователя или пароля:
$> mysqlsh localhost:3308/my_db --auth-method=authentication_ldap_sasl_client
--mysql-plugin-dir="/usr/local/mysql/lib/plugin"
Указание параметра --auth-method=authentication_ldap_sasl_client является обязательным, когда учетные данные пользователя не указаны.
Аутентификация Kerberos
MySQL Shell может устанавливать соединения для учетных записей, использующих плагин аутентификации на стороне сервера authentication_kerberos, при условии, что необходимые билеты Kerberos доступны или могут быть получены. Начиная с MySQL Enterprise Edition 8.0.27, эта возможность доступна на хостах под управлением Linux и Windows (версия 8.0.26 поддерживает только Linux). Подробную информацию о настройке см. в .
Аутентификация Kerberos может объединять имя пользователя (например, lucy) и доменную область (realm), указанные в учетной записи пользователя (например, MYSQL.LOCAL), для создания имени принципала пользователя (UPN), такого как lucy@MYSQL.LOCAL. Для создания учетной записи MySQL, соответствующей UPN lucy@MYSQL.LOCAL, используйте следующую команду:
CREATE USER 'lucy'
IDENTIFIED WITH authentication_kerberos
BY 'MYSQL.LOCAL';
Плагин на стороне клиента использует UPN и пароль для получения билета-генератора билетов (TGT), использует TGT для получения билета службы MySQL (ST) и использует ST для аутентификации на сервере MySQL.
Следующая команда позволяет установить глобальную сессию на хосте Linux для пользователя, созданного в предыдущем примере. Вы должны указать расположение каталога плагина сервера, либо как постоянный параметр подключения shell.options.mysqlPluginDir, либо как неперманентный параметр команды, например:
$> mysqlsh lucy:3308 --mysql-plugin-dir="/usr/local/mysql/lib/plugin"
Please provide the password for 'lucy@localhost:3308': UPN_password
Перед вызовом MySQL Shell вы можете получить и кэшировать TGT из центра распределения ключей независимо от MySQL. В этом случае вызовите MySQL Shell без указания имени пользователя или пароля:
$> mysqlsh localhost:3308 --auth-method=authentication_kerberos_client
--mysql-plugin-dir="/usr/local/mysql/lib/plugin"
Указание параметра --auth-method=authentication_kerberos_client обязательно, когда данные пользователя не указаны.
На платформах Microsoft Windows вы можете определить режим клиента Kerberos, SSPI или GSSAPI, используя параметр подключения plugin-authentication-kerberos-client-mode. Этот параметр доступен в следующих форматах:
Параметр командной строки:
--plugin-authentication-kerberos-client-mode=SSPI | GSSAPIПараметр запроса подключения:
user@host:port?plugin-authentication-kerberos-client-mode=SSPI | GSSAPI-
Параметр словаря URI:
plugin-authentication-kerberos-client-mode': 'SSPI' | 'GSSAPI', например:shell.connect({'user': 'mysql', 'auth-method':'authentication_kerberos_client', 'host': '127.0.0.1', 'password': 'mysqlpa$$w0rd', 'plugin-authentication-kerberos-client-mode': 'GSSAPI', 'scheme': 'mysql'});
Вы также можете указать plugin-authentication-kerberos-client-mode в файле конфигурации. Если он присутствует в файле конфигурации, он используется по умолчанию.
Если plugin-authentication-kerberos-client-mode не определен, по умолчанию используется SSPI.
При подключении к серверу MySQL с использованием аутентификации Kerberos, режимы аутентификации ведут себя следующим образом:
-
GSSAPI:Если пароль не указан, билет аутентификации извлекается из кэша MIT Kerberos. Если действительный билет не найден, соединение завершается ошибкой.
Если пароль указан, билет аутентификации извлекается с сервера Kerberos и сохраняется в кэше MIT Kerberos.
Если имя пользователя не указано, имя пользователя Windows используется в качестве имени учетной записи MySQL.
-
SSPI:Если пароль не указан, используется билет единого входа Windows.
Если пароль указан, билет аутентификации сохраняется во временном кэше в оперативной памяти.
© 2025 Oracle
Licensed under the GPLv2 License.