LDAP可插入身份验证是一个扩展包括在MySQL企业版,一个商业产品。更多地了解商业产品,请参阅https://www.10bet靠谱mysql.com/products/。
MySQL企业版支持身份验证方法,使MySQL服务器能够使用LDAP(轻量级目录访问协议)进行身份验证MySQL用户通过访问目录服务如X.500。MySQL使用LDAP来获取用户、凭证和组信息。
LDAP可插入的身份验证提供了这些功能:
外部认证:LDAP身份验证允许MySQL服务器接受来自用户之外定义的连接MySQL格兰特在LDAP目录表。
代理用户支持:LDAP身份验证可以返回到MySQL用户名不同于外部用户名通过客户端程序,基于外部用户的LDAP组的一员。这意味着一个LDAP插件可以返回MySQL用户定义了外部LDAP中经过身份验证的用户的特权。例如,LDAP用户命名
乔
可以连接和有特权的MySQL用户名字开发人员
如果LDAP组乔
是开发人员
。安全:使用TLS,可以安全的连接到LDAP服务器。
下面的表显示了插件和库文件名称简单SASL-based LDAP身份验证。文件名后缀在您的系统上可能会有所不同。文件必须位于目录命名的plugin_dir
系统变量。
表6.7插件库名称和简单的LDAP身份验证
插件或文件 | 插件或文件名称 |
---|---|
服务器端插件名称 | authentication_ldap_simple |
客户端插件名称 | mysql_clear_password |
库文件的名字 | authentication_ldap_simple.so |
表6.8为SASL-Based LDAP身份验证插件和库名称
插件或文件 | 插件或文件名称 |
---|---|
服务器端插件名称 | authentication_ldap_sasl |
客户端插件名称 | authentication_ldap_sasl_client |
库文件的名字 | authentication_ldap_sasl.so ,authentication_ldap_sasl_client.so |
库文件只包含authentication_ldap_
身份验证插件。客户端XXX
mysql_clear_password
插件是内置的libmysqlclient
客户端库。
每个服务器端LDAP插件与一个特定的客户端插件:
服务器端
authentication_ldap_simple
插件执行简单的LDAP身份验证。使用这个插件的连接的帐户,客户程序使用客户端mysql_clear_password
插件,明文发送密码到服务器。没有使用密码散列或加密,所以MySQL客户端和服务器之间的安全连接建议防止暴露密码。服务器端
authentication_ldap_sasl
插件执行SASL-based LDAP身份验证。使用这个插件的连接的帐户,客户程序使用客户端authentication_ldap_sasl_client
插件。客户端和服务器端SASL LDAP插件使用SASL信息安全传输的凭证在LDAP协议,以避免MySQL客户端和服务器之间发送明文密码。
以下部分提供安装和使用特定于LDAP可插入身份验证信息:
mysql_clear_password插件,看到
请注意如果您的系统支持PAM和允许LDAP PAM身份验证方法,另一种为MySQL用户使用LDAP身份验证是使用服务器端
authentication_pam
插件。看到为MySQL使用LDAP可插入身份验证,必须满足这些先决条件:
LDAP服务器必须用于LDAP身份验证插件与交流。
LDAP用户经过身份验证的MySQL必须出现在由LDAP服务器的目录。
LDAP客户端库必须在服务器端系统上可用
authentication_ldap_sasl
或authentication_ldap_simple
使用插件。目前,图书馆是Windows原生支持的LDAP库,或OpenLDAP图书馆在非Windows系统。使用SASL-based LDAP身份验证:
LDAP服务器必须配置为与SASL服务器通信。
SASL客户端库必须在客户端系统上可用
authentication_ldap_sasl_client
使用插件。目前,仅支持图书馆是塞勒斯SASL库。使用一个特定的SASL验证方法,该方法所需的任何其他服务必须是可用的。例如,使用GSSAPI / Kerberos GSSAPI库和Kerberos服务必须是可用的。
本节提供了一个总体概述MySQL和LDAP如何协同工作的MySQL用户进行身份验证。的例子显示如何设置MySQL账户使用特定的LDAP身份验证插件,看看
对于简单的LDAP身份验证,客户端和服务器端插件通信密码明文。客户机和服务器之间的安全连接MySQL建议防止暴露密码。 SASL-based LDAP身份验证的客户端和服务器端插件避免MySQL客户端和服务器之间发送明文密码。例如,插件可以使用SASL信息安全传输的凭证在LDAP协议。GSSAPI认证方法,客户端和服务器端插件使用Kerberos安全通信没有直接使用LDAP消息。
如果客户端用户名和主机名匹配没有MySQL账户,连接将被拒绝。
如果有一个匹配的MySQL账户,根据LDAP身份验证。LDAP服务器查找条目匹配用户名和验证条目对LDAP密码:
如果MySQL账户名称LDAP用户的专有名称(DN), LDAP身份验证使用价值和LDAP客户端提供的密码。(将LDAP用户DN与MySQL账户,包括
通过
子句中指定身份验证字符串创建用户
声明中创建该帐户。)如果MySQL账户名称没有LDAP用户DN, LDAP身份验证使用LDAP用户名和密码由客户提供。在这种情况下,身份验证插件首先绑定到LDAP服务器使用根DN和密码作为凭证查找用户DN基于客户用户名,然后验证用户DN与LDAP密码。这个绑定使用根凭证失败如果根DN和密码设置为不正确的值,或者是空的(没有设置)和LDAP服务器不允许匿名连接。
如果LDAP服务器发现不匹配或多个匹配,认证失败,客户端连接将被拒绝。
如果LDAP服务器找到一个匹配,LDAP身份验证成功(假设密码是正确的),LDAP服务器返回LDAP条目,以及身份验证插件确定身份验证的用户的名称基于该条目:
如果LDAP条目有一组属性(默认情况下,
cn
属性),插件返回其值作为身份验证的用户名称。如果LDAP条目没有组属性,客户端身份验证插件返回用户名作为身份验证的用户名称。
MySQL服务器比较客户端用户名与验证用户名是否发生代理客户端会话:
如果名称是相同的,没有代理发生:MySQL账户匹配的客户端用户名用于权限检查。
如果名字不同,代理发生:MySQL寻找匹配的一个帐户身份验证的用户的名字。帐户成为代理用户,用于权限检查。MySQL账户匹配的客户端用户名被视为外部代理用户。
本节描述如何安装LDAP身份验证插件。一般安装插件的信息,请参阅安装和卸载插件。
可用的服务器,插件库文件必须位于MySQL插件目录(目录命名的plugin_dir
系统变量)。如果有必要,配置插件目录位置通过设置的值plugin_dir
在服务器启动。
服务器端插件库文件名称authentication_ldap_simple
和authentication_ldap_sasl
。每个平台的文件名后缀不同(例如,所以
Unix和类Unix系统,. dll
对于Windows)。
在服务器启动时加载的插件,使用——plugin-load-add
选项名称包含的库文件。通过这种plugin-loading方法,必须每次服务器启动选项。同时,指定您希望配置任何plugin-provided系统变量的值。
每个服务器端LDAP插件暴露一组系统变量,使其操作配置。设置这些是可选的,但是你必须设置的变量指定LDAP服务器主机(所以插件知道连接)和基本专有名称为LDAP绑定操作(限制了搜索的范围和获得更快的搜索)。所有LDAP系统变量的详细信息,请参阅my.cnf文件,调整所以
为您的平台必要的后缀:
(mysqld) plugin-load-add = authentication_ldap_simple。所以authentication_ldap_simple_server_host = 127.0.0.1 authentication_ldap_simple_bind_base_dn = " dc =示例中,dc = com”plugin-load-add = authentication_ldap_sasl。所以authentication_ldap_sasl_server_host = 127.0.0.1 authentication_ldap_sasl_bind_base_dn = " dc =示例中,dc = com”
修改后my.cnf
,重新启动服务器以使新的设置生效。
另外,在运行时加载插件,使用这些语句,调整所以
为您的平台必要的后缀:
安装插件authentication_ldap_simple SONAME authentication_ldap_simple.so”;安装插件authentication_ldap_sasl SONAME authentication_ldap_sasl.so”;
安装插件
立即加载插件,并注册它mysql.plugins
系统表导致服务器负载为每个后续正常启动不需要——plugin-load-add
。
在安装插件在运行时,系统变量可用,您可以添加设置你的my.cnf
文件为后续重新启动配置插件。例如:
(mysqld) authentication_ldap_simple_server_host = 127.0.0.1 authentication_ldap_simple_bind_base_dn = " dc =示例中,dc = com”authentication_ldap_sasl_server_host = 127.0.0.1 authentication_ldap_sasl_bind_base_dn =“dc =示例中,dc = com”
修改后my.cnf
,重新启动服务器以使新的设置生效。
另外,设置和保存值在运行时,使用这些语句:
设定持续authentication_ldap_simple_server_host =“127.0.0.1”;设置保存authentication_ldap_simple_bind_base_dn = ' dc =示例中,dc = com”;设定持续authentication_ldap_sasl_server_host =“127.0.0.1”;设置保存authentication_ldap_sasl_bind_base_dn = ' dc =示例中,dc = com”;
设置保存
集的值运行MySQL实例。它还保存的值,使其携带到后续服务器重启。改变一个值运行MySQL实例没有它携带到后续重新启动,使用全球
关键字,而不是坚持
。看到为变量赋值语法。
验证插件安装、检查INFORMATION_SCHEMA.PLUGINS
表或使用显示插件
声明(见获取服务器插件信息)。例如:
mysql >选择PLUGIN_NAME PLUGIN_STATUS INFORMATION_SCHEMA。插件,PLUGIN_NAME像“% ldap %”;+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + | PLUGIN_NAME | PLUGIN_STATUS | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - + | authentication_ldap_sasl活动| | | authentication_ldap_simple活动| + | - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - +
如果一个插件初始化失败,检查服务器错误日志诊断消息。
把MySQL账户和LDAP插件,看看
系统上运行EL6或EL启用了SELinux, SELinux政策变化需要启用MySQL LDAP插件与LDAP通信服务:
创建一个文件
mysqlldap.te
与这些内容:模块mysqlldap 1.0;需要{类型ldap_port_t;类型mysqld_t;类tcp_socket name_connect;}# = = = = = = = = = = = = = mysqld_t = = = = = = = = = = = = = =允许mysqld_t ldap_port_t: tcp_socket name_connect;
安全策略模块编译成二进制表示:
checkmodule - m - m mysqlldap。te - o mysqlldap.mod
创建一个SELinux策略模块包:
semodule_package - m mysqlldap。mod - o mysqlldap.pp
安装模块包:
semodule我mysqlldap.pp
SELinux策略改变时,重新启动MySQL服务器:
服务mysqld重启
LDAP身份验证插件用于卸载的方法取决于你如何安装:
如果你安装了插件在服务器启动时使用
——plugin-load-add
没有这些选项选项,重启服务器。如果你安装了插件在运行时使用
安装插件
,他们仍然安装在服务器重启。卸载它们,使用卸载插件
:卸载插件authentication_ldap_simple;卸载插件authentication_ldap_sasl;
此外,删除从你my.cnf
文件的任何启动选项设置LDAP plugin-related系统变量。如果你使用设置保存
坚持LDAP系统变量,使用重置持续
删除的设置。
安装使用OpenLDAP的ldap.conf
文件提供了LDAP客户端全局默认值。选项可以设置在这个文件中影响LDAP客户端,包括LDAP身份验证插件。在这个优先顺序使用OpenLDAP配置选项:
如果图书馆违约或ldap.conf
值不会产生适当的选项值,LDAP身份验证插件可以直接设置相关变量影响LDAP配置。例如,LDAP插件可以覆盖ldap.conf
这样的参数:
TLS配置:系统变量可用于支持TLS和CA配置、控制等
authentication_ldap_simple_tls
和authentication_ldap_simple_ca_path
对于简单的LDAP身份验证authentication_ldap_sasl_tls
和authentication_ldap_sasl_ca_path
SASL LDAP身份验证。LDAP转诊。看到ldap.conf查阅
ldap.conf (5)
手册页。
本节描述如何启用MySQL账户连接到MySQL服务器使用LDAP可插入身份验证。假设服务器启用适当的服务器端插件,中描述
服务器端 服务器端
authentication_ldap_simple
插件执行简单的LDAP身份验证。使用这个插件的连接的帐户,客户程序使用客户端mysql_clear_password
插件,明文发送密码到服务器。没有使用密码散列或加密,所以MySQL客户端和服务器之间的安全连接建议防止暴露密码。authentication_ldap_sasl
插件执行SASL-based LDAP身份验证。使用这个插件的连接的帐户,客户程序使用客户端authentication_ldap_sasl_client
插件。客户端和服务器端SASL LDAP插件使用SASL信息安全传输的凭证在LDAP协议,以避免MySQL客户端和服务器之间发送明文密码。
LDAP身份验证的MySQL用户总体需求:
必须有一个LDAP目录条目为每个用户进行身份验证。
必须有一个MySQL用户帐户,用于指定一个服务器端LDAP身份验证插件和可选名称相关的LDAP用户专有名称(DN)。(将LDAP用户DN与MySQL账户,包括
通过
条款的创建用户
声明中创建该帐户。)如果一个没有LDAP帐户名称字符串,LDAP身份验证使用由客户指定的用户名查找LDAP条目。客户程序连接使用的连接方法适合于服务器端身份验证插件使用MySQL账户。LDAP身份验证,连接需要MySQL用户名和LDAP密码。此外,对于账户使用服务器端
authentication_ldap_simple
插件,调用客户端程序——enable-cleartext-plugin
选项来启用客户端mysql_clear_password
插件。
这里的指令假设下面的场景:
MySQL用户
贝琪
和鲍里斯
LDAP条目进行身份验证betsy_ldap
和boris_ldap
,分别。(没有必要,MySQL和LDAP用户名称是不同的。使用不同的名字在这个讨论可以帮助澄清一个操作环境是否MySQL或LDAP)。使用LDAP条目
uid
属性来指定用户名。这可能取决于LDAP服务器。一些使用LDAP服务器cn
用户名而不是属性uid
。改变属性,修改authentication_ldap_simple_user_search_attr
或authentication_ldap_sasl_user_search_attr
适当的系统变量。这些LDAP条目的目录由LDAP服务器管理,提供惟一地标识每个用户的专有名称的值:
uid = betsy_ldap, ou =人,dc =例子,dc = com uid = boris_ldap, ou =人,dc =示例中,dc = com
创建用户
语句的LDAP用户创建MySQL帐号名称通过
条款,表明LDAP条目MySQL账户验证。
建立一个帐户的说明,使用LDAP身份验证依赖于服务器端使用LDAP插件。以下部分描述了使用场景。
为简单的LDAP身份验证,配置MySQL账户创建用户
声明中指定authentication_ldap_simple
插件和可选名称LDAP用户专有名称(DN):
创建用户用户认同authentication_ldap_simple(的LDAP用户DN');
假定MySQL用户贝琪
该条目在LDAP目录中:
uid = betsy_ldap, ou =人,dc =例子,dc = com
然后声明创建MySQL账户贝琪
是这样的:
创建用户“贝”@“localhost”等同于authentication_ldap_simple“uid = betsy_ldap, ou =人,dc =例子,dc = com”;
身份验证字符串中指定通过
条款不包括LDAP密码。必须提供的客户端用户在连接时间。
客户端连接到MySQL服务器通过提供MySQL LDAP用户名和密码,并通过启用客户端mysql_clear_password
插件:
壳> mysql用户=贝琪——密码——enable-cleartext-plugin输入密码:betsy_password(betsy_ldap LDAP密码)
客户端mysql_clear_password
身份验证插件使密码不变,所以客户端程序发送明文MySQL服务器。这使密码可以被传递到LDAP服务器。明文密码必须使用服务器端LDAP库没有SASL,但在某些配置可能是一个安全问题。这些措施减少风险:
无意中使用
mysql_clear_password
插件不太可能,MySQL客户端必须显式地启用它(例如,——enable-cleartext-plugin
选项)。看到为了避免暴露与密码
mysql_clear_password
启用插件,MySQL客户应该连接到MySQL服务器使用一个加密连接。看到客户端插件发送
贝琪
和betsy_password
客户端用户名和LDAP密码的MySQL服务器。连接尝试匹配
“贝”@“localhost”
帐户。服务器端LDAP插件发现这个帐户有一个身份验证串“uid = betsy_ldap, ou =人,dc =例子,dc = com”
LDAP用户的DN。插件将这个字符串发送到LDAP服务器的LDAP密码。LDAP服务器的LDAP条目
betsy_ldap
和密码匹配,所以LDAP身份验证成功。LDAP条目没有组属性,所以服务器端插件返回客户端用户名(
贝琪
)作为身份验证的用户。这是相同的用户名由客户提供,所以没有发生代理和客户机会话使用“贝”@“localhost”
占特权检查。
有匹配的LDAP条目包含一组属性,该属性的值是经过身份验证的用户名,如果该值不同于贝琪
,代理就会发生。使用一组属性的例子,看到创建用户
声明中没有通过
子句指定betsy_ldap
LDAP专有名称、认证尝试将使用客户端提供的用户名(在本例中,贝琪
)。在缺乏一个LDAP条目贝琪
、身份验证会失败。
配置一个MySQL占SASL LDAP身份验证,创建用户
声明中指定authentication_ldap_sasl
插件和可选名称LDAP用户专有名称(DN):
创建用户用户认同authentication_ldap_sasl(的LDAP用户DN');
假定MySQL用户鲍里斯
该条目在LDAP目录中:
uid = boris_ldap, ou =人,dc =例子,dc = com
然后声明创建MySQL账户鲍里斯
是这样的:
创建用户“鲍里斯”@“localhost”的识别与authentication_ldap_sasl“uid = boris_ldap, ou =人,dc =例子,dc = com”;
身份验证字符串中指定通过
条款不包括LDAP密码。必须提供的客户端用户在连接时间。
客户端连接到MySQL服务器通过提供MySQL用户名和LDAP密码:
壳> mysql——用户=鲍里斯——密码输入密码:boris_password(boris_ldap LDAP密码)
为服务器端authentication_ldap_sasl
插件,客户使用客户端authentication_ldap_sasl_client
插件。如果一个客户端程序找不到客户端插件,指定一个——plugin-dir
选项名称的目录插件安装库文件。
身份验证过程鲍里斯
类似于先前描述贝琪
用简单的LDAP身份验证,除了客户端和服务器端SASL LDAP插件使用SASL信息安全传输的凭证在LDAP协议,以避免MySQL客户端和服务器之间发送明文密码。
LDAP身份验证插件支持代理,使一个用户连接到MySQL服务器作为一个用户,但假设不同的用户的特权。本节描述基本的LDAP插件代理支持。LDAP插件也支持群体偏好和代理用户映射规范;看到
使用LDAP条目 为 为 这些LDAP条目的目录由LDAP服务器管理,提供惟一地标识每个用户的专有名称的值: 在连接时,组属性值成为经过身份验证的用户名,所以他们的名字 SASL的例子假定使用LDAP身份验证。对于简单的LDAP身份验证做出适当的调整。
uid
和cn
属性来指定用户名和组值,分别。使用不同的用户和组属性名称,设置适当的plugin-specific系统变量:
authentication_ldap_simple
插件:设置authentication_ldap_simple_user_search_attr
和authentication_ldap_simple_group_search_attr
。authentication_ldap_sasl
插件:设置authentication_ldap_sasl_user_search_attr
和authentication_ldap_sasl_group_search_attr
。uid =岜沙,ou =人,dc =例子,dc = com, cn =会计uid =罗勒,ou =人,dc =示例中,dc = com, cn = front_office
会计
和front_office
代理帐户。
创建默认代理MySQL账户:
创建用户”@“%”与authentication_ldap_sasl确认;
代理账户没有定义为“
条款名称LDAP用户DN。因此:auth_string
”
当一个客户端连接,客户端用户名变成了LDAP用户名来搜索。
匹配的LDAP条目将包括一组属性命名代理MySQL账户定义了客户端应该有特权。
如果你的MySQL安装有匿名用户,他们可能与默认代理用户冲突。关于这个问题的更多信息,以及处理的方式,明白了 代理账户使用 使用mysql命令行客户端连接到MySQL服务器 验证发生如下: 使用默认的服务器进行身份验证的连接 匹配的LDAP条目: 有组属性匹配的LDAP条目 身份验证的用户不同于客户端用户名 这表明 现在连接 身份验证过程 使用默认的服务器进行身份验证的连接 匹配的LDAP条目: 有组属性匹配的LDAP条目 身份验证的用户不同于客户端用户名 这表明创建用户“会计”@“localhost”与mysql_no_login确认;创建用户“front_office”@“localhost”与mysql_no_login确认;accountingdb上的所有特权授予。*“会计”@“localhost”;frontdb上的所有特权授予。*“front_office”@“localhost”;
mysql_no_login
身份验证插件,防止客户使用账户直接登录到MySQL服务器。相反,使用LDAP身份验证的用户预计将使用默认的“@‘%’
代理帐户。(这个假设mysql_no_login
插件安装。说明,请参阅代理
为每个代理帐户特权:格兰特代理“会计”@“localhost”“@‘%’;格兰特代理front_office”@“localhost”@“%”;
岜沙
。壳> mysql——用户=岜沙密码输入密码:basha_password(岜沙LDAP密码)
“@‘%’
代理账户,为客户端用户岜沙
。uid =岜沙,ou =人,dc =例子,dc = com, cn =会计
cn =会计
,所以会计
成为认证用户代理。岜沙
,结果岜沙
作为一个代理会计
,岜沙
假设代理的特权会计
帐户。以下查询返回的输出如图所示:mysql >选择用户(),CURRENT_USER (), @@proxy_user;+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + |用户()| CURRENT_USER () | @@proxy_user | + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + | basha@localhost | accounting@localhost“@‘%’| | + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - +
岜沙
使用特权授予代理会计
MySQL账户,代理发生通过默认代理用户帐户。罗勒
而不是:壳> mysql用户=罗勒,密码输入密码:basil_password(罗勒LDAP密码)
罗勒
类似于先前描述岜沙
:
“@‘%’
代理账户,为客户端用户罗勒
。uid =罗勒,ou =人,dc =例子,dc = com, cn = front_office
cn = front_office
,所以front_office
成为认证用户代理。罗勒
,结果罗勒
作为一个代理front_office
,罗勒
假设代理的特权front_office
帐户。以下查询返回的输出如图所示:mysql >选择用户(),CURRENT_USER (), @@proxy_user;+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + |用户()| CURRENT_USER () | @@proxy_user | + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + | basil@localhost | front_office@localhost“@‘%’| | + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - +
罗勒
使用特权授予代理front_office
MySQL账户,代理发生通过默认代理用户帐户。
考虑下面的MySQL代理账户定义:
“@‘%’创建用户标识与authentication_ldap_sasl”+ ou =人,dc =例子,dc = com # grp1 = usera grp2, grp3 = userc ';
身份验证字符串有一个用户DN后缀ou =人,dc =例子,dc = com
前缀的+
的性格。因此,所述uid属性。
剩下的身份验证字符串开头的一部分#
,这意味着集团的偏好和映射信息的开始。这部分的验证字符串列表的顺序组名称grp1
,grp2
,grp3
。LDAP插件比较列表与LDAP服务器返回的组名,在返回一个匹配列表名称。插件使用的第一场比赛,或者如果没有匹配,验证失败。
假设LDAP服务器返回组grp3
,grp2
,grp7
。LDAP插件使用grp2
因为它是第一组身份验证字符串相匹配,即使它不是第一组返回的LDAP服务器。如果LDAP服务器返回grp4
,grp2
,grp1
,插件使用grp1
尽管grp2
也匹配。grp1
有一个优先级高于grp2
因为它是早些时候上市身份验证字符串。
假设插件找到一组名称匹配,它执行从这组名称映射到MySQL代理用户名,如果有的话。对于示例代理帐户,映射发生如下:
如果匹配的组名
grp1
或grp3
,这些都是与用户名验证字符串相关联usera
和userc
,分别。插件使用相应的关联的用户名作为代理用户名。如果匹配的组名
grp2
,没有身份验证字符串相关联的用户名。插件使用grp2
代理用户名。
如果LDAP服务器返回一组在DN格式,LDAP插件解析DN组提取组名称。
指定LDAP组偏好和映射信息,这些原则应用:
开始组偏好和映射身份验证字符串的一部分
#
前缀字符。组偏好和映射规范列出的一个或多个项目,之间用逗号分隔。每一项的形式
或group_name
=user_name
group_name
。物品应该组名称偏好顺序列出。一个组名称选择的插件作为匹配从LDAP服务器返回的组名,两个语法不同的效果如下:为指定一个项目
(用户名),组名称映射到用户名,它用作MySQL代理用户名。group_name
=user_name
为指定一个项目
group_name
(没有用户名),组名称用作MySQL代理用户名。
引用一组或用户名包含特殊字符,如空间,周围由双引号(
”
)字符。例如,如果一个项目小组和用户的名字我的组名
和我的用户名
,它必须写在一组映射使用引号:“我的组名”=“我的用户名”
如果一个项目小组和用户的名字
my_group_name
和my_user_name
(不包含特殊字符),但是不需要使用引号。下列是有效的:my_group_name = my_user_name my_group_name = " my_user_name "“my_group_name”= my_user_name“my_group_name”=“my_user_name”
逃离一个角色,之前通过一个反斜杠(
\
)。这是有用的特别包括文字双引号或反斜杠,否则不包括字面上。用户DN不需要出现在身份验证字符串,但如果存在,它必须先于组偏好和映射部分。可以给用户DN作为一个完整的用户DN,或作为用户DN后缀
+
前缀字符。(见LDAP身份验证插件允许验证字符串提供用户DN信息开始
+
前缀字符:在缺乏
+
性格,身份验证字符串值被视为没有修改。如果身份验证字符串开头
+
,插件结构完整的用户DN值从客户机发送的用户名,连同中指定的DN(身份验证字符串+
删除)。构造的DN,客户端用户名属性的值,指定LDAP用户的名字。这是uid
默认情况下;改变属性,修改相应的系统变量(authentication_ldap_simple_user_search_attr
或authentication_ldap_sasl_user_search_attr
)。身份验证存储为给定的字符串mysql.user
系统表,完整的用户DN动态构造之前验证。
这个帐户没有验证字符串
+
一开始,作为完整的用户DN:创建用户的鲍德温认同authentication_ldap_simple“uid = admin, ou =人,dc =例子,dc = com”;
客户端与用户名指定的账户(
鲍德温
)。在这种情况下,没有使用这个名字,因为身份验证字符串没有前缀,从而完全指定的用户DN。这个帐户验证字符串
+
在一开始,所以它是作为用户DN的一部分:创建用户的会计确认与authentication_ldap_simple”+ ou =人,dc =例子,dc = com”;
客户端与用户名指定的账户(
会计
),在这种情况下的使用uid
属性一起验证字符串构建用户DN:uid =会计,ou =人,dc =例子,dc = com
账户在前面的例子有一个非空的用户名,所以客户端总是连接到MySQL服务器使用相同的名称作为定义中指定的帐户。如果一个帐户有一个空的用户名,如默认匿名
“@‘%’
代理账户中描述+,插件使用客户端发送的用户名一起验证字符串构造用户DN。
LDAP身份验证插件使用一个可配置的身份验证方法。可用适当的系统变量和方法的选择是plugin-specific:
为
authentication_ldap_simple
插件:设置authentication_ldap_simple_auth_method_name
系统变量配置方法。允许选择简单的
和ad森林
。为
authentication_ldap_sasl
插件:设置authentication_ldap_sasl_auth_method_name
系统变量配置方法。允许选择SCRAM-SHA-1
,安全- sha - 256
,GSSAPI
。(确定哪些SASL LDAP主机系统上可用的方法实际上是,检查的价值Authentication_ldap_sasl_supported_methods
状态变量)。
看到每个允许的信息的系统变量的描述方法。同时,根据不同的方法,可能需要额外的配置,如以下部分所述。
通用安全服务应用程序编程接口(GSSAPI)是一种安全的抽象接口。Kerberos是一个特定的安全协议的实例,可以通过使用抽象的接口。Kerberos使用GSSAPI应用程序验证来获得服务的凭证,然后依次使用这些凭证,使安全访问其他服务。
一个这样的服务是LDAP,所使用的客户端和服务器端SASL LDAP身份验证插件。当authentication_ldap_sasl_auth_method_name
系统变量设置为GSSAPI
,这些插件使用GSSAPI / Kerberos身份验证方法。在这种情况下,不使用LDAP插件使用Kerberos安全通信直接消息。然后服务器端插件与LDAP服务器来解释LDAP身份验证信息和检索LDAP组。
GSSAPI /支持Kerberos身份验证方法只在Linux MySQL客户端和服务器。它是有用的在Linux环境中应用程序访问使用Microsoft Active Directory LDAP, Kerberos默认启用。
下面的讨论提供信息配置使用GSSAPI方法的要求。熟悉假定使用Kerberos的概念和操作,如这些常见的Kerberos术语:
校长=一个命名实体,如用户或服务。
KDC =密钥分发中心,组成和TGS。
作为身份验证服务器=,KDC的一部分;提供了最初的机票需要获得TGT。
TGS =票据授予服务,KDC的一部分。
TGT =票据授予票据,提交给TGS获得门票服务访问。
Kerberos身份验证需要一个KDC服务器和LDAP服务器。这个需求可以以不同的方式满足:
活动目录包括服务器,使用Kerberos身份验证在Active Directory LDAP服务器默认启用。
OpenLDAP提供LDAP服务器,但可能需要一个单独的KDC服务器,需要额外的Kerberos设置。
Kerberos客户端主机上也必须是可用的。客户端联系人使用密码获得TGT。然后客户端使用TGT获得TGS的其他服务,如LDAP。
下面的章节将讨论配置步骤使用GSSAPI MySQL / Kerberos SASL LDAP身份验证:
下面的例子显示了如何在Active Directory测试Kerberos的可用性。让这些假设的例子:
活动目录运行在主机命名
ldap_auth.example.com
与IP地址198.51.100.10
。mysql相关使用Kerberos身份验证和LDAP查找
MYSQL.LOCAL
域。一个校长名叫
bredon@MYSQL.LOCAL
注册与KDC。(在后面的讨论中,这个校长的名字也用于MySQL用户验证MySQL服务器使用GSSAPI / Kerberos)。
与假设满足,遵循这个过程:
验证Kerberos图书馆是正确安装和配置的操作系统。例如,配置一个
MYSQL.LOCAL
域使用MySQL认证期间,/etc/krb5.conf
Kerberos配置文件应该包含这样的:(领域)MYSQL。当地= {kdc = ldap_auth.example.com admin_server = ldap_auth.example.com default_domain = MYSQL。当地}
您可能需要添加一个条目
设置
服务器主机:198.51.100.10 a ldap_auth ldap_auth.example.com
检查是否Kerberos身份验证是正确的:
使用kinitKerberos身份验证:
kinit bredon@MYSQL.LOCAL
Kerberos主体命名的命令进行身份验证
bredon@MYSQL.LOCAL
。输入时主要的密码命令提示。KDC返回一个TGT是在客户端缓存,供其他Kerberos-aware应用程序使用。使用中检查是否正确获得TGT。输出应该类似这样:
票缓存:文件:/ tmp / krb5cc_244306默认主:bredon@MYSQL。当地有效开始到期服务主体03/23/2020 08:18:33 03/23/2020 18:18:33 krbtgt / MYSQL.LOCAL@MYSQL.LOCAL
检查是否ldapsearch使用Kerberos TGT使用这个命令,搜索用户
MYSQL.LOCAL
域:ldapsearch - h 198.51.100.10 - y GSSAPI - b“dc = MYSQL, dc =本地”
配置服务器端SASL LDAP身份验证插件GSSAPI / Kerberos
假设LDAP服务器是通过Kerberos如前所述,配置服务器端SASL LDAP身份验证插件使用GSSAPI / Kerberos身份验证方法。(对于一般LDAP插件安装信息,请参阅my.cnf文件可能包含:
(mysqld) plugin-load-add = authentication_ldap_sasl。所以authentication_ldap_sasl_auth_method_name = " GSSAPI " authentication_ldap_sasl_server_host = 198.51.100.10 authentication_ldap_sasl_server_port = 389 authentication_ldap_sasl_bind_root_dn =“cn = admin, cn =用户,dc = MYSQL, dc =当地" authentication_ldap_sasl_bind_root_pwd = "密码“authentication_ldap_sasl_bind_base_dn =“cn =用户,dc = MYSQL, dc =当地" authentication_ldap_sasl_user_search_attr = " sAMAccountName”
这些选项文件设置SASL LDAP插件配置如下:
的
——plugin-load-add
选择加载插件(调整所以
后缀为您的平台是必要的)。如果您加载插件之前使用安装插件
声明中,这个选项是不必要的。authentication_ldap_sasl_auth_method_name
必须设置为GSSAPI
使用GSSAPI / Kerberos SASL LDAP身份验证方法。authentication_ldap_sasl_server_host
和authentication_ldap_sasl_server_port
显示的IP地址和端口号Active Directory服务器主机进行身份验证。authentication_ldap_sasl_bind_root_dn
和authentication_ldap_sasl_bind_root_pwd
配置根DN和密码组搜索功能。此功能是必需的,但用户可能没有权限搜索。在这种情况下,有必要提供根DN的信息:在DN选项值,
管理
的名字应该是行政特权来执行用户搜索LDAP帐户。密码选项值,
密码
应该是管理
账户密码。
authentication_ldap_sasl_bind_base_dn
显示用户DN基本路径,这样搜索寻找用户MYSQL.LOCAL
域。authentication_ldap_sasl_user_search_attr
指定一个标准的活动目录搜索属性,sAMAccountName
。这个属性是用于搜索匹配登录名;属性值不一样的用户DN值。
创建一个MySQL账户使用GSSAPI / Kerberos
MySQL身份验证使用GSSAPI的SASL LDAP身份验证插件/ Kerberos方法是基于用户是一个Kerberos主体。下面讨论使用一个主体命名
bredon@MYSQL.LOCAL
这个用户,必须注册在几个地方:Kerberos admininistrator应该作为Kerberos主体注册用户名。这个名字应该包括一个域名。客户使用的主体名和密码与Kerberos身份验证,获得TGT。
LDAP管理员应该注册用户名在LDAP条目。例如:
uid = bredon, dc = MYSQL, dc =当地
请注意在活动目录(使用Kerberos作为默认身份验证方法),创建一个用户创建Kerberos主体和LDAP条目。
MySQL DBA应该创建一个帐户的Kerberos主体名称作为用户名,并使用SASL验证LDAP插件。
假设Kerberos主体和LDAP条目已被适当的服务注册管理员,MySQL服务器已经开始使用
my.cnf
设置之前,创建一个MySQL账户相对应的Kerberos主体名称,包括域名。请注意SASL LDAP插件使用一个常数Kerberos身份验证的用户DN和忽略任何用户DN从MySQL配置。这有一定的影响:
对于任何一个MySQL账户使用GSSAPI / Kerberos身份验证,验证字符串
创建用户
或改变用户
语句应该不包含用户DN,因为它没有效果。由于身份验证字符串不包含用户DN,它应该包含映射信息,让用户处理作为一个代理用户映射到用户所需的代理。代理信息的LDAP身份验证插件,看看bredon@MYSQL.LOCAL假设代理用户的特权
proxied_krb_usr
。其他GSSAPI / Kerberos用户应该有相同的特权同样可以创建代理用户相同的用户代理。——创建用户创建代理帐户bredon@MYSQL。当地的认同authentication_ldap_sasl # krb_grp = proxied_krb_user ';——创建代理帐户和授予其权限;——使用mysql_no_login插件来避免直接登录创建用户与mysql_no_login proxied_krb_user的确定;格兰特krb_user_db。*“proxied_krb_user”;——授予代理账户代理代理帐户特权授予代理“proxied_krb_user”“bredon@MYSQL.LOCAL”;
对于大多数MySQL账户,用户和主机帐户名称的独立的部分,因此分别报价
”
。user_name
“@”host_name
”对Kerberos身份验证,用户帐户名称包括主域的一部分,所以
“bredon@MYSQL.LOCAL”
一个值。因为没有主机部分,完整的MySQL账户名称使用默认“%”
作为东道主的部分:“bredon@MYSQL.LOCAL”@“%”
代理账户使用
mysql_no_login
身份验证插件,防止客户使用账户直接登录到MySQL服务器。相反,预计使用LDAP身份验证的用户使用bredon@MYSQL.LOCAL
代理帐户。(这个假设mysql_no_login
插件安装。说明,请参阅使用MySQL账户连接到MySQL服务器MySQL账户后,使用GSSAPI / Kerberos设置,客户可以验证Kerberos和使用帐户连接到MySQL服务器。Kerberos身份验证可以发生之前或MySQL客户端程序调用时:
独立客户端用户可以获得TGT的MySQL之前调用MySQL客户端程序。例如,客户端用户可以使用kinit向Kerberos身份验证通过提供一个Kerberos主体名称和主密码。TGT缓存和使用其他Kerberos-aware应用程序可用,如客户端SASL LDAP身份验证插件。在这种情况下,MySQL客户端程序使用TGT MySQL服务器进行身份验证,所以调用客户端没有指定一个用户名和密码:
壳> kinit bredon@MYSQL。本地密码bredon@MYSQL.LOCAL:(在这里输入密码)壳> mysql——default-auth = authentication_ldap_sasl_client
如果MySQL客户端命令包括凭证,他们处理如下:
如果命令包括用户名、身份验证失败,如果这个名字不匹配在TGT校长的名字。
如果命令包含一个密码,密码将被忽略。因为认证是基于TGT,它可以成功即使用户提供的密码是不正确的。由于这个原因,这个插件会产生一个警告如果找到一个有效的TGT导致密码被忽略。
如果没有TGT,客户端SASL LDAP身份验证插件本身可以从KDC获得TGT。在这种情况下,调用客户端,指定的名称和密码与MySQL账户相关联的Kerberos主体(输入命令在一行,然后在提示符中输入主密码):
壳> = bredon@MYSQL mysql——default-auth = authentication_ldap_sasl_client——用户。本地——密码输入密码:(在这里输入密码)
如果客户端命令指定了用户名没有主体名和插件发现Kerberos客户端缓存空,因为没有TGT,身份验证失败。
如果你不确定是否存在一个TGT,您可以使用中检查。
验证发生如下:
客户端使用TGT使用Kerberos身份验证。
服务器发现LDAP条目本金和使用它的连接进行身份验证
bredon@MYSQL.LOCAL
MySQL代理帐户。组映射信息代理账户验证字符串(
“# krb_grp = proxied_krb_user '
)表明,经过身份验证的用户代理proxied_krb_user
。bredon@MYSQL.LOCAL
作为一个代理proxied_krb_user
,以下查询返回的输出如图所示:mysql >选择用户(),CURRENT_USER (), @@proxy_user;+ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - -用户()+ | | CURRENT_USER () | @@proxy_user | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - + | bredon@MYSQL。bredon@MYSQL LOCAL@localhost | proxied_krb_user@ % |”。当地' @ ' % ' | + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
的
用户()
值表示客户端命令(使用的用户名bredon@MYSQL.LOCAL
)和客户端连接的主机(本地主机
)。的
CURRENT_USER ()
价值的全称是代理用户帐户,包括proxied_krb_user
用户部分和%
主机部分。的
@@proxy_user
值表示的全名账户用于制造连接到MySQL服务器,包括bredon@MYSQL.LOCAL
用户部分和%
主机部分。这表明代理发生通过
bredon@MYSQL.LOCAL
代理用户帐户,bredon@MYSQL.LOCAL
假设特权授予proxied_krb_user
代理用户帐户。
TGT一旦获得了在客户端缓存,可以使用,直到它到期不指定密码。然而获得TGT,客户端插件使用它获取服务票和与服务器端插件。
当客户端插件本身获得TGT,客户端用户可能不希望被重用的TGT。中描述的/etc/krb5.conf文件可以使用导致客户端插件摧毁TGT当完成它。
服务器端插件没有获得TGT本身或Kerberos密码用于获得它。
LDAP身份验证插件无法控制缓存机制(存储在一个本地文件,内存,等等),但是Kerberos实用工具等kswitch可能用于这一目的。
/etc/krb5.confClient Configuration Parameters
客户端读取本地SASL LDAP插件
/etc/krb5.conf
文件。如果这个文件丢失或无法访问,出现一个错误。假设文件访问,可选的(appdefaults)
部分可用于提供信息使用的插件。这些信息中MySQL
节的一部分。例如:[appdefaults] MySQL = {ldap_server_host = " ldap_host.example.com " ldap_destroy_tgt = true}
客户端插件识别这些参数
MySQL
部分:的
ldap_server_host
值将指定LDAP服务器主机时,可以有用,主机与KDC服务器主机中指定(领域)
部分。默认情况下,插件使用KDC服务器主机作为LDAP服务器主机。的
ldap_destroy_tgt
值表示客户端插件是否破坏TGT在获得和使用它。默认情况下,ldap_destroy_tgt
是假
,但可以设置为真正的
为了避免TGT重用。(此设置只适用于客户端插件,创建的tgt不是tgt创建外部MySQL)。
LDAP服务器可以配置为代表的LDAP搜索到另一个LDAP服务器,一个功能叫做LDAP转诊。假设服务器
a.example.com
持有“dc =示例中,dc = com”
根DN和希望委托搜索到另一台服务器b.example.com
。为了支持它,a.example.com
将配置一个名叫推荐对象拥有这些属性:dn: dc =子树,dc =示例中,dc = com对象类:推荐对象类:extensibleObject dc:子树裁判:ldap: / /b.example.com/dc=subtree,dc =示例中,dc = com
启用LDAP推荐一个问题在于,搜索能与LDAP操作错误而失败当搜索基本DN根DN,和推荐对象不是集。MySQL DBA可能希望避免这样的推荐为LDAP身份验证插件错误,即使LDAP推荐可能设置在全球
ldap.conf
配置文件。plugin-specific基础上配置LDAP服务器是否应该与每个插件,使用LDAP转诊通信时设置authentication_ldap_simple_referral
和authentication_ldap_sasl_referral
系统变量。设置变量来在
或从
导致相应的LDAP身份验证插件告诉LDAP服务器是否使用推荐在MySQL身份验证。每个变量都有一个plugin-specific效果,不影响其他应用程序与LDAP服务器进行通信。这两个变量是从
默认情况下。