Spec-Zone.ru › MySQL 9.2

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

Таблица 8.22 Имена плагинов и библиотек для аутентификации Kerberos
Плагин или файл Имя плагина или файла
Серверный плагин authentication_kerberos
Клиентский плагин authentication_kerberos_client
Файл библиотеки authentication_kerberos.so, authentication_kerberos_client.so

Серверный Kerberos-плагин аутентификации включен только в MySQL Enterprise Edition. Он не включен в дистрибутивы MySQL Community. Клиентский плагин включен во все дистрибутивы, включая Community. Это позволяет клиентам из любого дистрибутива подключаться к серверу, на котором загружен серверный плагин.

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

  • Предварительные условия для Kerberos-подключаемой аутентификации

  • Как работает аутентификация Kerberos MySQL пользователей

  • Установка Kerberos-подключаемой аутентификации

  • Использование Kerberos-подключаемой аутентификации

  • Отладка аутентификации Kerberos

Дополнительную информацию об аутентификации с подключаемыми плагинами в MySQL см. в Разделе 8.2.17, «Подключаемая аутентификация».

Предварительные условия для Kerberos-подключаемой аутентификации

Для использования Kerberos-подключаемой аутентификации для MySQL необходимо выполнить следующие предварительные условия:

  • Должен быть доступен Kerberos-сервис для взаимодействия с плагинами аутентификации Kerberos.

  • Каждый пользователь Kerberos (принцип), подлежащий аутентификации MySQL, должен быть представлен в базе данных, управляемой сервером KDC.

  • Библиотека Kerberos-клиента должна быть доступна на системах, где используется серверный или клиентский плагин аутентификации Kerberos. Кроме того, для доступа к аутентификации Kerberos используется GSSAPI, поэтому должна быть доступна библиотека GSSAPI.

END_OF_DOCUMENT_MARKER
Как работает аутентификация 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 соответственно:

  1. MySQL-сервер отправляет клиенту приложение своё имя принципала сервиса. Этот SPN должен быть зарегистрирован в системе Kerberos и настраивается на стороне сервера с помощью системной переменной authentication_kerberos_service_principal.

  2. Используя GSSAPI, клиентское приложение создаёт сеанс аутентификации Kerberos на стороне клиента и обменивается сообщениями Kerberos с KDC Kerberos:

    • Клиент получает билет-обращающий билет (TGT) от сервера аутентификации.

    • Используя TGT, клиент получает билет на доступ к сервису MySQL от сервера выдачи билетов.

    Этот шаг может быть пропущен или частично пропущен, если TGT, ST или оба уже кэшированы локально. Клиент по желанию может использовать файл keytab клиента для получения TGT и ST без ввода пароля.

  3. Используя GSSAPI, клиентское приложение представляет MySQL ST MySQL-серверу.

  4. Используя 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

  • Создание учетной записи MySQL, использующей аутентификацию Kerberos

  • Использование учетной записи MySQL для подключения к серверу MySQL

  • Параметры конфигурации клиента для аутентификации 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.)

При выполнении этих условий выполните следующую процедуру:

  1. Убедитесь, что библиотека Kerberos установлена и правильно настроена в операционной системе. Например, для настройки домена и пространства имен MYSQL.LOCAL для использования во время аутентификации MySQL, файл конфигурации Kerberos /etc/krb5.conf должен содержать что-то подобное:

    [realms]
      MYSQL.LOCAL = {
        kdc = krbauth.example.com
        admin_server = krbauth.example.com
        default_domain = MYSQL.LOCAL
      }
    
  2. Возможно, потребуется добавить запись в /etc/hosts для хоста сервера:

    198.51.100.11 krbauth krbauth.example.com
    
  3. Проверьте, работает ли аутентификация Kerberos правильно:

    1. Используйте kinit для аутентификации в Kerberos:

      $> kinit karl@MYSQL.LOCAL
      Password for karl@MYSQL.LOCAL: (enter password here)
      

      Команда выполняет аутентификацию для принципала Kerberos с именем karl@MYSQL.LOCAL. Введите пароль принципала, когда команда запросит его. KDC возвращает TGT, который кэшируется на стороне клиента для использования другими приложениями, поддерживающими Kerberos.

    2. Используйте 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 user@realm_name, администратор баз данных MySQL использует оператор, подобный этому:

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 следующим образом:

  1. Выполните аутентификацию в Kerberos с использованием имени принципала пользователя (UPN) и его пароля для получения билета предоставления билетов (TGT).

  2. Используйте TGT для получения билета службы (ST) для MySQL.

  3. Выполните аутентификацию на сервере 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.LOCAL
    Password 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-сервера и префикса:

    1. Запустите console.exe и выберите Центр управления сетями и общим доступом.

    2. В боковой панели окна Центра управления сетями и общим доступом выберите Изменение параметров адаптера.

    3. В окне Сетевые подключения щелкните правой кнопкой мыши соединение сети или VPN для настройки и выберите Свойства.

    4. На вкладке Сеть найдите и щелкните Протокол Интернета версии 4 (TCP/IPv4), а затем щелкните Свойства.

    5. В диалоговом окне Свойства Протокол Интернета версии 4 (TCP/IPv4) щелкните Дополнительно. Откроется диалоговое окно Дополнительные параметры TCP/IP.

    6. На вкладке 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.
https://docs.oracle.com/cd/E17952_01/mysql-9.2-en/kerberos-pluggable-authentication.html

Spec-Zone.ru

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