MySQL在企业版里为用户提供“Windows Pluggable Authentication”,用于在Windows上执行外部身份验证,使MySQL 服务器能够使用本机Windows服务对客户端连接进行身份验证。已经登录到Windows的用户可以根据其环境中的信息从MySQL客户端程序连接到服务器,而无需指定额外的密码。
客户端和服务器在认证握手时交换数据包。数据交换后,服务器创建了一个上下文对象,该对象用于标识Windows操作系统中客户端,包括客户端帐户的名称。Windows身份验证插件使用客户端的身份来检查它是定的帐户还是组的成员。
Windows身份验证插件提供以下功能:
外部身份验证:Windows身份验证使MySQL 服务器能够接受来自MySQL授权表之外的用户的连接。(这些用户已经登录到Windows)
支持代理用户:Windows身份验证可以向MySQL返回一个不同于客户端程序传递的外部用户名的用户名。这意味着插件可以返回MySQL用户,该用户定义了外部windows认证用户应该拥有的权限。例如,一个名为joe的Windows用户可以连接并拥有MySQL用户developer的权限。
外部身份验证
插件的安装使用非常简单,与其他插件的安装方式相同,可以预先写入my.ini配置文件,也可以在MySQL运行时执行
INSTALL PLUGIN authentication_windows SONAME 'authentication_windows.dll';
安装成功后,创建一个MySQL用户,将其与Windows的用户进行关联,例如,
CREATE USER sql_admin IDENTIFIED WITH authentication_windows AS '"YITAO.XU"';
之后,执行
mysql --user=sql_admin
无需输入密码即可登录MySQL服务器,用户的验证将通过Windows进行。插件除了支持指定用户,还可以支持组,或域。例如,
CREATE USER sql_accounting
IDENTIFIED WITH authentication_windows
AS 'SomeDomain\\Accounting';
关于具体的语句使用,读者可以参考官网手册,注意一下相关的语法。
代理用户
MySQL支持代理用户的概念,客户端可以使用一个帐户连接MySQL服务器进行身份验证,但可以在连接时拥有另一个帐户的权限。假设读者希望Windows用户使用单个用户名连接,但根据其Windows用户名和组名将其映射到特定的MySQL帐户时,可以使用代理用户。
假设local_user和MyDomain\domain_user应该映射到MySQL的local_wlad 帐户,MyDomain\Developers域组中的用户应该映射到MySQL的local_dev 帐户,本地管理员应该映射到MySQL的local_admin 帐户。则可以进行如下操作:
1.创建一个代理用户
CREATE USER win_proxy
IDENTIFIED WITH authentication_windows
AS 'local_user = local_wlad,
MyDomain\\domain_user = local_wlad,
MyDomain\\Developers = local_dev,
BUILTIN\\Administrators = local_admin';
2.为了保证代理用户能够正常工作,必须创建相关的代理账户
CREATE USER local_wlad
IDENTIFIED WITH mysql_no_login;
CREATE USER local_dev
IDENTIFIED WITH mysql_no_login;
CREATE USER local_admin
IDENTIFIED WITH mysql_no_login;
3.赋予代理权限
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的不同用户可以按照其映射的代理用户使用不同的权限。
以上内容是关于MySQL的外部认证功能的介绍,除了Windows之外还支持PAM和LDAP等方式,感兴趣的读者可以访问MySQL的官网。企业级用户如果有相关需求,可以直接利用企业版所提供的相关功能。
本文分享自 MySQL解决方案工程师 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!