Windows可插拔身份验证是商业产品MySQL Enterprise Edition中的一个扩展。要了解更多关于商业产品的信息,请参见https://www.10bet靠谱mysql.com/products/.
MySQL Enterprise Edition for Windows支持一种在Windows上执行外部认证的认证方法,使MySQL服务器能够使用本地Windows服务对客户端连接进行认证。已经登录到Windows的用户可以根据其环境中的信息从MySQL客户端程序连接到服务器,而不需要指定额外的密码。
客户端和服务器在认证握手过程中交换数据报文。作为交换的结果,服务器创建了一个安全上下文对象,该对象表示Windows操作系统中客户端的身份。此标识包括客户端帐户的名称。Windows可插入身份验证使用客户机的身份来检查它是给定的帐户还是组的成员。默认情况下,协商使用Kerberos进行身份验证,如果Kerberos不可用,则使用NTLM。
Windows可插入身份验证提供以下功能:
外部认证:Windows认证允许MySQL服务器接受来自MySQL授权表之外定义的登录到Windows的用户的连接。
代理用户支持:Windows认证可以返回给MySQL一个不同于客户端程序传递的外部用户名的用户名。这意味着插件可以返回MySQL用户,该用户定义了外部windows认证用户应该拥有的特权。以Windows用户为例,用户名为
乔
可以连接并拥有MySQL用户的权限开发人员
.
下表显示了插件和库文件名。控件命名的目录中必须包含该文件plugin_dir
系统变量。
表6.17 Windows认证的插件和库名称
插件或文件 | 插件或文件名 |
---|---|
服务器端插件 | authentication_windows |
客户端插件 | authentication_windows_client |
库文件 | authentication_windows.dll |
库文件只包含服务器端插件。客户端插件内置在libmysqlclient
客户端库。
服务器端Windows认证插件只包含在MySQL企业版中。它不包含在MySQL社区发行版中。客户端插件包含在所有发行版中,包括社区发行版。这允许来自任何发行版的客户端连接到加载了服务器端插件的服务器。
Windows认证插件支持MySQL 8.0支持的任何版本的Windows(参见https://www.10bet靠谱mysql.com/support/supportedplatforms/database.html).
以下部分提供了特定于Windows可插拔身份验证的安装和使用信息:
关于MySQL中可插入身份验证的一般信息,请参见第6.2.17节,“可插入身份验证”.代理用户信息请参见第6.2.18节,“代理用户”.
介绍安装Windows认证插件的操作步骤。关于安装插件的一般信息,请参见第5.6.1节,“安装和卸载插件”.
为了使服务器能够使用插件库文件,插件库文件必须位于MySQL插件目录中(该目录名为plugin_dir
系统变量)。如果需要,可以设置插件目录的位置plugin_dir
在服务器启动。
要在服务器启动时加载插件,请使用——plugin-load-add
选项来命名包含它的库文件。使用这种插件加载方法,每次服务器启动时都必须提供该选项。例如,将这些行放在服务器中my.cnf
文件:
(mysqld) plugin-load-add = authentication_windows.dll
修改后my.cnf
,重新启动服务器,使新设置生效。
或者,要在运行时加载插件,使用下面的语句:
INSTALL PLUGIN authentication_windows SONAME 'authentication_windows.dll';
安装插件
立即加载插件,并将其注册到mysql.plugins
系统表,使服务器在后续正常启动时加载它,而不需要——plugin-load-add
.
要验证插件的安装,请检查INFORMATION_SCHEMA。插件
表格或使用显示插件
声明(见第5.6.2节,“获取服务器插件信息”).例如:
从INFORMATION_SCHEMA中选择PLUGIN_NAME, PLUGIN_STATUS。PLUGIN_NAME像'%windows%';+------------------------+---------------+ | PLUGIN_NAME | PLUGIN_STATUS | +------------------------+---------------+ | authentication_windows |活跃 | +------------------------+---------------+
如果插件初始化失败,请检查服务器错误日志以获取诊断消息。
要将MySQL帐户与Windows认证插件关联,请参见使用Windows可插入身份验证.控件提供的附加插件控件authentication_windows_use_principal_name
而且authentication_windows_log_level
系统变量。看到第5.1.8节,“服务器系统变量”.
卸载Windows身份验证插件的方法取决于您如何安装它:
如果您在服务器启动时使用
——plugin-load-add
选项,重新启动不带该选项的服务器。如果您在运行时使用
安装插件
语句时,它将在服务器重新启动时继续安装。要卸载,请使用卸载插件
:卸载插件authentication_windows;
此外,删除任何设置Windows插件相关系统变量的启动选项。
Windows认证插件支持使用MySQL帐户,这样登录到Windows的用户可以连接到MySQL服务器,而不需要指定额外的密码。假定服务器运行时启用了服务器端插件,如安装Windows可插拔认证.一旦DBA启用了服务器端插件并设置了使用它的帐户,客户机就可以使用这些帐户进行连接,而不需要进行其他设置。
中的Windows身份验证插件认同
一个条款创建用户
语句,使用名称authentication_windows
.假设Windows用户Rafal
而且塔莎
应该被允许连接到MySQL,以及在管理员
或高级用户
组。要设置此操作,请创建一个名为sql_admin
使用Windows插件进行身份验证:
创建用户sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal, Tasha, Administrators, "Power Users"';
插件名称为authentication_windows
.后面的字符串作为
关键字为认证字符串。它指定Windows用户命名Rafal
或塔莎
允许MySQL用户向服务器进行身份验证sql_admin
的任何Windows用户管理员
或高级用户
组。后一个组名称包含一个空格,因此必须用双引号字符将其括起来。
创建sql_admin
登录到Windows的用户可以尝试使用该帐户连接到服务器:
C: \ > mysql——用户= sql_admin
这里不需要密码。的authentication_windows
插件使用Windows安全API来检查哪个Windows用户正在连接。如果该用户被命名Rafal
或塔莎
的成员管理员
或高级用户
组,服务器授予访问权限,客户端身份验证为sql_admin
并且拥有被授予的任何特权sql_admin
帐户。否则,服务器拒绝访问。
Windows身份验证插件的身份验证字符串语法如下:
该字符串由逗号分隔的一个或多个用户映射组成。
每个用户映射关联一个Windows用户或组名和一个MySQL用户名:
win_user_or_group_name = mysql_user_namewin_user_or_group_name
对于后一种语法,不带no
mysql_user_name
的值,隐式的值是MySQL用户创建的创建用户
声明。因此,这些语句是等价的:创建用户sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal, Tasha, Administrators, "Power Users"';创建用户sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal=sql_admin, Tasha=sql_admin, Administrators=sql_admin, "Power Users"=sql_admin';
每个反斜杠字符(
\
)的值必须加倍,因为反斜杠是MySQL字符串中的转义字符。不包含在双引号内的前导和尾随空格将被忽略。
非挂牌
win_user_or_group_name
而且mysql_user_name
值可以包含除等号、逗号或空格以外的任何内容。如果一个
win_user_or_group_name
或mysql_user_name
值用双引号括起来,引号内的所有内容都是值的一部分。这是必要的,例如,如果名称包含空格字符。除双引号和反斜杠外,双引号内的所有字符都是合法的。要包含这两个字符,请使用反斜杠转义。win_user_or_group_name
值使用Windows主体的常规语法,无论是本地的还是域中的。示例(注意反斜杠的双倍):域名\\用户。\\用户域名\\组。\组BUILTIN\\WellKnownGroup
当服务器调用插件对客户端进行身份验证时,插件会从左到右扫描身份验证字符串,寻找与Windows用户匹配的用户或组。如果有匹配,插件将返回相应的mysql_user_name
到MySQL服务器。如果没有匹配,则认证失败。
用户名匹配优先于组名匹配。假设Windows用户名为win_user
的成员win_group
认证字符串是这样的:
'win_group = sql_user1, win_user = sql_user2'
当win_user
连接到MySQL服务器,有一个匹配的win_group
和win_user
.插件验证用户为sql_user2
因为更特定的用户匹配优先于组匹配,即使组在身份验证字符串中列在前面。
Windows身份验证始终适用于来自运行服务器的同一台计算机的连接。对于跨计算机连接,两台计算机都必须向Windows Active Directory注册。如果在同一个Windows域,则不需要指定域名。也可以允许来自不同域的连接,如下所示:
CREATE USER sql_accounting WITH authentication_windows AS 'SomeDomain\\Accounting'
在这里SomeDomain
另一个域的名称。反斜杠字符是双倍的,因为它是字符串中的MySQL转义字符。
MySQL支持代理用户的概念,客户端可以使用一个帐户连接并验证MySQL服务器,但在连接时拥有另一个帐户的特权(参见第6.2.18节,“代理用户”).假设你想要Windows用户使用单个用户名连接,但是基于他们的Windows用户名和组名映射到特定的MySQL帐户,如下:
的
local_user
而且MyDomain \ domain_user
本地和域Windows用户应该映射到local_wlad
MySQL账户。用户
MyDomain \开发人员
域组应该映射到local_dev
MySQL账户。本地计算机管理员应该映射到
local_admin
MySQL账户。
要设置这个,创建一个代理帐户为Windows用户连接,并配置这个帐户,以便用户和组映射到适当的MySQL帐户(local_wlad
,local_dev
,local_admin
).另外,授予MySQL帐户相应的操作权限。下面的说明使用win_proxy
作为代理帐户,并且local_wlad
,local_dev
,local_admin
作为代理帐户。
创建代理MySQL帐户:
创建用户win_proxy IDENTIFIED WITH authentication_windows AS 'local_user = local_wlad, MyDomain\ domain_user = local_wlad, MyDomain\ developer = local_dev, BUILTIN\ Administrators = local_admin';
为了使代理工作,代理帐户必须存在,所以创建它们:
CREATE USER local_wlad IDENTIFIED WITH mysql_no_loginCREATE USER local_dev IDENTIFIED WITH mysql_no_login创建用户local_admin
代理帐户使用
mysql_no_login
身份验证插件,防止客户端使用该帐户直接登录MySQL服务器。相反,使用Windows进行身份验证的用户应该使用win_proxy
代理帐户。(这里假设插件已经安装。说明,请参阅第6.4.1.8节,“免登录可插拔身份验证”)。有关保护代理帐户不被直接使用的其他方法,请参阅防止直接登录到代理帐户.您还应该执行
格兰特
语句(未显示)授予每个代理帐户访问MySQL所需的特权。向代理帐户授予
代理
每个代理帐户的权限:将local_wlad的代理权限授予win_proxy在local_dev上授予代理权限给win_proxy将local_admin的代理权限授予win_proxy
现在Windows用户local_user
而且MyDomain \ domain_user
可以连接到MySQL服务器作为win_proxy
经过身份验证后,拥有身份验证字符串中给出的帐户特权(在本例中,local_wlad
).中的用户。MyDomain \开发人员
作为联系方式的群体win_proxy
有特权吗local_dev
帐户。中的用户。内装式\管理员
集团拥有特权local_admin
帐户。
要配置身份验证,使所有没有自己的MySQL帐户的Windows用户通过代理帐户,替换默认的代理帐户(“@”
)win_proxy
在前面的说明中。有关默认代理帐户的信息,请参见第6.2.18节,“代理用户”.
如果您的MySQL安装有匿名用户,它们可能与默认代理用户冲突。有关此问题的更多信息以及处理方法,请参见默认代理用户和匿名用户冲突.
要在Connector/NET 6.4.4及更高版本中使用Connector/NET连接字符串的Windows认证插件,请参见使用Windows原生身份验证插件.