前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MySQL身份验证——Pluggable Authentication

MySQL身份验证——Pluggable Authentication

作者头像
MySQLSE
发布2020-09-28 15:16:10
2.2K0
发布2020-09-28 15:16:10
举报
文章被收录于专栏:MySQL解决方案工程师

写一篇关于MySQL身份验证的内容,在这一篇里主要介绍MySQL的插件验证方式。

在介绍插件验证方式之前,简要说明一下MySQL的访问控制是如何实现的。

MySQL的访问控制通过两个步骤来实现:

一、验证连接:在这个步骤里包括对帐户和密码是否正确进行验证以及账户是否被锁定。如果没有通过验证,则服务器拒绝访问,反之进入第二步。

二、请求验证:在这个步骤里,服务器对用户发出的每个操作请求进行检查,确认该账户是否有权去执行该操作。

因此,使用插件进行身份验证的过程,属于验证连接的步骤。当客户端连接到MySQL服务器时,服务器会使用客户端提供的用户名和主机名从mysql.user系统表里面查询匹配的记录,然后使用记录里面提供的验证插件对客户端进行验证:

  • 如果服务器无法找到所需验证插件,服务器拒绝客户端连接并报错。
  • 如果服务器具有该插件,插件会返回服务器一个状态,表示用户是否提供了正确的密码,是否允许其进行连接。

MySQL使用插件方式进行验证可以带来如下好处:

  • DBA可以为不同的用户选择不同的验证方式。
  • 当客户端连接服务器时,可以选择外部验证的方式。外部验证方式是指密码等凭据信息没有保存在mysql.user系统表里,MySQL的原生验证方式是将相关数据保存在该表里。
  • 使用插件式验证方式还可以允许使用代理用户,使得返回服务器的用户名与实际连接的用户名不同。

MySQL8.0目前提供如下验证插件:

  • sha256_password和caching_sha2_password:MySQL提供两种使用SHA-256哈希方法的插件,其中caching_sha2_password是MySQL8.0的默认验证插件,它与sha256_password基本相同,但是会在服务器侧使用缓存,以获取更好的性能和额外的功能。
  • mysql_native_password:该插件将密码通过哈希方法存储在系统表里,是8.0之前的默认方式。
  • mysql_clear_password:该插件是内嵌到MySQL客户端里的,允许客户端以明文的形式发送密码到服务器,可以与任何需要明文密码的服务器端插件一起使用。
  • mysql_no_login:该插件可以阻止客户端直接登录服务器,使用它,系统可以限定使用代理用户,或者具有存储程序、视图权限的用户来访问数据库,从而不会将相关操作暴露给普通用户。
  • auth_socket:通过UNIX的sockets进行本地主机登录验证。
  • test_plugin_server :MySQL包含一个用于测试的插件,检查账户凭据,并将结果写入日志。
  • authentication_pam:使用PAM(Pluggable Authentication Modules)进行外部验证的插件,并且可以支持代理用户,该插件包含在MySQL的企业版内。
  • authentication_windows:允许在Windows上执行外部验证的插件,该插件包含在MySQL企业版内。 authentication_ldap_simple和authentication_ldap_sasl:支持使用LDAP (Lightweight Directory Access Protocol)对MySQL用户进行验证,该插件同样包含在企业版内。

通常,使用插件验证方式需要在服务器端和客户端安装相对应的插件。服务器端的插件会验证客户端的连接,客户端的插件通常会内嵌到客户端程序里。当客户端连接到服务器时,服务器会通知客户端应该使用哪个插件。用户创建账户时,需要指定服务器端适当的插件,如果使用默认的插件,则不需要指定。服务器可以通过--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!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-02-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 MySQL解决方案工程师 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档