6.12.2 Подключение с использованием Kerberos
Kerberos — это протокол взаимной аутентификации сервер-клиент на основе билетов, поддерживаемый MySQL Server (только коммерческие версии).
Поддержка Kerberos в Connector/J реализована с помощью GSS-API, JAAS API и JCA API; поставщики для каждой из этих API должны быть доступны в Java Virtual Machine, на которой работает ваше приложение, использующее аутентификацию Kerberos. Использование поставщиков, отличных от стандартных, может привести к непредсказуемым результатам.
Процесс аутентификации Kerberos
Основное использование аутентификации Kerberos в MySQL заключается в возможности создания подключений без необходимости указывать имя пользователя и пароль в строке подключения. Для этого Connector/J должен быть настроен с настройкой свойства подключения defaultAuthenticationPlugin=authentication_kerberos_client
, а затем имя пользователя MySQL может быть извлечено из принципала Kerberos, связанного с кэшированным локально билетом выдачи билетов (TGT). Обратите внимание, что имя пользователя MySQL отличается от принципала Kerberos тем, что не содержит части домена; поэтому Connector/J обрезает все символы в принципе после знака «“@”» и использует его в качестве имени пользователя MySQL.
Если в локальном кэше Kerberos нет TGT, Connector/J использует имя пользователя операционной системы в качестве имени пользователя MySQL. Имя пользователя, указанное в строке подключения, всегда имеет приоритет перед именами, полученными другими способами для имени пользователя MySQL.
Затем имя пользователя MySQL отправляется на сервер MySQL для проверки. Отсутствие пользователя приводит к возврату ошибки сервером. Существующие пользователи могут продолжить процесс аутентификации, и последующий механизм аутентификации зависит от того, как был создан пользователь MySQL:
-
Для пользователей, созданных с помощью плагина аутентификации
authentication_kerberos, сервер MySQL отправляет соответствующий домен Kerberos обратно Connector/J, который, в свою очередь, использует его для построения принципала Kerberos, идентифицирующего пользователя на сервере Kerberos. После этого может произойти одно из трёх:Новый построенный принципал Kerberos соответствует принципалу Kerberos, связанному с локально кэшированным TGT; этот TGT затем отправляется на сервер Kerberos для получения необходимого билета службы MySQL, и аутентификация продолжается.
Новый построенный принципал Kerberos не соответствует принципалу Kerberos, связанному с локально кэшированным TGT, или локальный кэш Kerberos отсутствует; этот принципал Kerberos, а также пароль, который мог быть указан в строке подключения (или пустая строка, если он не был указан), отправляется на сервер Kerberos для получения сначала валидного TGT, а затем необходимого билета службы MySQL; и аутентификация продолжается.
Выбрасывается ошибка, если Connector/J не может получить правильные настройки Kerberos, не может связаться с сервером Kerberos или не может выполнить любой из двух указанных шагов.
Для пользователей, определенных с плагином, отличным от
authentication_kerberos, сервер запрашивает Connector/J использовать другой метод аутентификации.
Настройки Kerberos на стороне клиента
Для корректной работы с сервером Kerberos, Connector/J требует либо системную настройку Kerberos, либо следующие локальные системные свойства для JVM:
-Djava.security.krb5.kdc=[the KDC host name]-Djava.security.krb5.realm=[the default Kerberos realm]
Отладочная информация
Настройка Connector/J для использования аутентификации Kerberos не всегда проста. Включение ведения журнала в внутренних Java-поставщиках может помочь в поиске потенциальных проблем. Это можно сделать, задав следующие системные свойства:
-Dsun.security.krb5.debug=true-Dsun.security.jgss.debug=true
© 2025 Oracle
Licensed under the GPLv2 License.