Spec-Zone.ru › MySQL 8.4

8.4.1.8 Подключаемая аутентификация Kerberos

Примечание

Подключаемая аутентификация Kerberos — это расширение, включенное в MySQL Enterprise Edition, коммерческий продукт. Чтобы узнать больше о коммерческих продуктах, посетите https://www.mysql.com/products/.

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

Этот метод аутентификации доступен в MySQL 8.4 для MySQL серверов и клиентов на Linux. Он полезен в средах Linux, где приложения имеют доступ к Microsoft Active Directory, в котором Kerberos включен по умолчанию. Плагин для клиента также поддерживается на Windows. Плагин для сервера по-прежнему поддерживается только на Linux.

Подключаемая аутентификация Kerberos предоставляет следующие возможности:

  • Внешняя аутентификация: аутентификация Kerberos позволяет MySQL Server принимать подключения от пользователей, определенных вне таблиц привилегий MySQL, которые получили соответствующие билеты Kerberos.

  • Безопасность: Kerberos использует билеты вместе с симметричным шифрованием, что позволяет выполнять аутентификацию без передачи паролей по сети. Аутентификация Kerberos поддерживает сценарии без пользователей и без паролей.

В следующей таблице показаны имена плагинов и файлов библиотек. Название файла может отличаться в вашей системе. Файл должен находиться в каталоге, указанном переменной системы plugin_dir. Сведения об установке см. в разделе Установка подключаемой аутентификации Kerberos.

Таблица 8.23 Имена плагинов и библиотек для аутентификации Kerberos

Таблица 8.23 Имена плагинов и библиотек для аутентификации 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 (либо для сервера, либо для клиента). Кроме того, GSSAPI используется в качестве интерфейса для доступа к аутентификации Kerberos, поэтому должна быть доступна библиотека 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 Pluggable Authentication

В этом разделе описано, как установить плагин аутентификации Kerberos на стороне сервера. Для получения общей информации об установке плагинов см. Раздел 7.6.1, «Установка и удаление плагинов».

Примечание

Плагин на стороне сервера поддерживается только на системах Linux. На системах Windows поддерживается только плагин на стороне клиента, который может использоваться на Windows-системах для подключения к Linux-серверу, использующему аутентификацию Kerberos.

Для использования плагином сервера, файл библиотеки плагина должен находиться в каталоге плагинов MySQL (каталог, указанный переменной системы plugin_dir). При необходимости, настройте расположение каталога плагинов, задав значение plugin_dir во время запуска сервера.

Имя базового файла библиотеки плагина на стороне сервера — authentication_kerberos. Файл имеет суффикс .so для Unix-подобных систем.

Для загрузки плагина при запуске сервера используйте опцию --plugin-load-add для указания имени файла библиотеки, содержащей плагин. При использовании этого метода загрузки плагина опцию необходимо указывать каждый раз при запуске сервера. Также необходимо указать значения для любых системных переменных, предоставляемых плагином, которые вы хотите настроить. Плагин предоставляет следующие системные переменные, позволяющие настроить его работу:

  • authentication_kerberos_service_principal: Имя основного принципала (SPN) сервиса MySQL. Это имя отправляется клиентам, которые пытаются пройти аутентификацию с помощью 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).

  • DBA MySQL должен создать учетную запись, соответствующую имени принципала Kerberos и использующую плагин Kerberos для аутентификации.

Предположим, что имя пользователя Kerberos было зарегистрировано соответствующим администратором службы и что, как описано ранее в Установка подключаемой аутентификации Kerberos, сервер MySQL был запущен с соответствующими настройками конфигурации для плагина Kerberos на стороне сервера. Чтобы создать учетную запись MySQL, соответствующую UPN user@realm_name, DBA 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, предоставив ST MySQL.

Первый шаг (аутентификация в 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-8.4-en/kerberos-pluggable-authentication.html

Spec-Zone.ru

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