10bet网址
MySQL的安全
相关的文档10bet官方网站 下载这个摘录
PDF (Ltr)- 2.2 mb
PDF (A4)- 2.2 mb
HTML下载(TGZ)- 453.0 kb
HTML下载(邮政编码)- 460.3 kb


6.1.7 LDAP可插入身份验证

请注意

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插件。看到

    先决条件LDAP可插入身份验证

    为MySQL使用LDAP可插入身份验证,必须满足这些先决条件:

    • LDAP服务器必须用于LDAP身份验证插件与交流。

    • LDAP用户经过身份验证的MySQL必须出现在由LDAP服务器的目录。

    • LDAP客户端库必须在服务器端系统上可用authentication_ldap_saslauthentication_ldap_simple使用插件。目前,图书馆是Windows原生支持的LDAP库,或OpenLDAP图书馆在非Windows系统。

    • 使用SASL-based LDAP身份验证:

      • LDAP服务器必须配置为与SASL服务器通信。

      • SASL客户端库必须在客户端系统上可用authentication_ldap_sasl_client使用插件。目前,仅支持图书馆是塞勒斯SASL库。

      • 使用一个特定的SASL验证方法,该方法所需的任何其他服务必须是可用的。例如,使用GSSAPI / Kerberos GSSAPI库和Kerberos服务必须是可用的。

如果客户端用户名和主机名匹配没有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可插入身份验证

本节描述如何安装LDAP身份验证插件。一般安装插件的信息,请参阅安装和卸载插件

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

服务器端插件库文件名称authentication_ldap_simpleauthentication_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通信服务:

  1. 创建一个文件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;
  2. 安全策略模块编译成二进制表示:

    checkmodule - m - m mysqlldap。te - o mysqlldap.mod
  3. 创建一个SELinux策略模块包:

    semodule_package - m mysqlldap。mod - o mysqlldap.pp
  4. 安装模块包:

    semodule我mysqlldap.pp
  5. SELinux策略改变时,重新启动MySQL服务器:

    服务mysqld重启

卸载LDAP可插入身份验证

LDAP身份验证插件用于卸载的方法取决于你如何安装:

  • 如果你安装了插件在服务器启动时使用——plugin-load-add没有这些选项选项,重启服务器。

  • 如果你安装了插件在运行时使用安装插件,他们仍然安装在服务器重启。卸载它们,使用卸载插件:

    卸载插件authentication_ldap_simple;卸载插件authentication_ldap_sasl;

此外,删除从你my.cnf文件的任何启动选项设置LDAP plugin-related系统变量。如果你使用设置保存坚持LDAP系统变量,使用重置持续删除的设置。

LDAP可插入身份验证和ldap.conf

安装使用OpenLDAP的ldap.conf文件提供了LDAP客户端全局默认值。选项可以设置在这个文件中影响LDAP客户端,包括LDAP身份验证插件。在这个优先顺序使用OpenLDAP配置选项:

  • 配置指定的LDAP客户端。

  • 配置中指定的ldap.conf文件。禁用使用这个文件,设置LDAPNOINIT环境变量。

  • OpenLDAP库内置的默认值。

如果图书馆违约或ldap.conf值不会产生适当的选项值,LDAP身份验证插件可以直接设置相关变量影响LDAP配置。例如,LDAP插件可以覆盖ldap.conf这样的参数:

LDAP身份验证的MySQL用户总体需求:

这里的指令假设下面的场景:

  • MySQL用户贝琪鲍里斯LDAP条目进行身份验证betsy_ldapboris_ldap,分别。(没有必要,MySQL和LDAP用户名称是不同的。使用不同的名字在这个讨论可以帮助澄清一个操作环境是否MySQL或LDAP)。

  • 使用LDAP条目uid属性来指定用户名。这可能取决于LDAP服务器。一些使用LDAP服务器cn用户名而不是属性uid。改变属性,修改authentication_ldap_simple_user_search_attrauthentication_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身份验证

为简单的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,但在某些配置可能是一个安全问题。这些措施减少风险:

有匹配的LDAP条目包含一组属性,该属性的值是经过身份验证的用户名,如果该值不同于贝琪,代理就会发生。使用一组属性的例子,看到创建用户声明中没有通过子句指定betsy_ldapLDAP专有名称、认证尝试将使用客户端提供的用户名(在本例中,贝琪)。在缺乏一个LDAP条目贝琪、身份验证会失败。

SASL-Based 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身份验证与代理

LDAP身份验证插件支持代理,使一个用户连接到MySQL服务器作为一个用户,但假设不同的用户的特权。本节描述基本的LDAP插件代理支持。LDAP插件也支持群体偏好和代理用户映射规范;看到

创建默认代理MySQL账户:

创建用户”@“%”与authentication_ldap_sasl确认;

代理账户没有定义为“auth_string条款名称LDAP用户DN。因此:

  • 当一个客户端连接,客户端用户名变成了LDAP用户名来搜索。

  • 匹配的LDAP条目将包括一组属性命名代理MySQL账户定义了客户端应该有特权。

请注意

如果你的MySQL安装有匿名用户,他们可能与默认代理用户冲突。关于这个问题的更多信息,以及处理的方式,明白了创建用户“会计”@“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命令行客户端连接到MySQL服务器岜沙

壳> mysql——用户=岜沙密码输入密码:basha_password(岜沙LDAP密码)

验证发生如下:

  1. 使用默认的服务器进行身份验证的连接“@‘%’代理账户,为客户端用户岜沙

  2. 匹配的LDAP条目:

    uid =岜沙,ou =人,dc =例子,dc = com, cn =会计
  3. 有组属性匹配的LDAP条目cn =会计,所以会计成为认证用户代理。

  4. 身份验证的用户不同于客户端用户名岜沙,结果岜沙作为一个代理会计,岜沙假设代理的特权会计帐户。以下查询返回的输出如图所示:

    mysql >选择用户(),CURRENT_USER (), @@proxy_user;+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + |用户()| CURRENT_USER () | @@proxy_user | + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + | basha@localhost | accounting@localhost“@‘%’| | + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - +

这表明岜沙使用特权授予代理会计MySQL账户,代理发生通过默认代理用户帐户。

现在连接罗勒而不是:

壳> mysql用户=罗勒,密码输入密码:basil_password(罗勒LDAP密码)

身份验证过程罗勒类似于先前描述岜沙:

  1. 使用默认的服务器进行身份验证的连接“@‘%’代理账户,为客户端用户罗勒

  2. 匹配的LDAP条目:

    uid =罗勒,ou =人,dc =例子,dc = com, cn = front_office
  3. 有组属性匹配的LDAP条目cn = front_office,所以front_office成为认证用户代理。

  4. 身份验证的用户不同于客户端用户名罗勒,结果罗勒作为一个代理front_office,罗勒假设代理的特权front_office帐户。以下查询返回的输出如图所示:

    mysql >选择用户(),CURRENT_USER (), @@proxy_user;+ - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + |用户()| CURRENT_USER () | @@proxy_user | + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - + | basil@localhost | front_office@localhost“@‘%’| | + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - - - - - - - - - - - - +

这表明罗勒使用特权授予代理front_officeMySQL账户,代理发生通过默认代理用户帐户。

考虑下面的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代理用户名,如果有的话。对于示例代理帐户,映射发生如下:

  • 如果匹配的组名grp1grp3,这些都是与用户名验证字符串相关联userauserc,分别。插件使用相应的关联的用户名作为代理用户名。

  • 如果匹配的组名grp2,没有身份验证字符串相关联的用户名。插件使用grp2代理用户名。

如果LDAP服务器返回一组在DN格式,LDAP插件解析DN组提取组名称。

指定LDAP组偏好和映射信息,这些原则应用:

LDAP身份验证方法

LDAP身份验证插件使用一个可配置的身份验证方法。可用适当的系统变量和方法的选择是plugin-specific:

看到每个允许的信息的系统变量的描述方法。同时,根据不同的方法,可能需要额外的配置,如以下部分所述。

GSSAPI / Kerberos身份验证方法

通用安全服务应用程序编程接口(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身份验证:

  • 检查Kerberos设置

    下面的例子显示了如何在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)。

    与假设满足,遵循这个过程:

    1. 验证Kerberos图书馆是正确安装和配置的操作系统。例如,配置一个MYSQL.LOCAL域使用MySQL认证期间,/etc/krb5.confKerberos配置文件应该包含这样的:

      (领域)MYSQL。当地= {kdc = ldap_auth.example.com admin_server = ldap_auth.example.com default_domain = MYSQL。当地}
    2. 您可能需要添加一个条目设置服务器主机:

      198.51.100.10 a ldap_auth ldap_auth.example.com
    3. 检查是否Kerberos身份验证是正确的:

      1. 使用kinitKerberos身份验证:

        kinit bredon@MYSQL.LOCAL

        Kerberos主体命名的命令进行身份验证bredon@MYSQL.LOCAL。输入时主要的密码命令提示。KDC返回一个TGT是在客户端缓存,供其他Kerberos-aware应用程序使用。

      2. 使用检查是否正确获得TGT。输出应该类似这样:

        票缓存:文件:/ tmp / krb5cc_244306默认主:bredon@MYSQL。当地有效开始到期服务主体03/23/2020 08:18:33 03/23/2020 18:18:33 krbtgt / MYSQL.LOCAL@MYSQL.LOCAL
    4. 检查是否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插件配置如下:

    创建一个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,您可以使用检查。

      验证发生如下:

      1. 客户端使用TGT使用Kerberos身份验证。

      2. 服务器发现LDAP条目本金和使用它的连接进行身份验证bredon@MYSQL.LOCALMySQL代理帐户。

      3. 组映射信息代理账户验证字符串(“# krb_grp = proxied_krb_user ')表明,经过身份验证的用户代理proxied_krb_user

      4. 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服务器,一个功能叫做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_referralauthentication_ldap_sasl_referral系统变量。设置变量来导致相应的LDAP身份验证插件告诉LDAP服务器是否使用推荐在MySQL身份验证。每个变量都有一个plugin-specific效果,不影响其他应用程序与LDAP服务器进行通信。这两个变量是默认情况下。