MySQL 企业版支持使 MySQL 服务器能够使用 LDAP(轻量级目录访问协议)、带 Kerberos 的 LDAP 或本机 Kerberos 对 MySQL 用户进行身份验证的身份验证方法。MySQL Shell 8.0.27 支持经典 MySQL 协议连接的 LDAP 和 Kerberos 身份验证。X 协议连接不支持此功能。
以下部分描述了如何使用 LDAP 和 Kerberos 身份验证启用与 MySQL 服务器的连接。假定服务器在启用服务器端插件的情况下运行,并且客户端插件在客户端主机上可用。
MySQL 和 LDAP 协同工作以获取用户、凭证和组信息。有关简单 LDAP 身份验证过程的概述,请参阅 MySQL 用户的 LDAP 身份验证如何工作。要在 MySQL Shell 中使用简单的 LDAP 身份验证,必须满足以下条件:
-
必须在设置为与 LDAP 服务器通信的 MySQL 服务器上创建用户帐户。
authentication_ldap_simple
必须使用服务器端插件和可选的 LDAP 用户专有名称 (DN)来标识 MySQL 用户 。例如:CREATE USER 'admin'@'localhost' IDENTIFIED WITH authentication_ldap_simple BY 'uid=admin,ou=People,dc=my-domain,dc=com';
此示例中的
BY
子句指示 MySQL 帐户根据哪个 LDAP 条目进行身份验证。DN 的特定属性可能因 LDAP 服务器而异。 MySQL Shell 使用客户端
mysql_clear_password
插件,它以明文形式将密码发送到服务器。没有使用密码散列或加密,因此需要 MySQL Shell 和服务器之间的安全连接(使用 SSL 或套接字)。有关详细信息,请参阅 第 4.3.3 节,“使用加密连接”或 第 4.3.2 节,“使用 Unix 套接字和 Windows 命名管道进行连接”。-
为了最大限度地降低安全风险, 必须通过将命令行选项的值设置为on a secure connection
mysql_clear_password
来显式启用该插件 。例如,以下命令允许您为在上一个示例中创建的用户建立一个全局会话:--auth-method
clear_text_password
$> mysqlsh admin@localhost:3308 --auth-method=clear_text_password Please provide the password for 'admin@localhost:3308': admin_password (admin LDAP password)
笔记您还可以设置环境变量,
LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN
并为所有客户端连接启用mysql_clear_password
插件。但是,这种方法本质上是不安全的,不推荐用于测试以外的任何场景。有关详细信息,请参阅 客户端明文可插入身份验证。
MySQL 服务器能够接受来自 LDAP 目录中 MySQL 授权表之外定义的用户的连接。客户端和服务器端 SASL LDAP 插件使用 SASL 消息在 LDAP 协议内安全传输凭据(请参阅 使用 LDAP 可插入身份验证)。
对于基于 SASL 的身份验证,必须使用
authentication_ldap_sasl
服务器端插件和可选的 MySQL 帐户身份验证所依据的 LDAP 条目来标识 MySQL 用户。例如:
CREATE USER 'sammy'@'localhost'
IDENTIFIED WITH authentication_ldap_sasl
BY 'uid=sammy_ldap,ou=People,dc=my-domain,dc=com';
客户端插件随 MySQL 服务器包一起提供,authentication_ldap_sasl_client
而不是内置到libmysqlclient
客户端库中。MySQL Shell 提供持久连接选项
shell.options.mysqlPluginDir
,使您能够定义所需插件的位置。或者,您可以通过使用非持久命令行选项指定路径来覆盖持久设置
--mysql-plugin-dir
。例如,以下命令允许您在 Linux 主机上为上一示例中创建的用户建立全局会话:
$> mysqlsh sammy@localhost:3308 --mysql-plugin-dir="/usr/local/mysql/lib/plugin"
Please provide the password for 'sammy@localhost:3308': sammy_password (sammy_ldap LDAP password)
有关其他用法示例,请参阅 使用代理 和 LDAP 身份验证组首选项和映射规范的 LDAP 身份验证。
MySQL Shell 还支持通过 LDAP SASL 进行 Kerberos 身份验证。使用通用安全服务应用程序编程接口 (GSSAPI) 安全抽象接口,这种类型的连接向 Kerberos 进行身份验证以获取服务凭证,然后依次使用这些凭证来实现对其他服务的安全访问。仅支持 GSSAPI/Kerberos 作为 Linux 上的 MySQL 服务器和 MySQL Shell 的 LDAP 身份验证方法。
GSSAPI 库和 Kerberos 服务必须对 MySQL 服务器可用,连接才能成功。有关服务器端配置信息, 请参阅 GSSAPI/Kerberos 身份验证方法。
下面的一般示例创建了代理用户 named
lucy@MYSQL.LOCAL
,它承担了被代理用户 named 的特权
proxied_krb_usr
。它假定在 Kerberos 配置文件
MYSQL.LOCAL
中配置
了领域域。/etc/krb5.conf
帐户名的用户部分包括主体域,因此“lucy@MYSQL.LOCAL”被引用为 LDAP Kerberos 身份验证的单个值。
CREATE USER 'lucy@MYSQL.LOCAL'
IDENTIFIED WITH authentication_ldap_sasl
BY '#krb_grp=proxied_krb_user';
CREATE USER 'proxied_krb_user';
GRANT ALL PRIVILEGES ON my_db.* TO 'proxied_krb_user';
GRANT PROXY on 'proxied_krb_user' TO 'lucy@MYSQL.LOCAL';
以下命令允许您在 Linux 主机上为上一示例中创建的用户建立全局会话。您必须指定服务器插件目录的位置,作为持久
shell.options.mysqlPluginDir
连接选项或作为非持久命令选项,例如:
$> mysqlsh lucy%40MYSQL.LOCAL:password@localhost:3308/my_db
--mysql-plugin-dir="/usr/local/mysql/lib/plugin"
在此示例中,百分比编码 ( %40
) 替换主体名称中的保留@
字符,并且password
是为 MySQL 服务器变量设置的值
authentication_ldap_sasl_bind_root_pwd
。有关通过 LDAP SASL 进行 Kerberos 身份验证的服务器变量列表,请参阅
为 GSSAPI/Kerberos 配置服务器端 SASL LDAP 身份验证插件。
在调用 MySQL Shell 之前,您可以独立于 MySQL 从密钥分发中心获取并缓存票证授予票证。在这种情况下,调用 MySQL Shell 而不指定用户名或密码选项:
$> mysqlsh localhost:3308/my_db --auth-method=authentication_ldap_sasl_client
--mysql-plugin-dir="/usr/local/mysql/lib/plugin"
--auth-method=authentication_ldap_sasl_client
省略用户凭据时,必须
指定该
选项。
MySQL Shell 能够为使用
authentication_kerberos
服务器端身份验证插件的帐户建立连接,前提是正确的 Kerberos 票证可用或可以从 Kerberos 获得。从 MySQL 企业版 8.0.27 开始,该功能在运行 Linux 和 Windows 的主机上可用(版本 8.0.26 仅支持 Linux)。有关详细的设置信息,请参阅
Kerberos 可插入身份验证。
Kerberos 身份验证可以将用户名(例如lucy
)和用户帐户中指定的领域域(例如
MYSQL.LOCAL
)结合起来构造用户主体名称 (UPN),例如
lucy@MYSQL.LOCAL
. 要创建与 UPN 对应的 MySQL 帐户
lucy@MYSQL.LOCAL
,请使用以下语句:
CREATE USER 'lucy'
IDENTIFIED WITH authentication_kerberos
BY 'MYSQL.LOCAL';
客户端插件使用 UPN 和密码获取票证授予票证 (TGT),使用 TGT 获取 MySQL 服务票证 (ST),并使用 ST 向 MySQL 服务器进行身份验证。
以下命令允许您在 Linux 主机上为上一示例中创建的用户建立全局会话。您必须指定服务器插件目录的位置,作为持久
shell.options.mysqlPluginDir
连接选项或作为非持久命令选项,例如:
$> mysqlsh lucy:3308 --mysql-plugin-dir="/usr/local/mysql/lib/plugin"
Please provide the password for 'lucy@localhost:3308': UPN_password
在调用 MySQL Shell 之前,您可以独立于 MySQL 从密钥分发中心获取并缓存 TGT。在这种情况下,调用 MySQL Shell 而不指定用户名或密码选项:
$> mysqlsh localhost:3308 --auth-method=authentication_kerberos_client
--mysql-plugin-dir="/usr/local/mysql/lib/plugin"
--auth-method=authentication_kerberos_client
省略用户凭据时,必须
指定该
选项。