MySQL中的可插拔身份验证(Pluggable Authentication)(二)

Pluggable Authentication(PAM,即可插拔式认证模块)是一种高效且灵活的用户级别的认证方式,广泛应用于现代操作系统,特别是Linux服务器中。它允许数据库管理员(DBAs)为MySQL用户帐户选择和更改不同的认证方法。

1 身份验证插件客户端/服务器兼容性

可插拔身份验证使MySQL帐户在选择身份验证方法时具有灵活性,但在某些情况下,由于客户端和服务器之间的身份验证插件不兼容,无法建立客户端连接。

客户端成功连接到给定服务器上的给定帐户的一般兼容性原则是,客户端和服务器都必须支持帐户所需的身份验证方法。由于身份验证方法是由身份验证插件实现的,因此客户端和服务器都必须支持帐户所需的身份验证插件。

身份验证插件不兼容可能以各种方式出现。示例:

  • 使用5.7.22或更低版本的MySQL 5.7客户端连接到使用caching_sha2_password进行身份验证的MySQL 8.0服务器帐户。这失败了,因为5.7客户端无法识别MySQL 8.0中引入的插件。(这个问题在5.7.23版本的MySQL 5.7中得到了解决,当时MySQL客户端库和客户端程序中添加了caching_sha2_password客户端支持。)
  • 使用MySQL 5.7客户端连接到5.7之前的服务器帐户,该帐户使用MySQL_old_password进行身份验证。失败的原因有很多。首先,这样的连接需要--secure-auth=0,这不再是受支持的选项。即使支持该插件,5.7客户端也无法识别该插件,因为它已在MySQL 5.7中删除。
  • 使用社区分发版的MySQL 5.7客户端连接到MySQL 5.7 Enterprise服务器帐户,该帐户使用仅限Enterprise的LDAP身份验证插件之一进行身份验证。此操作失败,因为社区客户端没有访问企业插件的权限。

一般来说,当在来自同一MySQL分发版的客户端和服务器之间进行连接时,不会出现这些兼容性问题。当在不同MySQL系列的客户端和服务器之间建立连接时,可能会出现问题。当MySQL引入新的验证插件或删除旧的验证插件时,这些问题是开发过程中固有的。为了最大限度地减少不兼容的可能性,请定期及时升级服务器、客户端和连接器。

2 身份验证插件连接器编写注意事项

MySQL客户端/服务器协议存在各种实现。libmysqlclientC API客户端库就是一个实现。一些MySQL连接器(通常不是用C编写的)提供了自己的实现。然而,并不是所有的协议实现都以相同的方式处理插件身份验证。本节描述了协议实现者应该考虑的身份验证问题。

在客户端/服务器协议中,服务器告诉连接客户端它认为默认的身份验证插件。如果客户端使用的协议实现尝试加载默认插件,而该插件在客户端不存在,则加载操作失败。如果默认插件不是客户端尝试连接的帐户实际需要的插件,则这是不必要的失败。

如果客户端/服务器协议实现没有自己的默认身份验证插件概念,并且总是试图加载服务器指定的默认插件,则如果该插件不可用,则会失败并出现错误。

为了避免这个问题,客户端使用的协议实现应该有自己的默认插件,并应将其作为第一选择(或者,在无法加载服务器指定的默认插件的情况下,返回到该默认插件)。例如:

  • 在MySQL 5.7中,libmysqlclient使用MySQL_native_password或通过MySQL_options()的MySQL_default_AUTH选项指定的插件作为默认选项。
  • 当5.7客户端尝试连接到8.0服务器时,服务器会指定caching_sha2_password作为其默认身份验证插件,但客户端仍会根据mysql_native_password或通过mysql_default_AUTH指定的任何内容发送凭据详细信息。
  • 客户端加载服务器指定的插件的唯一时间是针对更改插件请求,但在这种情况下,它可以是任何插件,具体取决于用户帐户。在这种情况下,客户端必须尝试加载插件,如果该插件不可用,则错误不是可选的。

3 对可插拔身份验证的限制

“本机身份验证”是指根据存储在mysql.user系统表中的密码进行身份验证。在实现可插拔身份验证之前,这与旧的MySQL服务器提供的身份验证方法相同。“Windows本机身份验证”是指使用已登录Windows的用户的凭据进行身份验证,由Windows本机验证插件(简称“Windows插件”)实现。

3.1 常规可插拔身份验证限制

  • 连接器/C++:使用此连接器的客户端只能通过使用本机身份验证的帐户连接到服务器。

异常:如果连接器是为了动态(而不是静态)链接到libmysqlclient而构建的,并且如果安装了当前版本的libmysqlclient,或者连接器是从源代码重新编译以链接到当前libmysqlclient的,则连接器支持可插式身份验证。

  • 连接器/NET:使用连接器/NET的客户端可以通过使用本地身份验证或Windows本地身份验证的帐户连接到服务器。
  • 连接器/PHP:使用此连接器的客户端只能通过使用本机身份验证的帐户连接到服务器,当使用MySQL PHP本机驱动程序(mysqlnd)进行编译时。
  • Windows本机身份验证:通过使用Windows插件的帐户进行连接需要安装Windows域。如果没有它,将使用NTLM身份验证,然后只能进行本地连接;也就是说,客户端和服务器必须在同一台计算机上运行。
  • 代理用户:代理用户支持的范围是,客户端可以通过使用实现代理用户功能的插件(即,可以返回与连接用户不同的用户名的插件)验证的帐户进行连接。例如,PAM和Windows插件支持代理用户。mysql_native_password和sha256_password身份验证插件默认不支持代理用户,但可以配置为支持代理用户;请参阅服务器对代理用户映射的支持。
  • 复制:复制副本不仅可以使用使用本机身份验证的复制用户帐户,而且如果所需的客户端插件可用,还可以通过使用非本机身份证明的复制用户账户进行连接。如果插件内置在libmysqlclient中,则默认情况下它是可用的。否则,插件必须安装在复制副本一侧的由复制副本的plugin_dir系统变量命名的目录中。
  • FEDERATED表:FEDERATED表只能通过使用本机身份验证的远程服务器上的帐户访问远程表。

3.2 可插拔身份验证和第三方连接器

第三方连接器开发人员可以使用以下指南来确定连接器是否准备好利用可插拔身份验证功能,以及采取哪些步骤使其更符合要求:

  • 未对其进行更改的现有连接器使用本机身份验证,使用该连接器的客户端只能通过使用本机验证的帐户连接到服务器。但是,您应该针对最新版本的服务器测试连接器,以验证此类连接是否仍然正常工作。

异常:如果连接器动态(而不是静态)链接到libmysqlclient,并且如果安装了当前版本的libmysqlclient则加载该版本,则连接器可能在不进行任何更改的情况下使用可插入身份验证。

  • 为了利用可插入的身份验证功能,应该根据当前版本的libmysqlclient重新链接基于libmysqlclient的连接器。这使连接器能够支持通过需要客户端插件的帐户进行连接,这些插件现在内置在libmysqlclient中(例如PAM身份验证所需的明文插件和Windows本机身份验证所需要的Windows插件)。与当前的libmysqlclient链接还使连接器能够访问安装在默认MySQL插件目录中的客户端插件(通常是由本地服务器的plugin_dir系统变量的默认值命名的目录)。

如果连接器动态链接到libmysqlclient,则必须确保在客户端主机上安装了较新版本的libmysqlclient并且连接器在运行时加载它。

  • 连接器支持给定身份验证方法的另一种方式是直接在客户端/服务器协议中实现它。Connector/NET使用此方法为Windows本机身份验证提供支持。
  • 如果连接器应该能够从不同于默认插件目录的目录加载客户端插件,那么它必须为客户端用户实现一些指定目录的方法。这方面的可能性包括命令行选项或环境变量,连接器可以从中获取目录名。标准MySQL客户端程序(如MySQL和mysqladmin)实现了一个--plugin-dir选项。
  • 连接器对代理用户的支持取决于其支持的身份验证方法是否允许代理用户。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/40848.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ffmpeg将多个yuv文件编码为MP4视频文件

一、编码方案 在视频录制时,每一帧保存为一个yuv文件,便于纠错和修改。在编码为MP4文件时,我的方案是将所有yuv文件先转码为单个MP4文件,然后使用ffmpeg的concat功能拼接为完整的视频。 二、shell脚本 #!/bin/bash# 检查参数数量…

MYSQL8.0环境部署

创建用户 groupadd mysql useradd -g mysql mysql 删除原来的包 # rpm -qa|grep mysql # rpm -qa|grep mari mariadb-libs-5.5.68-1.el7.x86_64 # rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64 解压 cd /usr/local & mkdir mysql cd mysql # cp mysql-8…

Ubuntu 22.04 安装中文字体

笔者在用OpenCV4.9处理图片加水印时,中文乱码。原来是Ubuntu 22.04发行版缺少中文字体支持,因此,笔者就找资料安装了需要的中文字体,特此记录,以备后查。 1、打开终端: 2、更新软件包列表: su…

【LC刷题】DAY22:491 46 47 332 51 37

【LC刷题】DAY22:491 46 47 332 51 37 文章目录 【LC刷题】DAY22:491 46 47 332 51 37491. 非递减子序列 [link](https://leetcode.cn/problems/non-decreasing-subsequences/description/)46. 全排列 [link](https://leetcode.cn/problems/permutations…

水利行业的智慧化转型实践:结合具体案例,探讨智慧水利在提升水资源利用效率、改善水生态环境方面的实际效果

目录 一、引言 二、智慧水利的定义与意义 三、智慧水利在提升水资源利用效率方面的实践 1. 智慧灌溉系统 2. 智慧供水系统 3. 智慧水务管理平台 四、智慧水利在改善水生态环境方面的实践 1. 智慧水质监测系统 2. 智慧水生态修复系统 3. 智慧防洪减灾系统 五、具体案例…

如何在 Odoo 16 中添加计算字段的搜索过滤器

首先,了解 Odoo 使用计算字段的原因很重要。当我们需要从其他字段获取计算值或计算值时,就会使用计算字段。换句话说,不是从数据库中检索值,而是可以使用函数计算字段的值。计算字段的一个例子是产品总金额,即通过将产…

EtherCAT通讯介绍

一、EtherCAT简介 EtherCAT(Ethernet for Control Automation Technology)是一种实时以太网技术,是由德国公司Beckhoff Automation在2003年首次推出的。它是一种开放的工业以太网标准,被设计用于满足工业自动化应用中的高性能和低…

汇聚荣拼多多评价好不好?

汇聚荣拼多多评价好不好?在探讨电商平台的口碑时,用户评价是衡量其服务质量和商品质量的重要指标。拼多多作为国内领先的电商平台之一,其用户评价自然成为消费者选择购物平台时的参考依据。针对“汇聚荣拼多多评价好不好?”这一问题,可以从…

Vue3 Hooks 用法 scrollTop, mousemoveHandler,useCountDown

三个实例来自 learn_vue: 【教学工程】学习vue2/vue3 (gitee.com) 目录 1. 何为Hooks 2. 使用场景 3. 常见的 Hooks 函数 4. 实例 4.1简易hook 例子 4.2 自定义scrolltop例子 4.3 mousemoveHandler例子 4.4 useCountDown例子 1. 何为Hooks Hooks 是一种函数,用于…

vue css 链式布局模式

<div class"pp-wrap"> <div class"pp-left"><!--跳活动反思--><div class"even-box" v-for"(item,index) in trackingPtoPLeftList" :key"index" click"jumpReview(item)"><div …

echarts柱状选中shadow阴影背景宽度设置

使用line&#xff0c;宽度增大到所需要的宽度&#xff0c;设置下颜色透明度就行 tooltip: {trigger: axis,//把阴影的层级往下降z:-15,axisPointer: {type: line,lineStyle: {color: rgba(150,150,150,0.3),width: 44,type: solid,},}, }, series: [{type: bar,barWidth:20,//…

python自动化办公之BeautifulSoup爬取并解析html文本

用到的库&#xff1a;BeautifulSoup 实现效果&#xff1a;爬取网站内容&#xff0c;拿到html文本并解析html文本 代码&#xff1a; 先爬取 # 先导入requests包 import requests urlhttps://www.baidu.com responserequests.get(url) # 做1个断言&#xff0c;如果执行成功&a…

【C语言】—— 文件操作(上)

【C语言】—— 文件操作&#xff08;上&#xff09; 一、 为什么使用文件二、 什么是文件2.1、 程序文件2.2、 数据文件2.3、 文件名2.4、二进制文件与文本文件 三、 文件的打开和关闭3.1、流和标准流&#xff08;1&#xff09;流&#xff08;2&#xff09;标准流 3.2、文件指针…

64.函数参数和指针变量

目录 一.函数参数 二.函数参数和指针变量 三.视频教程 一.函数参数 函数定义格式&#xff1a; 类型名 函数名(函数参数1,函数参数2...) {代码段 } 如&#xff1a; int sum(int x&#xff0c;int y) {return xy; } 函数参数的类型可以是普通类型&#xff0c;也可以是指针类…

Python可实现各种算法库之algorithms使用详解

概要 在软件开发和计算机科学领域,算法是解决问题的核心工具。Python 作为一种广泛使用的编程语言,提供了多种内置和第三方库来实现各种算法。algorithms 库是一个集合了多种常用算法和数据结构的 Python 库,旨在帮助开发者快速实现和应用这些算法。本文将详细介绍 algorit…

QT元对象系统的用法技巧

文章目录 声明对象属性获取对象的属性和方法通过对象名称查找对象判断对象的继承关系给类添加额外的信息Qt的元对象系统是Qt框架的一个核心特性,它为对象提供了运行时类型信息、属性系统、信号和槽机制以及动态属性功能。这个系统是由Qt的元对象编译器(MOC)支持的,MOC是一个预…

代码随想录-DAY②-数组——leetcode 977 | 209

977 思路 使用两个指针分别指向位置 0 和 n−1&#xff0c;每次比较两个指针对应的数&#xff0c;选择较大的那个逆序放入答案并移动指针。这种方法无需处理某一指针移动至边界的情况。 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(1) 代码 class Solution { pub…

SpringCloud Feign 报错 Request method ‘POST‘ not supported 的解决办法

通过SpringCloud Feign 调用其他项目或微服务的接口方法时报Request method ‘POST‘ not supported 的错误&#xff1a; 问题出现原因&#xff1a; 可能的原因是 Feign 默认使用的请求方法为 POST&#xff0c;而不是 GET。另外也有可能是由于消费方法和接口方法使用的注解不…

拼多多店铺电话采集软件使用步骤解析

要快速访问拼多多店铺链接&#xff0c;可以使用一个提供快速访问功能的拼多多店铺链接程序。以下是使用步骤的简要解析&#xff1a; 下载和安装程序&#xff1a;首先&#xff0c;在可靠的下载平台或官方网站上下载并安装拼多多店铺链接程序。确保选择一个可信赖的程序&#xff…

Dialog设置背景透明和尺寸

class TestDialog(context: Context?,var clickListener: OnClickCallBack) : Dialog(context!!) {lateinit var binding:TestDialogBindingoverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)binding TestDialogBinding.inflate(Lay…