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.pswp.cn/diannao/40848.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/40848.shtml
英文地址,請注明出處:http://en.pswp.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…