MySQL8认证插件——Kerberos Pluggable Authentication

Kerberos可插拔身份验证是商业产品MySQL Enterprise Edition中包含的扩展。

MySQL Enterprise Edition支持一种身份验证方法,该方法允许用户使用Kerberos对MySQL Server进行身份验证,前提是可以获得适当的Kerberos票证。

此身份验证方法在MySQL 8.0.26及更高版本中可用,适用于Linux上的MySQL服务器和客户端。它在应用程序可以访问Microsoft Active Directory的Linux环境中很有用,默认情况下,Microsoft Active Directory已启用Kerberos。从MySQL 8.0.27(用于MIT Kerberos的MySQL 8.0.32)开始,客户端插件在Windows上也受支持。服务器端插件仍然仅在Linux上受支持。

Kerberos可插拔身份验证提供了以下功能:

外部身份验证:Kerberos身份验证使MySQL Server能够接受来自MySQL授权表之外定义的用户的连接,这些用户已经获得了正确的Kerberos票证。

安全性:Kerberos将票证与对称密钥加密技术结合使用,在不通过网络发送密码的情况下实现身份验证。Kerberos身份验证支持无用户和无密码方案。

插件和库名称

插件或文件

插件或文件名称

Server-side plugin

authentication_kerberos

Client-side plugin

authentication_kerberos_client

Library file

authentication_kerberos.so, authentication_kerberos_client.so

服务器端Kerberos身份验证插件仅包含在MySQL Enterprise Edition中。MySQL社区发行版中没有包含它。客户端插件包含在所有发行版中,包括社区发行版。这使得来自任何分发版的客户端都可以连接到加载了服务器端插件的服务器。

Kerberos可插入身份验证的先决条件

● Kerberos服务必须可用于Kerberos身份验证插件进行通信。

● 要通过MySQL进行身份验证的每个Kerberos用户(主体)必须存在于KDC服务器管理的数据库中。

● Kerberos客户端库必须在使用服务器端或客户端Kerberos身份验证插件的系统上可用。此外,GSSAPI被用作访问Kerberos身份验证的接口,因此GSSAPI库必须可用。

MySQL用户的Kerberos身份验证是如何工作的

这里假定熟悉Kerberos的概念和操作。以下列表简要定义了几个常见的Kerberos术语。您也可能会发现RFC 4120的术语表部分很有帮助。

● 主体:一个命名的实体,例如用户或服务器。在本次讨论中,某些主要相关术语频繁出现:

■ SPN:服务主体名称;表示服务的主体的名称。

■ UPN:用户主体名称;表示用户的主体的名称。

● KDC:密钥分发中心,包括AS和TGS:

■ AS:身份验证服务器;提供获得额外门票所需的初始门票授予门票。

■ TGS:票证授予服务器;为拥有有效TGT的Kerberos客户端提供额外的票证。

● TGT:出票票;呈现给TGS以获得用于服务访问的服务票证。

● ST:服务票;提供对诸如MySQL服务器提供的服务的访问。

使用Kerberos进行身份验证需要KDC服务器,例如,由Microsoft Active Directory提供。

MySQL中的Kerberos身份验证使用通用安全服务应用程序接口(GSSAPI),这是一个安全抽象接口。Kerberos是可以通过该抽象接口使用的特定安全协议的实例。使用GSSAPI,应用程序通过Kerberos进行身份验证以获得服务凭据,然后依次使用这些凭据来实现对其他服务的安全访问。

在Windows上,
authentication_kerberos_client身份验证插件支持两种模式,客户端用户可以在运行时设置或在选项文件中指定:

● SSPI模式:安全支持提供程序接口(SSPI)实现GSSAPI(请参阅SSPI模式下用于Windows客户端的命令)。SSPI虽然在有线级别与GSSAPI兼容,但仅支持Windows单点登录方案,并专门针对已登录的用户。SSPI是大多数Windows客户端上的默认模式。

● GSSAPI模式:通过Windows上的MIT Kerberos库支持GSSAPI(请参阅GSSAPI方式下用于Windows客户端的命令)。

通过Kerberos身份验证插件,应用程序和MySQL服务器能够使用Kerberos身份验证协议来相互验证用户和MySQL服务。通过这种方式,用户和服务器都能够验证彼此的身份。不通过网络发送密码,并且Kerberos协议消息受到保护,不受窃听和重放攻击。

Kerberos身份验证遵循以下步骤,其中服务器端和客户端部分分别使用 authentication_Kerberos 和
authentication_ckerberos_client 身份验证插件执行:

1. MySQL服务器向客户端应用程序发送其服务主体名称。此SPN必须在Kerberos系统中注册,并在服务器端使用
authentication_Kerberos_service_principal 系统变量进行配置。

2. 客户端应用程序使用GSSAPI创建Kerberos客户端身份验证会话,并与Kerberos KDC交换Kerberos消息:

■ 客户端从身份验证服务器获取票证授予票证。

■ 使用TGT,客户端从票证授予服务获得MySQL的服务票证。

如果TGT、ST或两者都已在本地缓存,则可以跳过或部分跳过此步骤。客户端可以选择使用客户端keytab文件来获得TGT和ST,而无需提供密码。

3. 使用GSSAPI,客户端应用程序将MySQL ST呈现给MySQL服务器。

4. MySQL服务器使用GSSAPI创建一个Kerberos服务器端身份验证会话。服务器验证用户身份和用户请求的有效性。它使用在其服务密钥选项卡文件中配置的服务密钥对ST进行身份验证,以确定身份验证是成功还是失败,并将身份验证结果返回给客户端。

应用程序可以使用提供的用户名和密码进行身份验证,或者使用本地缓存的TGT或ST(例如,使用kinit或类似方法创建)进行身份验证。因此,该设计涵盖了从完全无用户和无密码连接(其中Kerberos服务票证是从本地存储的Kerberos缓存中获得的)到提供用户名和密码并用于从KDC获得有效Kerberos服务票证以发送到MySQL服务器的连接的各种用例。

如前所述,MySQL Kerberos身份验证使用两种keytab文件:

● 在客户端主机上,可以使用客户端keytab文件来获得TGT和ST,而无需提供密码。

● 在MySQL服务器主机上,服务器端服务keytab文件用于验证MySQL服务器从客户端收到的服务票证。keytab文件名是使用
authentication_kerberos_service_key_tab 系统变量配置的。

安装Kerberos可插入身份验证

说明:服务器端插件仅在Linux系统上受支持。在Windows系统上,仅支持客户端插件(从MySQL 8.0.27开始),该插件可以在Windows系统中用于连接到使用Kerberos身份验证的Linux服务器。

要供服务器使用,插件库文件必须位于MySQL插件目录(由 plugin_dir 系统变量命名的目录)中。如有必要,通过在服务器启动时设置 plugin_dir 的值来配置插件目录位置。

服务器端插件库文件的基本名称是authentication_kerberos。Unix和类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。

要加载并配置插件,请在my.cnf文件中放入以下行,使用适合您安装的系统变量值:

[mysqld]
plugin-load-add=authentication_kerberos.so
authentication_kerberos_service_principal=mysql/[email protected]
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/[email protected]';
SET PERSIST为正在运行的MySQL实例设置一个值。它还保存了该值,从而将其转移到随后的服务器重新启动中。要更改正在运行的MySQL实例的值而不将其转移到后续的重新启动,请使用GLOBAL关键字而不是PERSIST。

要验证插件安装,请检查Information Schema PLUGINS表或使用SHOW PLUGINS语句。例如:

mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME = 'authentication_kerberos';
+-------------------------+---------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+-------------------------+---------------+
| authentication_kerberos | ACTIVE |
+-------------------------+---------------+

如果插件无法初始化,请查看服务器错误日志中的诊断消息。

使用Kerberos可插入身份验证

本节介绍如何使用Kerberos可插拔身份验证使MySQL账户连接到MySQL服务器。假设服务器运行时启用了服务器端插件,如安装Kerberos Pluggable Authentication中所述,并且客户端插件在客户端主机上可用。

验证Kerberos可用性

以下示例显示了如何在Active Directory中测试Kerberos的可用性。该示例做出了以下假设:

● Active Directory正在名为krbauth.example.com的主机上运行,IP地址为198.51.100.11。

● MySQL相关的Kerberos身份验证使用MySQL.LOCAL域,也使用MySQL_LOCAL作为领域名称。

● 一位名叫[email protected]的主题已在KDC注册。(在后面的讨论中,此主体名称与使用Kerberos对MySQL服务器进行身份验证的MySQL账户相关联。)

在满足这些假设的情况下,遵循以下程序:

1. 请验证Kerberos库是否已在操作系统中正确安装和配置。例如,要配置MYSQL.LOCAL域和领域以便在MYSQL身份验证期间使用,/etc/krb5.conf Kerberos配置文件应该包含如下内容:

[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身份验证是否正常工作:

a. 使用kinit对Kerberos进行身份验证:

$> kinit [email protected]
Password for [email protected]: (enter password here)

该命令为名为 [email protected] 的Kerberos主体进行身份验证.当命令提示输入主体的密码时,输入该密码。KDC返回一个缓存在客户端的TGT,供其他支持Kerberos的应用程序使用。

b. 使用klist检查TGT是否正确获得。输出应与此类似:

$> klist
Ticket cache: FILE:/tmp/krb5cc_244306
Default principal: [email protected]
Valid starting Expires Service principal
03/23/2021 08:18:33 03/23/2021 18:18:33 krbtgt/[email protected]

创建使用Kerberos身份验证的MySQL账户

使用authentication_kerberos身份验证插件的MySQL身份验证基于kerberos用户主体名称(UPN)。这里的说明假设一个名为karl的MySQL用户使用Kerberos对MySQL进行身份验证,Kerberos领域名为MySQL.LOCAL,用户主体名称为[email protected].此UPN必须在以下几个地方注册:

● Kerberos管理员应该将用户名注册为Kerberos主体。此名称包括一个领域名称。客户端使用主体名称和密码通过Kerberos进行身份验证,并获得票证授予票证(TGT)。

● MySQL DBA应该创建一个与Kerberos主体名称相对应的账户,并使用Kerberos插件进行身份验证。

假设Kerberos用户主体名称已由相应的服务管理员注册,并且如前面在安装Kerberos Pluggable Authentication中所述,MySQL服务器已使用服务器端Kerberos插件的适当配置设置启动。创建一个MySQL账户,该账户对应于一个 user@realm_name 的 Kerberos UPN,MySQL DBA使用这样的语句:

CREATE USER user IDENTIFIED WITH authentication_kerberos BY 'realm_name';

由用户命名的账户可以包括或省略主机名部分。如果省略了主机名,则默认为%。realm_name 作为账户的 authentication_string 值存储在 mysql.user 系统表中。

创建与UPN相对应的MySQL账户 [email protected],请使用以下语句:

CREATE USER 'karl' IDENTIFIED WITH authentication_kerberos BY 'MYSQL.LOCAL';

例如,如果MySQL必须为该账户构造UPN以获取或验证票证(TGT或ST),则它将通过组合账户名称(忽略任何主机名部分)和领域名称来实现。例如,由前面的CREATE USER语句生成的完整账户名是 'karl'@'%' MySQL从用户名部分karl(忽略主机名部分)和领域名称MySQL.LOCAL构建UPN以生成 [email protected].

注意,当创建一个使用authentication_kerberos进行身份验证的账户时,CREATE USER语句不会将UPN领域作为用户名的一部分。相反,在BY子句中指定领域(在本例中为MYSQL.LOCAL)作为身份验证字符串。这与创建使用authentication_ldap_sasl sasl ldap身份验证插件和GSSAPI/Kerberos身份验证方法的账户不同。对于这样的账户,CREATE USER语句确实将UPN领域作为用户名的一部分。

设置好账户后,客户端可以使用它连接到MySQL服务器。该过程取决于客户端主机运行的是Linux还是Windows,如以下讨论所示。

authentication_kerberos 的使用受到限制,即不支持具有相同用户部分但不同领域部分的UPN。例如,您不能创建与这两个UPN对应的MySQL账户:

[email protected]

[email protected]

两个UPN都有kate的用户部分,但领域部分不同(MYSQL.LOCAL与EXAMPLE.COM)。这是不允许的。

使用MySQL账户连接到MySQL服务器

在设置了使用Kerberos进行身份验证的MySQL账户后,客户端可以使用它连接到MySQL服务器,如下所示:

1. 使用用户主体名称(UPN)及其密码对Kerberos进行身份验证,以获得票证授予票证(TGT)。

2. 使用TGT获取MySQL的服务票证(ST)。

3. 通过提供MySQL ST对MySQL服务器进行身份验证。

第一步(对Kerberos进行身份验证)可以通过各种方式执行:

● 在连接到MySQL之前:

■ 在Linux或处于GSSAPI模式的Windows上,调用kinit获取TGT并将其保存在Kerberos凭据缓存中。

■ 在SSPI模式下的Windows上,身份验证可能已经在登录时完成,这将登录用户的TGT保存在Windows内存缓存中。没有使用kinit,也没有Kerberos缓存。

● 当连接到MySQL时,客户端程序本身可以获得TGT,如果它可以确定所需的Kerberos UPN和密码:

■ 这些信息可以来自命令选项或操作系统等来源。

■ 在Linux上,客户端还可以使用keytab文件或 /etc/krb5.conf 配置文件。GSSAPI模式下的Windows客户端使用配置文件。处于SSPI模式的Windows客户端两者都不使用。

用于连接到MySQL服务器的客户端命令的详细信息因Linux和Windows而异,因此每种主机类型都会单独讨论,但无论主机类型如何,这些命令属性都适用:

● 显示的每个命令都包括以下选项,但在某些情况下可以省略每个选项:

■ --default-auth 选项指定客户端身份验证插件的名称(
authentication_kerberos_client)。当指定 --user 选项时,可能会省略此选项,因为在这种情况下,MySQL可以根据MySQL服务器发送的用户账户信息来确定插件。

■ --plugin-dir 选项向客户端程序指示
authentication_kerberos_client 插件的位置。如果插件安装在默认位置(编译位置),则可以省略此选项。

● 命令还应该包括指定要连接到哪个MySQL服务器所需的任何其他选项,如 --host 或 --port

● 在一行中输入每个命令。如果该命令包含一个 --password 选项来请求密码,则在提示时输入与MySQL用户关联的Kerberos UPN的密码。

用于Linux客户端的连接命令

在Linux上,连接到MySQL服务器的适当客户端命令会有所不同,这取决于该命令是使用Kerberos缓存中的TGT进行身份验证,还是基于MySQL用户名和UPN密码的命令选项:

● 在调用MySQL客户端程序之前,客户端用户可以独立于MySQL从KDC获得TGT。例如,客户端用户可以通过提供Kerberos用户主体名称和主体密码,使用kinit对Kerberos进行身份验证:

$> kinit [email protected]
Password for [email protected]: (enter password here)

UPN的结果TGT被缓存,并可供其他支持Kerberos的应用程序使用,例如使用客户端Kerberos身份验证插件的程序。在这种情况下,在不指定用户名或密码选项的情况下调用客户端:

mysql --default-auth=authentication_kerberos_client --plugin-dir=path/to/plugin/directory

客户端插件在缓存中找到TGT,使用它来获取MySQL ST,并使用ST向MySQL服务器进行身份验证。

如前所述,当缓存UPN的TGT时,客户端命令中不需要用户名和密码选项。如果命令仍然包含它们,则按如下方式处理它们:

■ 此命令包括一个用户名选项:

mysql --default-auth=authentication_kerberos_client --plugin-dir=path/to/plugin/directory --user=karl

在这种情况下,如果选项指定的用户名与TGT中UPN的用户名部分不匹配,则身份验证失败。

■ 此命令包括一个密码选项,提示时可输入该选项:

mysql --default-auth=authentication_kerberos_client --plugin-dir=path/to/plugin/directory --password

在这种情况下,客户端插件会忽略密码。因为身份验证是基于TGT的,所以即使用户提供的密码不正确,它也可以成功。因此,如果发现导致密码被忽略的有效TGT,插件会产生警告。

● 如果Kerberos缓存不包含TGT,则客户端Kerberos身份验证插件本身可以从KDC获取TGT。使用MySQL用户名和密码选项调用客户端,然后在提示时输入UPN密码:

mysql --default-auth=authentication_kerberos_client --plugin-dir=path/to/plugin/directory --user=karl --password

客户端Kerberos身份验证插件将用户名(karl)和用户账户中指定的领域(MYSQL.LOCAL)组合在一起,以构建UPN([email protected]). 客户端插件使用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时销毁TGT。

用于SSPI模式下Windows客户端的连接命令

在Windows上,使用默认的客户端插件选项(SSPI),连接到MySQL服务器的适当客户端命令会有所不同,这取决于该命令是基于MySQL用户名和UPN密码的命令选项进行身份验证,还是使用Windows内存缓存中的TGT。

命令可以显式指定MySQL用户名和UPN密码的选项,也可以省略这些选项:

● 此命令包括MySQL用户名和UPN密码选项:

mysql --default-auth=authentication_kerberos_client --plugin-dir=path/to/plugin/directory --user=karl --password

客户端Kerberos身份验证插件将用户名(karl)和用户账户中指定的领域(MYSQL.LOCAL)组合在一起,以构建UPN([email protected]). 客户端插件使用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

客户端插件从Windows内存缓存中获取TGT,使用TGT获取MySQL ST,并使用ST向MySQL服务器进行身份验证。

此方法要求客户端主机是Windows Server Active Directory(AD)域的一部分。如果不是这样,请手动输入AD服务器和领域作为DNS服务器和前缀,帮助MySQL客户端发现AD域的IP地址:

a. 启动console.exe并选择“网络和共享中心”。

b. 从“网络和共享中心”窗口的侧边栏中,选择“更改适配器设置”。

c. 在“网络连接”窗口中,右键单击网络或VPN连接进行配置,然后选择“属性”。

d. 在“网络”选项卡中,找到并单击“Internet协议版本4(TCP/IPv4)”,然后单击“属性”。

e. 在“Internet协议版本4(TCP/IPv4)属性”对话框中单击“高级”。将打开“高级TCP/IP设置”对话框。

f. 在DNS选项卡中,添加Active Directory服务器和领域作为DNS服务器和前缀。

● 此命令包含MySQL用户名选项,但不包含UPN密码选项:

mysql --default-auth=authentication_kerberos_client --plugin-dir=path/to/plugin/directory --user=karl

客户端Kerberos身份验证插件将用户名选项指定的名称与登录的用户名进行比较。如果名称相同,插件将使用登录用户TGT进行身份验证。如果名称不同,则身份验证失败。

用于GSSAPI模式下Windows客户端的连接命令

在Windows上,客户端用户必须使用
plugin_authentication_kerberos_client_mode 插件选项显式指定GSSAPI模式,以通过MIT kerberos库启用支持。默认模式为SSPI

可以指定GSSAPI模式:

● 在选项文件中调用MySQL客户端程序之前。插件变量名称使用下划线或短划线都是有效的:

[mysql]
plugin_authentication_kerberos_client_mode=GSSAPI

或者:

[mysql]
plugin-authentication-kerberos-client-mode=GSSAPI

● 在运行时从命令行使用mysql或mysqldump客户端程序。例如,以下命令(带下划线或短划线)使mysql通过Windows上的MIT Kerberos库连接到服务器。

mysql [connection-options] --plugin_authentication_kerberos_client_mode=GSSAPI

或者:

mysql [connection-options] --plugin-authentication-kerberos-client-mode=GSSAPI

● 客户端用户可以从 MySQL Workbench 和一些MySQL连接器中选择GSSAPI模式。在运行Windows的客户端主机上,您可以覆盖默认位置:

■ 通过设置 KRB5_CONFIG 环境变量的Kerberos配置文件。

■ 带有 KRB5CCNAME 环境变量的默认凭据缓存名称(例如,KRB5CCNAME=DIR:/mydir/)

连接到MySQL服务器的适当客户端命令会有所不同,这取决于该命令是使用MIT Kerberos缓存中的TGT进行身份验证,还是基于MySQL用户名和UPN密码的命令选项。通过Windows上的MIT库对GSSAPI的支持类似于Linux上的GSSAPI,但有以下例外:

● 票证总是从运行Windows的主机上的MIT Kerberos缓存中检索或放入其中。

● kinit在Windows上使用具有狭窄权限和特定角色的功能账户运行。客户端用户不知道kinit密码。

● 如果客户端用户提供了密码,则Windows上的MIT Kerberos库将决定是使用它还是依赖现有票证。

● 不支持Kerberos身份验证的客户端配置参数中描述的destroy_tickets参数,因为Windows上的MIT Kerberos库不支持从配置文件读取其值所需的API成员(get_profile_boolean)。

Kerberos身份验证的客户端配置参数

仅适用于运行Linux的客户端主机,不适用于运行Windows的客户端主机。

说明:通常,运行Windows且 
authentication_kerberos_client 客户端kerberos插件设置为GSSAPI模式的客户端主机确实支持客户端配置参数,但Windows上的MIT kerberos库不支持本节中描述的destroy_tickets参数。

如果在MySQL客户端应用程序调用时不存在有效的票证授予票证(TGT),则应用程序本身可能会获取并缓存TGT。如果在Kerberos身份验证过程中,客户端应用程序导致缓存TGT,则可以通过设置适当的配置参数,在不再需要添加的任何此类TGT之后将其销毁。


authentication_kerberos_client 客户端kerberos插件读取本地 /etc/krb5.conf 文件。如果此文件丢失或无法访问,则会发生错误。假设该文件是可访问的,它可以包括一个可选的 [appdefaults] 部分,以提供插件使用的信息。将信息放在该部分的mysql部分中。例如:

[appdefaults]
mysql = {
destroy_tickets = true
}

客户端插件在mysql部分识别这些参数:

● destroy_tickets值指示客户端插件在获取并使用TGT后是否销毁TGT。默认情况下,destroy_stickets为false,但可以设置为true以避免TGT重复使用。(此设置仅适用于客户端插件创建的TGT,而不适用于其他插件创建的或MySQ外部的TGT。)

在客户端主机上,可以使用客户端密钥选项卡文件来获得TGT和TS,而无需提供密码。

Kerberos身份验证调试


AUTHENTICATION_KERBEROS_CLIENT_LOG 环境变量启用或禁用KERBEROS身份验证的调试输出。

说明: 虽然
AUTHENTICATION_KERBEROS_CLIENT_LOG 中有CLIENT字样,但和客户端插件一样, 相同的环境变量也适用于服务器端插件。

在服务器端,允许的值为0(关闭)和1(打开)。日志消息会写入服务器错误日志,具体取决于服务器错误日志的详细级别。例如,如果使用基于优先级的日志过滤,则 log_error_verbosity 系统变量控制详细程度,

在客户端,允许的值从1到5,并写入标准错误输出。

日志级别

含义

1或未设置

无日志记录

2

错误消息

3

错误和警告信息

4

错误、警告和信息消息

5

错误、警告、信息和调试消息

猜你喜欢

转载自blog.csdn.net/weixin_44496870/article/details/131380590