8.4.1.7 Kerberos-подключаемая аутентификация
Подключаемая аутентификация Kerberos — это расширение, включенное в MySQL Enterprise Edition, коммерческий продукт. Чтобы узнать больше о коммерческих продуктах, см. https://www.mysql.com/products/.
MySQL Enterprise Edition поддерживает метод аутентификации, который позволяет пользователям аутентифицироваться на MySQL Server с помощью Kerberos, при условии, что соответствующие билеты Kerberos доступны или могут быть получены.
Этот метод аутентификации доступен в MySQL 9.2 для MySQL серверов и клиентов на Linux. Он полезен в средах Linux, где приложения имеют доступ к Microsoft Active Directory, в котором Kerberos включен по умолчанию. Клиентская плагин также поддерживается на Windows. Серверная плагин по-прежнему поддерживается только на Linux.
Kerberos-подключаемая аутентификация предоставляет следующие возможности:
Внешняя аутентификация: аутентификация Kerberos позволяет MySQL Server принимать подключения от пользователей, определенных за пределами таблиц наград MySQL, которые получили соответствующие билеты Kerberos.
Безопасность: Kerberos использует билеты вместе с симметричной криптографией, что позволяет выполнять аутентификацию без отправки паролей по сети. Аутентификация Kerberos поддерживает сценарии без пользователя и без пароля.
В следующей таблице показаны имена плагина и файла библиотеки. Суффикс имени файла может отличаться на вашей системе. Файл должен находиться в каталоге, указанном переменной системы plugin_dir. Сведения об установке см. в Разделе по установке Kerberos-подключаемой аутентификации.
Таблица 8.22 Имена плагинов и библиотек для аутентификации Kerberos
| Плагин или файл | Имя плагина или файла |
|---|---|
| Серверный плагин | authentication_kerberos |
| Клиентский плагин | authentication_kerberos_client |
| Файл библиотеки |
authentication_kerberos.so, authentication_kerberos_client.so
|
Серверный Kerberos-плагин аутентификации включен только в MySQL Enterprise Edition. Он не включен в дистрибутивы MySQL Community. Клиентский плагин включен во все дистрибутивы, включая Community. Это позволяет клиентам из любого дистрибутива подключаться к серверу, на котором загружен серверный плагин.
В следующих разделах содержатся сведения об установке и использовании, специфичные для Kerberos-подключаемой аутентификации:
Дополнительную информацию об аутентификации с подключаемыми плагинами в MySQL см. в Разделе 8.2.17, «Подключаемая аутентификация».
Предварительные условия для Kerberos-подключаемой аутентификации
Для использования Kerberos-подключаемой аутентификации для MySQL необходимо выполнить следующие предварительные условия:
Должен быть доступен Kerberos-сервис для взаимодействия с плагинами аутентификации Kerberos.
Каждый пользователь Kerberos (принцип), подлежащий аутентификации MySQL, должен быть представлен в базе данных, управляемой сервером KDC.
Библиотека Kerberos-клиента должна быть доступна на системах, где используется серверный или клиентский плагин аутентификации Kerberos. Кроме того, для доступа к аутентификации Kerberos используется GSSAPI, поэтому должна быть доступна библиотека GSSAPI.
Как работает аутентификация MySQL-пользователей с помощью Kerberos
В этом разделе описывается, как MySQL и Kerberos взаимодействуют для аутентификации MySQL-пользователей. Примеры настройки MySQL-аккаунтов для использования плагинов аутентификации Kerberos см. в разделе об использовании Kerberos-плагина аутентификации.
Предполагается знание концепций и работы Kerberos. В следующем списке кратко определены некоторые распространённые термины Kerberos. Также полезным может оказаться раздел глоссария в RFC 4120.
-
: Имя сущности, например, пользователя или сервера. В этом обсуждении часто встречаются некоторые термины, связанные с принципалом:
: Имя принципала сервиса; имя принципала, представляющего сервис.
: Имя принципала пользователя; имя принципала, представляющего пользователя.
-
: Центр распределения ключей, состоящий из AS и TGS:
: Сервер аутентификации; предоставляет начальный билет-обращающий билет (TGT), необходимый для получения дополнительных билетов.
: Сервер выдачи билетов; предоставляет дополнительные билеты клиентам Kerberos, обладающим действительным TGT.
: Билет-обращающий билет; предоставляется TGS для получения билетов на доступ к сервисам.
: Сервисный билет; предоставляет доступ к сервису, например, предоставляемому MySQL-сервером.
Для аутентификации с использованием Kerberos требуется сервер KDC, например, предоставляемый Microsoft Active Directory.
Аутентификация Kerberos в MySQL использует Generic Security Service Application Program Interface (GSSAPI), который представляет собой абстрактный интерфейс безопасности. Kerberos является примером конкретного протокола безопасности, который может использоваться через этот абстрактный интерфейс. Используя GSSAPI, приложения авторизуются в Kerberos для получения учетных данных сервиса, затем используют эти учетные данные для обеспечения безопасного доступа к другим сервисам.
В Windows плагин аутентификации authentication_kerberos_client поддерживает два режима, которые пользователь клиента может установить во время выполнения или указать в файле опций:
Режим
SSPI: Security Support Provider Interface (SSPI) реализует GSSAPI (см. Команды для клиентов Windows в режиме SSPI). SSPI, хотя и совместим с GSSAPI на уровне передачи данных, поддерживает только сценарий единого входа Windows и конкретно относится к вошедшему в систему пользователю. SSPI является стандартным режимом для большинства клиентов Windows.Режим
GSSAPI: Поддерживает GSSAPI через библиотеку MIT Kerberos в Windows (см. Команды для клиентов Windows в режиме GSSAPI).
С помощью плагинов аутентификации Kerberos приложения и MySQL-серверы могут использовать протокол аутентификации Kerberos для взаимной аутентификации пользователей и MySQL-сервисов. Таким образом, и пользователь, и сервер могут проверить подлинность друг друга. Пароли не передаются по сети, а сообщения протокола Kerberos защищены от перехвата и повтора.
Аутентификация Kerberos выполняется по этим шагам, где серверная и клиентская части выполняются с использованием плагинов аутентификации authentication_kerberos и authentication_kerberos_client соответственно:
MySQL-сервер отправляет клиенту приложение своё имя принципала сервиса. Этот SPN должен быть зарегистрирован в системе Kerberos и настраивается на стороне сервера с помощью системной переменной
authentication_kerberos_service_principal.-
Используя GSSAPI, клиентское приложение создаёт сеанс аутентификации Kerberos на стороне клиента и обменивается сообщениями Kerberos с KDC Kerberos:
Клиент получает билет-обращающий билет (TGT) от сервера аутентификации.
Используя TGT, клиент получает билет на доступ к сервису MySQL от сервера выдачи билетов.
Этот шаг может быть пропущен или частично пропущен, если TGT, ST или оба уже кэшированы локально. Клиент по желанию может использовать файл keytab клиента для получения TGT и ST без ввода пароля.
Используя GSSAPI, клиентское приложение представляет MySQL ST MySQL-серверу.
Используя GSSAPI, MySQL-сервер создаёт сеанс аутентификации Kerberos на стороне сервера. Сервер проверяет личность пользователя и валидность запроса пользователя. Он аутентифицирует ST с помощью ключа сервиса, настроенного в его файле keytab сервиса, чтобы определить, произошла ли аутентификация успешно или неуспешно, и возвращает результат аутентификации клиенту.
Приложения могут аутентифицироваться, используя предоставленное имя пользователя и пароль, или используя локально кэшированный TGT или ST (например, созданный с помощью kinit или подобных инструментов). Таким образом, данная разработка охватывает случаи, начиная от полностью бесклеточных и беспарольных подключений, где билеты сервиса Kerberos получают из локально хранящегося кеша Kerberos, до подключений, где предоставляются и используются как имя пользователя, так и пароль для получения действительного билета на доступ к сервису Kerberos от KDC для отправки MySQL-серверу.
Как указано в предыдущем описании, аутентификация Kerberos MySQL использует два типа файлов keytab:
На хосте клиента может использоваться файл keytab клиента для получения TGT и ST без ввода пароля. См. Параметры конфигурации клиента для аутентификации Kerberos.
На хосте MySQL-сервера файл keytab сервиса на стороне сервера используется для проверки билетов сервиса, полученных MySQL-сервером от клиентов. Имя файла keytab настраивается с помощью системной переменной
authentication_kerberos_service_key_tab.
Дополнительную информацию о файлах keytab см. в https://web.mit.edu/kerberos/krb5-latest/doc/basic/keytab_def.html.
Установка подключаемого модуля аутентификации Kerberos
В данном разделе описано, как установить серверный подключаемый модуль аутентификации Kerberos. Для общей информации об установке подключаемых модулей см. Раздел 7.6.1, «Установка и удаление подключаемых модулей».
Серверный подключаемый модуль поддерживается только на системах Linux. На системах Windows поддерживается только клиентский подключаемый модуль, который может использоваться на системе Windows для подключения к серверу Linux, использующему аутентификацию Kerberos.
Для использования сервером, библиотечный файл подключаемого модуля должен находиться в каталоге подключаемых модулей MySQL (каталог, указанный переменной системы plugin_dir). При необходимости, настройте расположение каталога подключаемых модулей, задав значение переменной plugin_dir при запуске сервера.
Базовое имя файла серверной библиотеки подключаемого модуля — authentication_kerberos. Приставка имени файла для Unix-подобных систем — .so.
Для загрузки подключаемого модуля при запуске сервера используйте опцию --plugin-load-add для указания имени библиотечного файла, содержащего подключаемый модуль. С этим методом загрузки подключаемого модуля опция должна указываться каждый раз при запуске сервера. Также укажите значения любых переменных системы, предоставляемых подключаемым модулем, которые вы хотите настроить. Подключаемый модуль предоставляет эти переменные системы, позволяя настроить его работу:
authentication_kerberos_service_principal: Имя основного принципала службы MySQL (SPN). Это имя отправляется клиентам, пытающимся пройти аутентификацию с использованием Kerberos. SPN должен присутствовать в базе данных, управляемой сервером KDC. По умолчанию —mysql/.host_name@realm_name-
authentication_kerberos_service_key_tab: Файл keytab для аутентификации билетов, полученных от клиентов. Этот файл должен существовать и содержать действительный ключ для SPN, иначе аутентификация клиентов не удастся. По умолчанию —mysql.keytabв каталоге данных.
Подробную информацию обо всех переменных системы аутентификации Kerberos см. в Разделе 8.4.1.13, «Переменные системы подключаемых модулей аутентификации».
Для загрузки и настройки подключаемого модуля поместите строки, подобные этим, в ваш файл my.cnf, используя значения переменных системы, подходящие для вашей установки:
[mysqld]
plugin-load-add=authentication_kerberos.so
authentication_kerberos_service_principal=mysql/krbauth.example.com@MYSQL.LOCAL
authentication_kerberos_service_key_tab=/var/mysql/data/mysql.keytab
После изменения файла my.cnf перезапустите сервер, чтобы новые настройки вступили в силу.
В качестве альтернативы, для загрузки подключаемого модуля во время выполнения используйте это утверждение:
INSTALL PLUGIN authentication_kerberos
SONAME 'authentication_kerberos.so';
INSTALL PLUGIN загружает подключаемый модуль немедленно и также регистрирует его в таблице системы mysql.plugins, чтобы сервер загружал его при каждом последующем нормальном запуске без необходимости в --plugin-load-add.
При установке подключаемого модуля во время выполнения без настройки его переменных системы в файле my.cnf, переменная системы authentication_kerberos_service_key_tab устанавливается на значение по умолчанию mysql.keytab в каталоге данных. Значение этой переменной не может быть изменено во время выполнения, поэтому, если вам нужно указать другой файл, вам необходимо добавить настройку в файл my.cnf и затем перезапустить сервер MySQL. Например:
[mysqld]
authentication_kerberos_service_key_tab=/var/mysql/data/mysql.keytab
Если файл keytab находится не в нужном месте или не содержит действительный ключ SPN, сервер MySQL не проверяет это, но клиенты возвращают ошибки аутентификации до тех пор, пока проблема не будет исправлена.
Переменную системы authentication_kerberos_service_principal можно установить и сохранить во время выполнения без перезапуска сервера, используя оператор SET
PERSIST:
SET PERSIST authentication_kerberos_service_principal='mysql/krbauth.example.com@MYSQL.LOCAL';
SET
PERSIST устанавливает значение для работающего экземпляра MySQL. Он также сохраняет значение, заставляя его переноситься на последующие перезагрузки сервера. Чтобы изменить значение для работающего экземпляра MySQL, без переноса его на последующие перезагрузки, используйте ключевое слово GLOBAL вместо PERSIST. См. Раздел 15.7.6.1, «Синтаксис SET для присвоения переменной».
Для проверки установки подключаемого модуля, проверьте таблицу Схемы информации PLUGINS или используйте оператор SHOW PLUGINS (см. Раздел 7.6.2, «Получение информации о подключаемых модулях сервера»). Например:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME = 'authentication_kerberos';
+-------------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------------------+---------------+
| authentication_kerberos | ACTIVE |
+-------------------------+---------------+
Если подключаемый модуль не может инициализироваться, проверьте журнал ошибок сервера на наличие диагностических сообщений.
Для связывания учетных записей MySQL с подключаемым модулем Kerberos см. Использование подключаемого модуля аутентификации Kerberos.
Использование подключаемой аутентификации Kerberos
В этом разделе описывается, как разрешить учетным записям MySQL подключаться к серверу MySQL с использованием подключаемой аутентификации Kerberos. Предполагается, что сервер работает с включенным плагином на стороне сервера, как описано в Установка подключаемой аутентификации Kerberos, и что плагин на стороне клиента доступен на клиентском хосте.
Проверка доступности Kerberos
В следующем примере показано, как проверить доступность Kerberos в Active Directory. В примере делаются следующие предположения:
Active Directory работает на хосте с именем
krbauth.example.comс IP-адресом198.51.100.11.Аутентификация Kerberos, связанная с MySQL, использует домен
MYSQL.LOCAL, а также используетMYSQL.LOCALв качестве имени пространства имен.Принципал с именем
karl@MYSQL.LOCALзарегистрирован в KDC. (В последующем обсуждении это имя принципала связывается с учетной записью MySQL, которая выполняет аутентификацию на сервере MySQL с использованием Kerberos.)
При выполнении этих условий выполните следующую процедуру:
-
Убедитесь, что библиотека Kerberos установлена и правильно настроена в операционной системе. Например, для настройки домена и пространства имен
MYSQL.LOCALдля использования во время аутентификации MySQL, файл конфигурации Kerberos/etc/krb5.confдолжен содержать что-то подобное:[realms] MYSQL.LOCAL = { kdc = krbauth.example.com admin_server = krbauth.example.com default_domain = MYSQL.LOCAL } -
Возможно, потребуется добавить запись в
/etc/hostsдля хоста сервера:198.51.100.11 krbauth krbauth.example.com
-
Проверьте, работает ли аутентификация Kerberos правильно:
-
Используйте kinit для аутентификации в Kerberos:
$>
kinit karl@MYSQL.LOCALPassword for karl@MYSQL.LOCAL:(enter password here)Команда выполняет аутентификацию для принципала Kerberos с именем
karl@MYSQL.LOCAL. Введите пароль принципала, когда команда запросит его. KDC возвращает TGT, который кэшируется на стороне клиента для использования другими приложениями, поддерживающими Kerberos. -
Используйте klist для проверки того, был ли TGT получен правильно. Вывод должен быть похож на это:
$> klist Ticket cache: FILE:/tmp/krb5cc_244306 Default principal: karl@MYSQL.LOCAL Valid starting Expires Service principal 03/23/2021 08:18:33 03/23/2021 18:18:33 krbtgt/MYSQL.LOCAL@MYSQL.LOCAL
-
Создание учетной записи MySQL, использующей аутентификацию Kerberos
Аутентификация MySQL с использованием плагина аутентификации authentication_kerberos основана на имени пользователя Kerberos (UPN). В приведенных здесь инструкциях предполагается, что пользователь MySQL с именем karl выполняет аутентификацию в MySQL с использованием Kerberos, что пространство имен Kerberos называется MYSQL.LOCAL, и что имя принципала пользователя — karl@MYSQL.LOCAL. Это UPN должно быть зарегистрировано в нескольких местах:
Администратор Kerberos должен зарегистрировать имя пользователя как принципала Kerberos. Это имя включает в себя имя пространства имен. Клиенты используют имя принципала и пароль для аутентификации с Kerberos и получения билета предоставления билетов (TGT).
Администратор баз данных MySQL должен создать учетную запись, соответствующую имени принципала Kerberos и использующую плагин Kerberos для аутентификации.
Предположим, что имя принципала пользователя Kerberos было зарегистрировано соответствующим администратором службы и что, как описано ранее в Установка подключаемой аутентификации Kerberos, сервер MySQL был запущен с соответствующими параметрами конфигурации для плагина Kerberos на стороне сервера. Чтобы создать учетную запись MySQL, соответствующую UPN , администратор баз данных MySQL использует оператор, подобный этому: user@realm_name
CREATE USER user
IDENTIFIED WITH authentication_kerberos
BY 'realm_name';
Учетная запись, указанная user, может включать или не включать часть имени хоста. Если имя хоста опущено, оно по умолчанию принимает значение %, как обычно. realm_name сохраняется как значение authentication_string для учетной записи в системной таблице mysql.user.
Чтобы создать учетную запись MySQL, соответствующую UPN karl@MYSQL.LOCAL, используйте это утверждение:
CREATE USER 'karl'
IDENTIFIED WITH authentication_kerberos
BY 'MYSQL.LOCAL';
Если MySQL должен создать UPN для этой учетной записи, например, для получения или проверки билетов (TGT или ST), он делает это, объединяя имя учетной записи (игнорируя любую часть имени хоста) и имя пространства имен. Например, полное имя учетной записи, полученное из предыдущего оператора CREATE USER, — это 'karl'@'%'. MySQL создает UPN из части имени пользователя karl (игнорируя часть имени хоста) и имени пространства имен MYSQL.LOCAL, чтобы получить karl@MYSQL.LOCAL.
Обратите внимание, что при создании учетной записи, которая выполняет аутентификацию с использованием authentication_kerberos, оператор CREATE USER не включает пространство имен UPN в имя пользователя. Вместо этого укажите пространство имен (MYSQL.LOCAL в данном случае) в качестве строки аутентификации в предложении BY. Это отличается от создания учетных записей, которые используют плагин аутентификации SASL LDAP authentication_ldap_sasl с методом аутентификации GSSAPI/Kerberos. Для таких учетных записей оператор CREATE USER включает пространство имен UPN в имя пользователя. См. Создание учетной записи MySQL, использующей GSSAPI/Kerberos для аутентификации LDAP.
После настройки учетной записи клиенты могут использовать ее для подключения к серверу MySQL. Порядок действий зависит от того, работает ли клиентский хост под управлением Linux или Windows, как указано в следующем обсуждении.
Использование authentication_kerberos подчиняется ограничению, согласно которому UPN с одинаковой пользовательской частью, но разной частью пространства имен, не поддерживаются. Например, нельзя создавать учетные записи MySQL, соответствующие обоим этим UPN:
kate@MYSQL.LOCAL
kate@EXAMPLE.COM
Оба UPN имеют пользовательскую часть kate, но отличаются частью пространства имен (MYSQL.LOCAL против EXAMPLE.COM). Это запрещено.
Использование учетной записи MySQL для подключения к серверу MySQL
После настройки учетной записи MySQL, которая выполняет аутентификацию с использованием Kerberos, клиенты могут использовать ее для подключения к серверу MySQL следующим образом:
Выполните аутентификацию в Kerberos с использованием имени принципала пользователя (UPN) и его пароля для получения билета предоставления билетов (TGT).
Используйте TGT для получения билета службы (ST) для MySQL.
Выполните аутентификацию на сервере MySQL, предоставив MySQL ST.
Первый шаг (аутентификация в Kerberos) может быть выполнен различными способами:
-
До подключения к MySQL:
В Linux или в Windows в режиме
GSSAPIвызовите kinit для получения TGT и сохранения его в кэше учетных данных Kerberos.В Windows в режиме
SSPIаутентификация, возможно, уже была выполнена во время входа в систему, что сохраняет TGT для вошедшего в систему пользователя в кэше памяти Windows. kinit не используется, и кэша Kerberos нет.
-
При подключении к MySQL сама клиентская программа может получить TGT, если она может определить необходимый UPN Kerberos и пароль:
Эта информация может поступать из таких источников, как параметры командной строки или операционная система.
В Linux клиенты также могут использовать файл keytab или файл конфигурации
/etc/krb5.conf. Клиенты Windows в режимеGSSAPIиспользуют файл конфигурации. Клиенты Windows в режимеSSPIне используют ни то, ни другое.
Подробные сведения о клиентских командах для подключения к серверу MySQL различаются для Linux и Windows, поэтому каждый тип хоста рассматривается отдельно, но эти свойства команд применимы независимо от типа хоста:
-
Каждый показанный команд включает следующие опции, но каждая из них может быть опущена при определенных условиях:
Опция
--default-authуказывает имя плагина аутентификации на стороне клиента (authentication_kerberos_client). Эта опция может быть опущена, если указана опция--user, так как в этом случае MySQL может определить плагин по информации об учетной записи пользователя, отправленной сервером MySQL.Опция
--plugin-dirуказывает клиенту расположение плагинаauthentication_kerberos_client. Эту опцию можно опустить, если плагин установлен в стандартном (встроенном) месте.
Команды также должны содержать любые другие опции, такие как
--hostили--port, необходимые для указания сервера MySQL, к которому нужно подключиться.Введите каждую команду в отдельной строке. Если команда включает опцию
--passwordдля запроса пароля, введите пароль UPN Kerberos, связанного с пользователем MySQL, когда будет запрошен.
Команды подключения для клиентов Linux
В Linux соответствующая команда клиента для подключения к серверу MySQL зависит от того, аутентифицируется ли команда с помощью TGT из кэша Kerberos или на основе опций команды для имени пользователя MySQL и пароля UPN:
-
Перед вызовом программы MySQL клиент может самостоятельно получить TGT от KDC. Например, пользователь клиента может использовать kinit для аутентификации в Kerberos, предоставив имя принципала Kerberos и пароль принципала:
$>
kinit karl@MYSQL.LOCALPassword for karl@MYSQL.LOCAL:(enter password here)Результирующий TGT для UPN кэшируется и становится доступным для других поддерживающих Kerberos приложений, таких как программы, использующие плагин аутентификации Kerberos на стороне клиента. В этом случае вызовите клиента без указания опций имени пользователя или пароля:
mysql --default-auth=authentication_kerberos_client --plugin-dir=
path/to/plugin/directoryПлагин на стороне клиента находит TGT в кэше, использует его для получения MySQL ST и использует ST для аутентификации на сервере MySQL.
Как только что описано, когда TGT для UPN кэшируется, опции имени пользователя и пароля не нужны в команде клиента. Если эти опции все же присутствуют, они обрабатываются следующим образом:
-
Эта команда включает опцию имени пользователя:
mysql --default-auth=authentication_kerberos_client --plugin-dir=
path/to/plugin/directory--user=karlВ этом случае аутентификация завершается неудачно, если имя пользователя, указанное в опции, не совпадает с частью имени пользователя UPN в TGT.
-
Эта команда включает опцию пароля, которую вы вводите при запросе:
mysql --default-auth=authentication_kerberos_client --plugin-dir=
path/to/plugin/directory--passwordВ этом случае плагин на стороне клиента игнорирует пароль. Поскольку аутентификация основана на TGT, она может быть успешной даже если предоставленный пользователем пароль неверен. По этой причине плагин выводит предупреждение, если найден действительный TGT, который приводит к игнорированию пароля.
-
-
Если кэш Kerberos не содержит TGT, плагин аутентификации Kerberos на стороне клиента может получить TGT от KDC. Вызовите клиента с опциями для имени пользователя MySQL и пароля, а затем введите пароль UPN при запросе:
mysql --default-auth=authentication_kerberos_client --plugin-dir=
path/to/plugin/directory--user=karl --passwordПлагин аутентификации Kerberos на стороне клиента объединяет имя пользователя (
karl) и домен, указанный в учетной записи пользователя (MYSQL.LOCAL), для построения UPN (karl@MYSQL.LOCAL). Плагин на стороне клиента использует UPN и пароль для получения TGT, TGT для получения MySQL ST и ST для аутентификации на сервере MySQL.Или, предположим, что кэш Kerberos не содержит TGT, а команда указывает опцию пароля, но не опцию имени пользователя:
mysql --default-auth=authentication_kerberos_client --plugin-dir=
path/to/plugin/directory--passwordПлагин аутентификации Kerberos на стороне клиента использует имя пользователя операционной системы в качестве имени пользователя MySQL. Он объединяет это имя пользователя и домен в учетной записи пользователя MySQL для построения UPN. Плагин на стороне клиента использует UPN и пароль для получения TGT, использует TGT для получения MySQL ST и использует ST для аутентификации на сервере MySQL.
Если вы не уверены в существовании TGT, вы можете использовать klist для проверки.
Когда плагин аутентификации Kerberos на стороне клиента сам получает TGT, пользователь клиента может не захотеть, чтобы TGT использовался повторно. Как описано в Параметрах конфигурации клиента для аутентификации Kerberos, локальный файл /etc/krb5.conf можно использовать, чтобы заставить плагин на стороне клиента уничтожать TGT после использования.
Команды подключения для клиентов Windows в режиме SSPI
В Windows, используя стандартную опцию плагина клиента (SSPI), соответствующая команда клиента для подключения к серверу MySQL зависит от того, выполняется ли аутентификация на основе опций команды для имени пользователя MySQL и пароля UPN или используется TGT из кэша Windows в памяти. Подробности о режиме GSSAPI в Windows см. в Команды для клиентов Windows в режиме GSSAPI.
Команда может явно указать опции для имени пользователя MySQL и пароля UPN, или же эти опции можно опустить:
-
Эта команда включает опции для имени пользователя MySQL и пароля UPN:
mysql --default-auth=authentication_kerberos_client --plugin-dir=
path/to/plugin/directory--user=karl --passwordПлагин аутентификации Kerberos на стороне клиента объединяет имя пользователя (
karl) и домен, указанный в учетной записи пользователя (MYSQL.LOCAL), для построения UPN (karl@MYSQL.LOCAL). Плагин на стороне клиента использует UPN и пароль для получения TGT, использует TGT для получения MySQL ST и использует ST для аутентификации на сервере MySQL.Любая информация в кэше Windows в памяти игнорируется; значения опций имени пользователя и пароля имеют приоритет.
-
Эта команда включает опцию пароля UPN, но не опцию имени пользователя MySQL:
mysql --default-auth=authentication_kerberos_client --plugin-dir=
path/to/plugin/directory--passwordПлагин аутентификации Kerberos на стороне клиента использует имя вошедшего в систему пользователя в качестве имени пользователя MySQL и объединяет это имя пользователя и домен в учетной записи пользователя MySQL для построения UPN. Плагин на стороне клиента использует UPN и пароль для получения TGT, использует TGT для получения MySQL ST и использует ST для аутентификации на сервере MySQL.
-
Эта команда не включает опции для имени пользователя MySQL или пароля UPN:
mysql --default-auth=authentication_kerberos_client --plugin-dir=
path/to/plugin/directoryПлагин получает TGT из кэша Windows в памяти, использует TGT для получения MySQL ST и использует ST для аутентификации на сервере MySQL.
Этот подход требует, чтобы хост клиента входил в домен Windows Server Active Directory (AD). Если это не так, помогите клиенту MySQL определить IP-адрес домена AD, введя вручную сервер и домен AD в качестве DNS-сервера и префикса:
Запустите
console.exeи выберите Центр управления сетями и общим доступом.В боковой панели окна Центра управления сетями и общим доступом выберите Изменение параметров адаптера.
В окне Сетевые подключения щелкните правой кнопкой мыши соединение сети или VPN для настройки и выберите .
На вкладке Сеть найдите и щелкните Протокол Интернета версии 4 (TCP/IPv4), а затем щелкните .
В диалоговом окне Свойства Протокол Интернета версии 4 (TCP/IPv4) щелкните . Откроется диалоговое окно Дополнительные параметры TCP/IP.
На вкладке DNS добавьте сервер и домен Active Directory в качестве DNS-сервера и префикса.
-
Эта команда включает опцию для имени пользователя MySQL, но не для пароля UPN:
mysql --default-auth=authentication_kerberos_client --plugin-dir=
path/to/plugin/directory--user=karlПлагин аутентификации Kerberos на стороне клиента сравнивает имя, указанное в опции имени пользователя, с именем вошедшего в систему пользователя. Если имена совпадают, плагин использует TGT вошедшего в систему пользователя для аутентификации. Если имена отличаются, аутентификация завершается неудачно.
Команды подключения для клиентов Windows в режиме GSSAPI
В Windows пользователь клиента должен явно указать режим GSSAPI, используя опцию плагина plugin_authentication_kerberos_client_mode, чтобы включить поддержку через библиотеку MIT Kerberos. По умолчанию используется режим SSPI (см. Команды для клиентов Windows в режиме SSPI).
Возможно указать режим GSSAPI:
-
Перед вызовом программы MySQL-клиента в файле параметров. Имя переменной плагина допустимо с использованием как подчеркиваний, так и дефисов:
[mysql] plugin_authentication_kerberos_client_mode=GSSAPI
Или:
[mysql] plugin-authentication-kerberos-client-mode=GSSAPI
-
Во время выполнения из командной строки с использованием программ-клиентов mysql или mysqldump. Например, следующие команды (с подчеркиваниями или дефисами) заставляют mysql подключиться к серверу через библиотеку MIT Kerberos в Windows.
mysql
[connection-options]--plugin_authentication_kerberos_client_mode=GSSAPIИли:
mysql
[connection-options]--plugin-authentication-kerberos-client-mode=GSSAPI -
Пользователи клиентов могут выбрать режим
GSSAPIиз MySQL Workbench и некоторых MySQL-коннекторов. На клиентских хостах под управлением Windows можно переопределить расположение по умолчанию:Файла конфигурации Kerberos, установив переменную среды
KRB5_CONFIG.Имени кэша данных по умолчанию с помощью переменной среды
KRB5CCNAME(например,KRB5CCNAME=DIR:/mydir/).
Для получения специфической информации о плагинах на стороне клиента см. документацию по адресу https://dev.mysql.com/doc/.
Соответствующая команда клиента для подключения к серверу MySQL зависит от того, использует ли команда аутентификацию с помощью TGT из кэша MIT Kerberos или на основе параметров команды для имени пользователя MySQL и пароля UPN. Поддержка GSSAPI через библиотеку MIT в Windows аналогична поддержке GSSAPI в Linux (см. Команды для клиентов Linux), за исключением следующих моментов:
Токены всегда извлекаются из или помещаются в кэш MIT Kerberos на хостах под управлением Windows.
kinit выполняется с функциональными учетными записями в Windows, которые имеют ограниченные права и определённые роли. Пользователь клиента не знает пароль kinit. Для обзора см. .
Если пользователь клиента предоставляет пароль, библиотека MIT Kerberos в Windows решает, использовать его или полагаться на существующий токен.
Параметр
destroy_tickets, описанный в Параметры конфигурации клиента для аутентификации Kerberos, не поддерживается, потому что библиотека MIT Kerberos в Windows не поддерживает требуемый член API (get_profile_boolean) для чтения его значения из файла конфигурации.
Параметры конфигурации клиента для аутентификации Kerberos
Этот раздел применим только для клиентских хостов под управлением Linux, а не клиентских хостов под управлением Windows.
Клиентский хост под управлением Windows с плагином Kerberos на стороне клиента, установленным в режим GSSAPI, в целом поддерживает параметры конфигурации клиента, но библиотека MIT Kerberos в Windows не поддерживает параметр destroy_tickets, описанный в этом разделе.
Если в момент вызова приложения MySQL-клиента действительный токен (TGT) не существует, само приложение может получить и кэшировать TGT. Если в процессе аутентификации Kerberos клиентское приложение вызывает кэширование TGT, любой такой TGT, который был добавлен, может быть уничтожен после того, как он больше не нужен, путём установки соответствующего параметра конфигурации.
Плагин Kerberos на стороне клиента authentication_kerberos_client считывает локальный файл /etc/krb5.conf. Если этот файл отсутствует или недоступен, возникает ошибка. Предполагая, что файл доступен, он может содержать необязательный раздел [appdefaults] для предоставления информации, используемой плагином. Разместите информацию в части mysql раздела. Например:
[appdefaults]
mysql = {
destroy_tickets = true
}
Плагин клиента распознаёт эти параметры в разделе mysql:
Значение
destroy_ticketsуказывает, уничтожает ли плагин клиента TGT после получения и использования. По умолчанию,destroy_tickets—false, но может быть установлено вtrue, чтобы избежать повторного использования TGT. (Это значение применяется только к TGT, созданным плагином клиента, а не к TGT, созданным другими плагинами или внешне для MySQL.)
На клиентском хосте может использоваться файл ключей клиента, чтобы получить TGT и TS без предоставления пароля. Дополнительную информацию о файлах ключей см. в https://web.mit.edu/kerberos/krb5-latest/doc/basic/keytab_def.html.
Отладка аутентификации Kerberos
Переменная среды AUTHENTICATION_KERBEROS_CLIENT_LOG включает или отключает вывод отладочной информации для аутентификации Kerberos.
Несмотря на CLIENT в названии AUTHENTICATION_KERBEROS_CLIENT_LOG, та же переменная среды применяется как к плагину на стороне сервера, так и к плагину на стороне клиента.
На стороне сервера допустимые значения — 0 (выкл) и 1 (вкл). Сообщения протоколируются в журнале ошибок сервера, в соответствии с уровнем подробности ведения журнала ошибок сервера. Например, если вы используете фильтрацию журналов на основе приоритета, переменная системы log_error_verbosity управляет подробностью, как описано в разделе 7.4.2.5, «Фильтрация журнала ошибок на основе приоритета (log_filter_internal)».
На стороне клиента допустимые значения — от 1 до 5, и они записываются в стандартный вывод ошибок. В следующей таблице показано значение каждого значения уровня журналов.
| Уровень журнала | Значение |
|---|---|
| 1 или не установлено | Без ведения журнала |
| 2 | Сообщения об ошибках |
| 3 | Сообщения об ошибках и предупреждениях |
| 4 | Сообщения об ошибках, предупреждениях и информации |
| 5 | Сообщения об ошибках, предупреждениях, информации и отладки |
© 2025 Oracle
Licensed under the GPLv2 License.