MySQL新密碼機制介紹caching_sha2_password

来源:https://www.cnblogs.com/olinux/archive/2020/06/28/13201497.html
-Advertisement-
Play Games

MySQL8系列新增的密碼插件策略:caching_sha2_password ...


 

MySQL添加了對身份驗證插件的支持,該插件現在稱為mysql_native_password。該mysql_native_password插件使用SHA1哈希

 

將密碼(SHA1(SHA1(password)))存儲在mysql.user表中
驗證用戶,該插件的一個優點是,它允許使用質詢-響應機制進行身份驗證,從而可以在未加密的通道上驗證客戶端的身份,而無需發送實際密碼。

 

隨著時間的流逝,我們從身份驗證方案的角度確定了需要改進的幾個方面。

 

  • 在將值存儲在資料庫中時,密碼的轉換必須使用鹽(增加的因素)。沒有它,兩個具有相同密碼的帳戶將具有相同的哈希值。儘管這並不能顯示實際的密碼,但確實提供了有關用戶使用密碼的線索,並限制了暴力攻擊和獲取密碼所需的工作。
  • 使用蠻力攻擊更難破解存儲的密碼。最好在存儲密碼時使用許多(數千)輪哈希。
  • 使用更強大的哈希機制。隨著技術的發展,SHA1和其他哈希演算法的前身(例如MD5)已被證明非常容易破解。註意:NIST 在2011年已棄用。因此,如果您可以從mysql.user表中獲取散列,或者通過嗅探未加密的通道,則可以對這些密碼進行快速反向工程和破解,尤其是當密碼較短(少於8個字元)時。另請參閱FIPS 180-4。
  • 對身份驗證階段和密碼使用不同的哈希方案。在這兩種情況下,mysql_native_password插件都使用類似的轉換(SHA1(SHA1(password)))。

為了剋服這些限制,從MySQL-8.0.3開始, 引入了一個新的身份驗證插件 caching_sha2_password。從 MySQL-8.0.4開始,此插件成為MySQL伺服器的新預設身份驗證插件。通過caching_sha2_password身份驗證,我們可以解決上述問題,同時確保不影響性能。許多使用MySQL的應用程式以很高的頻率連接和斷開連接。

 

MySQL caching_sha2_password的設計重點是:

 

  • 使用SHA-2哈希機制來轉換密碼。具體來說,它使用SHA256。
  • 生成哈希時,每個密碼使用20位元組長的鹽。由於鹽是一個隨機數,即使兩個用戶使用相同的密碼,轉換過程的最終結果也將完全不同。
  • 為了使使用蠻力機制更難以嘗試和猜測密碼,在將最終轉換存儲在mysql.user表中之前,對密碼和鹽進行了5000輪SHA2散列。

兩種操作方式:

  • COMPLETE:要求客戶端安全地發送實際密碼(通過TLS連接或使用RSA密鑰對)。伺服器生成5000輪哈希,並與mysql.user中存儲的值進行比較。
  • FAST:允許使用SHA2哈希的基於質詢-響應的身份驗證。高性能和安全性在同一時間。

DBA可以強制資料庫客戶端定期使用COMPLETE模式來確定實際密碼的認知。通過使用不同輪迴數的哈希將密碼存儲和身份驗證脫鉤。即使有人可以訪問這兩個密碼,也無法在實際可行的時間內使用此信息來推斷密碼或獲取密碼的sha2哈希。蠻力破解8字元長的密碼以及5000輪咸化哈希值將花費很長時間。比任何密碼到期策略(甚至最寬鬆的策略)更長的時間。較長的密碼只會使事情變得更加困難。

 

下表比較了mysql_native_password和caching_sha2_password。

 

 

 

 

 

除了新插件外,還添加了一些功能來防止嘗試識別用戶信息並減輕與弱密碼相關的風險:

 

  • 支持TLS連接,無需任何額外的努力(伺服器端支持和客戶端端支持)以確保預設情況下連接是安全的
  • CREATE USER / ALTER USER提供了幾個 選項來指定密碼管理策略
  • 控制可以和不能用作密碼的內容–長度,字元複雜度等。
  • 減慢蠻力嘗試猜測密碼會增加延遲以及設置最大嘗試限制
  • 用隨機一次密碼重置密碼。
  • 防止用戶枚舉的其他措施

這些功能與caching_sha2_password結合使用,可增強用戶帳戶抵禦密碼攻擊的能力。

 

另外,mysql模式的數據可以在靜態時進行加密(InnoDB加密, 二進位日誌加密)。這樣可以保護敏感數據,例如密碼哈希,以防止未經授權的文件訪問。這在OS /文件系統中隱藏了許多細節。FYI – DBA(具有所需特權集的用戶,例如mysql.user表上的SELECT)可以看到此哈希數據,而與使用靜態數據加密方案無關。話雖如此,反向工程師密碼的費用仍然很高。

 

如果僅憑安全性不足以促使您升級到caching_sha2_password,那麼另一項商業動機就是遵守法規。大多數法規禁止將sha1,md5和其他弱密碼用於密碼或其他用途。(HIPAA,GDPR等)

 

在這裡總結一下:

 

  • 如果您使用的是mysql_native_password,請儘快計劃遷移到caching_sha2_password或支持與外部身份驗證伺服器集成的 企業身份驗證插件之一。SHA1不夠安全,切換也不困難。
  • 對mysql.user表的訪問應儘可能嚴格。即使它不存儲實際的密碼,該表中的信息也非常敏感-尤其是密碼哈希。實際上,無論您在何處存儲此類哈希-無論是在MySQL資料庫中還是在外部身份驗證伺服器(例如LDAP伺服器)上,都必須始終對其進行保護。 OpenLDAP文檔 很好地闡明瞭這一點:

 

 

  • 使用MySQL提供的密碼策略功能來控制密碼生命周期。
  • 使用MySQL提供的控制項來防止對密碼的暴力攻擊。
  • 在mysql模式上,最好在所有表上使用InnoDB加密,以及二進位日誌加密,以保護靜態數據免受未經授權的訪問。
  • 始終使用加密的連接:在HA拓撲中是伺服器-客戶端通信還是伺服器-伺服器通信。僅加密靜態數據是不夠的。數據在傳輸過程中必須受到保護。
  • 始終通過加密備份來保護備份,以避免數據泄漏

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • dgraph 簡介 dgraph 使用示例(基於 golang) golang client 安裝 創建 schema 數據的 CURD 事務 總結 dgraph 簡介 dgraph 是基於 golang 開發的開源的分散式圖資料庫. 誕生時間不長, 發展卻很迅速. 目前是 v20.x 版本, dg ...
  • Linux系統環境下MySQL資料庫源代碼的安裝 基本環境:CentOS Linux release 7.8.2003 (Core)、MySQL5.6 一、 安裝環境準備 若要在Linux系統下進行Mysql源碼安裝,需要檢查系統是否具備編譯源碼的工具和庫:gcc、 gcc-c++、cmake,為方 ...
  • MySQL知識點總結 一、 MySQL常用命令 啟動MySQL服務:service mysqld start 或 systemctl start mysqld.service 停止MySQL服務:service mysqld stop 或 systemctl stopt mysqld.service ...
  • 1 --普通時間 轉 13 位時間戳 2 SELECT CONVERT(BIGINT,DATEDIFF(MI,'1970-01-01 00:00:00.000', GETUTCDATE())) * 60000 + DATEPART(S,GETUTCDATE()) * 1000 + DATEPART( ...
  • 一、什麼是工作流? 工作流(WorkFlow)就是工作流程的計算模型,即將工作流程中的工作如何前後組織在一起的邏輯和規則在電腦中以恰當的模型進行表示並對其實施計算。工作流要解決的主要問題是:為實現某個業務目標,在多個參與者之間,利用電腦,按某種預定規則自動傳遞。下麵我們以“員工請假的流程”為例, ...
  • 墨天輪資料庫周刊第28期發佈啦,每周1次推送本周資料庫相關熱門資訊、精選文章、乾貨文檔。本周分享 開發者最喜愛的資料庫是什麼?阿裡雲脫口秀爆聊程式員轉型;MySQL update誤操作後進行資料庫恢復;PG流複製踩坑;PG異機歸檔;MySQL架構選型案例;oracle 技能表;Oracle文件損壞處... ...
  • select * from BANK t; DECLARE v_money bank.money%TYPE; BEGIN --簡單執行sql,註意sql字元串不要帶分號結束 EXECUTE IMMEDIATE 'SELECT money FROM bank WHERE id = 5'; --帶參數, ...
  • CREATE OR REPLACE FUNCTION c_to_f (degree NUMBER) RETURN NUMBER IS buffer NUMBER; BEGIN buffer := (degree * 9/5) + 32; RETURN buffer; END; --第一種 前提方法必 ...
一周排行
    -Advertisement-
    Play Games
  • 概述:在C#中,++i和i++都是自增運算符,其中++i先增加值再返回,而i++先返回值再增加。應用場景根據需求選擇,首碼適合先增後用,尾碼適合先用後增。詳細示例提供清晰的代碼演示這兩者的操作時機和實際應用。 在C#中,++i 和 i++ 都是自增運算符,但它們在操作上有細微的差異,主要體現在操作的 ...
  • 上次發佈了:Taurus.MVC 性能壓力測試(ap 壓測 和 linux 下wrk 壓測):.NET Core 版本,今天計劃準備壓測一下 .NET 版本,來測試並記錄一下 Taurus.MVC 框架在 .NET 版本的性能,以便後續持續優化改進。 為了方便對比,本文章的電腦環境和測試思路,儘量和... ...
  • .NET WebAPI作為一種構建RESTful服務的強大工具,為開發者提供了便捷的方式來定義、處理HTTP請求並返迴響應。在設計API介面時,正確地接收和解析客戶端發送的數據至關重要。.NET WebAPI提供了一系列特性,如[FromRoute]、[FromQuery]和[FromBody],用 ...
  • 原因:我之所以想做這個項目,是因為在之前查找關於C#/WPF相關資料時,我發現講解圖像濾鏡的資源非常稀缺。此外,我註意到許多現有的開源庫主要基於CPU進行圖像渲染。這種方式在處理大量圖像時,會導致CPU的渲染負擔過重。因此,我將在下文中介紹如何通過GPU渲染來有效實現圖像的各種濾鏡效果。 生成的效果 ...
  • 引言 上一章我們介紹了在xUnit單元測試中用xUnit.DependencyInject來使用依賴註入,上一章我們的Sample.Repository倉儲層有一個批量註入的介面沒有做單元測試,今天用這個示例來演示一下如何用Bogus創建模擬數據 ,和 EFCore 的種子數據生成 Bogus 的優 ...
  • 一、前言 在自己的項目中,涉及到實時心率曲線的繪製,項目上的曲線繪製,一般很難找到能直接用的第三方庫,而且有些還是定製化的功能,所以還是自己繪製比較方便。很多人一聽到自己畫就害怕,感覺很難,今天就分享一個完整的實時心率數據繪製心率曲線圖的例子;之前的博客也分享給DrawingVisual繪製曲線的方 ...
  • 如果你在自定義的 Main 方法中直接使用 App 類並啟動應用程式,但發現 App.xaml 中定義的資源沒有被正確載入,那麼問題可能在於如何正確配置 App.xaml 與你的 App 類的交互。 確保 App.xaml 文件中的 x:Class 屬性正確指向你的 App 類。這樣,當你創建 Ap ...
  • 一:背景 1. 講故事 上個月有個朋友在微信上找到我,說他們的軟體在客戶那邊隔幾天就要崩潰一次,一直都沒有找到原因,讓我幫忙看下怎麼回事,確實工控類的軟體環境複雜難搞,朋友手上有一個崩潰的dump,剛好丟給我來分析一下。 二:WinDbg分析 1. 程式為什麼會崩潰 windbg 有一個厲害之處在於 ...
  • 前言 .NET生態中有許多依賴註入容器。在大多數情況下,微軟提供的內置容器在易用性和性能方面都非常優秀。外加ASP.NET Core預設使用內置容器,使用很方便。 但是筆者在使用中一直有一個頭疼的問題:服務工廠無法提供請求的服務類型相關的信息。這在一般情況下並沒有影響,但是內置容器支持註冊開放泛型服 ...
  • 一、前言 在項目開發過程中,DataGrid是經常使用到的一個數據展示控制項,而通常表格的最後一列是作為操作列存在,比如會有編輯、刪除等功能按鈕。但WPF的原始DataGrid中,預設只支持固定左側列,這跟大家習慣性操作列放最後不符,今天就來介紹一種簡單的方式實現固定右側列。(這裡的實現方式參考的大佬 ...