Windows可插拔身份验证是MySQL企业版的一个扩展,一个商业产品。要了解更多的商业产品,请参见https://www.10bet靠谱mysql.com/products/。
MySQL Enterprise Edition for Windows支持一种身份验证方法,在Windows上执行外部身份验证,使MySQL服务器使用本机Windows服务来验证客户端连接。已经登录到Windows的用户可以根据环境中的信息从MySQL客户端程序连接到服务器,而不需要指定额外的密码。
客户端和服务器在验证握手过程中交换数据包。作为这种交换的结果,服务器创建了一个安全上下文对象,该对象表示Windows操作系统中客户机的身份。此标识包括客户端帐户的名称。Windows可插拔身份验证使用客户机的身份来检查它是给定的帐户还是组的成员。缺省情况下,协商使用Kerberos进行身份验证,如果Kerberos不可用,则使用NTLM进行身份验证。
Windows可插拔身份验证提供了以下功能:
外部身份验证:Windows身份验证使MySQL Server能够接受从已登录到Windows的MySQL Grant表中定义的用户的连接。
代理用户支持:Windows身份验证可以返回MySQL与客户端程序传递的外部用户名不同的用户名。这意味着插件可以返回定义外部Windows认证用户应该具有的权限的MySQL用户。例如,Windows用户名为
乔
可以连接并拥有一个MySQL用户名为开发人员
。
下表显示了插件和库文件名。文件必须位于以。命名的目录中plugin_dir.
系统变量。
表6.17 Windows身份验证的插件和库名称
插件或文件 | 插件或文件名 |
---|---|
服务器端插件 | 身份验证_Windows. |
客户端插件 | authentication_windows_client |
库文件 | 身份验证_windows.dll. |
库文件仅包含服务器端插件。客户端插件内置于libmysqlclient
客户图书馆。
服务器端Windows身份验证插件仅包含在MySQL企业版中。它没有包含在MySQL社区发行版中。客户端插件包含在所有发行版中,包括社区发行版。这允许来自任何分发版的客户端连接到加载了服务器端插件的服务器。
MySQL 8.0支持的任何版本的Windows都支持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
,重新启动服务器使新设置生效。
或者,要在运行时加载插件,请使用此语句:
安装plugin身份验证_windows soname'身份验证_windows.dll';
安装插件
立即加载插件,并将其注册到mysql.plugins
系统表使服务器为每个后续正常启动加载它而无需-plugin-load-add
。
要验证插件安装,请检查Information_schema.plugins.
表或使用显示插件
声明(参见第5.6.2节“获取服务器插件信息”)。例如:
mysql>从信息_schema.plugins中选择plugin_name,plugin_status.plugins,其中plugin_name喜欢'%windows%';+ ----------------------------------- + |plugin_name |plugin_status |+ ----------------------------------- + |身份验证_Windows |活跃|+ ---------------------------------- +
如果插件无法初始化,请检查服务器错误日志以获取诊断消息。
要将MySQL帐户与Windows身份验证插件关联,请参见使用Windows可插拔身份验证。插件控件提供了额外的插件控件authentication_windows_use_principal_name
和身份验证_windows_log_level.
系统变量。看到第5.1.8节“服务器系统变量”。。
用于卸载Windows身份验证插件的方法取决于您安装的方式:
如果您在服务器启动时使用
-plugin-load-add
选项,在没有选项的情况下重新启动服务器。如果您在运行时使用
安装插件
语句,它在服务器重启时仍然安装。要卸载它,请使用卸载插件
:卸载Plugin身份验证_Windows;
此外,删除设置Windows插件相关系统变量的任何启动选项。
Windows身份验证插件支持使用MySQL帐户,使登录到Windows的用户可以连接到MySQL服务器,而无需指定其他密码。假设服务器正在使用Server-Side插件运行,如上所述安装Windows可插拔身份验证。一旦DBA启用了服务器端插件并设置了使用该插件的帐户,客户端就可以使用这些帐户进行连接,而无需进行其他设置。
参考文档中的Windows身份验证插件认同
A.创建用户
声明,使用名称身份验证_Windows.
。假设Windows用户Rafal
和塔莎
应该允许连接到MySQL,以及在管理员
或者电力用户
团体。要设置此功能,请创建名为的MySQL帐户sql_admin
使用Windows插件进行身份验证:
CREATE USER sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal, Tasha, Administrators, '高级用户';
插件名称是身份验证_Windows.
。弦线以下作为
关键字是身份验证字符串。它指定Windows用户名为Rafal
或者塔莎
被允许对服务器进行身份验证为MySQL用户sql_admin
,任何Windows用户都是如此管理员
或者电力用户
团体。后一组名称包含一个空格,因此必须用双引号字符引用。
在您创建sql_admin
帐户,登录Windows的用户可以尝试使用该帐户连接到服务器:
C: \ > mysql——用户= sql_admin
这里不需要密码。的身份验证_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用户创建用户
陈述。因此,这些陈述是等同的:CREATE USER sql_admin IDENTIFIED WITH authentication_windows AS 'Rafal, Tasha, Administrators, '高级用户';CREATE USER sql_admin IDENTIFIED by authentication_windows AS 'Rafal=sql_admin, Tasha=sql_admin, Administrators=sql_admin, "高级用户"=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主体使用常规语法。示例(注意反斜杠的重复):域用户。域用户域组。组内建
当服务器调用以验证客户端时,该插件扫描向右向右左右扫描到Windows用户的用户或组匹配的身份验证字符串。如果有匹配项,则插件返回相应的mysql_user_name.
到MySQL服务器。如果没有匹配,身份验证失败。
用户名匹配优先于组名匹配。假设Windows用户名为Win_User.
是win_group
和身份验证字符串如下所示:
'win_group = sql_user1,win_user = sql_user2'
什么时候Win_User.
连接到MySQL Server,既可以匹配win_group
和Win_User.
。该插件将用户身份验证为sql_user2.
因为更具体的用户匹配优先于组匹配,即使组在身份验证字符串中列在首位。
Windows身份验证始终适用于来自服务器正在运行的同一台计算机的连接。对于交叉计算机连接,必须在Windows Active Directory中注册两个计算机。如果它们位于同一Windows域中,则不必指定域名。也可以允许来自不同域的连接,如本例所示:
CREATE USER sql_accounting IDENTIFIED 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账户。
要将其设置为UP,请为Windows用户创建一个代理帐户以连接到,并配置此帐户,以便用户和组映射到相应的MySQL帐户(local_wlad.
,local_dev.
,local_admin
)。此外,授予MySQL帐户适用于他们需要执行的操作的权限。以下说明使用win_proxy
作为代理帐户,和local_wlad.
,local_dev.
, 和local_admin
作为代理账户。
创建代理MySQL帐户:
CREATE USER 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 by mysql_no_login;CREATE USER local_dev IDENTIFIED by mysql_no_login;CREATE USER local_admin IDENTIFIED by mysql_no_login;
代理帐户使用
mysql_no_login
验证插件,防止客户端使用帐户直接登录MySQL服务器。相反,使用Windows进行身份验证的用户应该使用win_proxy
代理帐户。(这假设安装了插件。有关说明,请参阅第6.4.1.8节“无登录可插拔身份验证”)。有关保护代理帐户不被直接使用的替代方法,请参阅防止直接登录到代理帐户。你还应该执行
格兰特
授予每个代理帐户MySQL访问所需的权限的语句(未示出)。授予代理帐户
代理
每个代理帐户的特权:GRANT PROXY ON local_wlad TO win_proxy;GRANT PROXY ON local_dev TO win_proxy;GRANT PROXY ON local_admin TO 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本地身份验证插件。