写一篇关于MySQL身份验证的内容,在这一篇里主要介绍MySQL的插件验证方式。
在介绍插件验证方式之前,简要说明一下MySQL的访问控制是如何实现的。
MySQL的访问控制通过两个步骤来实现:
一、验证连接:在这个步骤里包括对帐户和密码是否正确进行验证以及账户是否被锁定。如果没有通过验证,则服务器拒绝访问,反之进入第二步。
二、请求验证:在这个步骤里,服务器对用户发出的每个操作请求进行检查,确认该账户是否有权去执行该操作。
因此,使用插件进行身份验证的过程,属于验证连接的步骤。当客户端连接到MySQL服务器时,服务器会使用客户端提供的用户名和主机名从mysql.user系统表里面查询匹配的记录,然后使用记录里面提供的验证插件对客户端进行验证:
MySQL使用插件方式进行验证可以带来如下好处:
MySQL8.0目前提供如下验证插件:
通常,使用插件验证方式需要在服务器端和客户端安装相对应的插件。服务器端的插件会验证客户端的连接,客户端的插件通常会内嵌到客户端程序里。当客户端连接到服务器时,服务器会通知客户端应该使用哪个插件。用户创建账户时,需要指定服务器端适当的插件,如果使用默认的插件,则不需要指定。服务器可以通过--default-authentication-plugin=plugin_name来设置默认的插件。当服务器和客户端同时使用默认插件时,服务器不需要和客户端进行往返的通信。mysql和mysqladmin客户端可以使用--default-auth=plugin_name选项来指定使用的插件。如果客户端程序无法找到插件的库文件,可以通过--plugin-dir=dir_name来指定插件库文件位置。
插件验证方式允许为MySQL账户灵活选择验证方法,但是,有时候客户端无法通过插件进行连接,其原因是客户端与服务器的插件不兼容。当用户使用8.0的时候,发现之前正常使用的客户端无法进行连接,原因是使用5.7.22之前版本的客户端连接MySQL8.0时,需要使用caching_sha2_password进行验证,但是5.7版本的客户端不包括该插件,该插件是MySQL8.0首次引入的。(5.7.23之后的版本可以使用)同样的原因,MySQL5.5的客户端无法连接MySQL5.6服务器,因为sha256_password是在5.6引入的。另外一点需要注意的是,使用社区版的mysql客户端,无法通过企业版的LDAP插件连接企业版服务器。
关于插件验证的内容介绍到这里,更为详细的内容可以访问“https://dev.mysql.com/doc/refman/8.0/en/pluggable-authentication.html”
感谢您关注MySQL!
本文分享自 MySQL解决方案工程师 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!