MySQL如何查看/監控/處理賬號密碼過期問題

来源:https://www.cnblogs.com/kerrycode/p/18039469
-Advertisement-
Play Games

MySQL 8.0.x中,我們如果按安全規範配置了賬號密碼過期策略的話,那麼如何查看賬號密碼還有多長時間就會過期;如何做好賬號密碼過期監控;以及提前及時處理賬號密碼過期問題就是DBA必須處理的一些事情。這裡簡單討論一下這些事情。個人經驗僅供參考,如有不足或錯誤的地方,敬請指正一二。這篇文章的具體測試 ...


MySQL 8.0.x中,我們如果按安全規範配置了賬號密碼過期策略的話,那麼如何查看賬號密碼還有多長時間就會過期;如何做好賬號密碼過期監控;以及提前及時處理賬號密碼過期問題就是DBA必須處理的一些事情。這裡簡單討論一下這些事情。個人經驗僅供參考,如有不足或錯誤的地方,敬請指正一二。這篇文章的具體測試環境為MySQL 8.0.35.

設置賬號密碼過期

一般系統變數default_password_lifetime控制著全局範圍的賬號密碼過期時間。

mysql> show variables like 'default_password_lifetime';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| default_password_lifetime | 180   |
+---------------------------+-------+
1 row in set (0.02 sec)

mysql> 

這個系統系統變數可以在my.cnf中設置。也可以在MySQL運行時設置並持久化。

SET PERSIST default_password_lifetime = 365;

你創建賬號時可以指定賬號密碼過期使用預設的全局策略,也可以不指定,它也會使用全局的密碼過期策略,如下所示, 下麵兩個SQL其實是等價的。

create user test2@'%' identified by random password ;
create user test2@'%' identified by random password password expire default;

另外,你也可以在創建賬號時設置賬號密碼過期時間,如下所示,那麼此過期時間會覆蓋系統變數default_password_lifetime的值(優先順序高於全局變數)。這個值也會記錄到系統表mysql.user中password_lifetime中,如果創建用戶時沒有指定賬號密碼過期期限,而是使用全局策略,那麼此時password_lifetime的值為NULL。

CREATE USER 'test'@'%' IDENTIFIED BY RANDOM PASSWORD PASSWORD EXPIRE INTERVAL 20 DAY;

手動設置賬號密碼過期

我們也可以手工設置賬號密碼過期,如下所示:

ALTER USER 'USER_NAME'@'HOSTNAME' PASSWORD EXPIRE;
ALTER USER 'USER_NAME'@'HOSTNAME' PASSWORD EXPIRE INTERVAL 90 DAY;

如果手工將一個賬號手工設置為賬號密碼過期,那麼系統表mysql.user中的password_expired會變為Y,而密碼全局過期策略下過期的賬號的欄位password_expired則永遠為N。這些細節不知你有沒有註意過。

查詢賬號密碼過期期限

根據MySQL密碼過期策略,密碼過期是自動的,並基於密碼期限,對於給定帳戶,密碼期限是從其最近一次密碼更改的日期和時間開始評估的。系統表為每個帳戶指示上次更改其密碼的時間(mysql.user表的password_last_changed欄位值),如果密碼的期限大於其允許的生存期,伺服器會自動將密碼視為在客戶端連接時已過期。這適用於沒有明確的手動設置密碼過期的賬戶。

查看資料庫中賬號密碼還有多久即將過期,可以使用下麵這個SQL:

select user
     , host
     , plugin
     , password_expired
     , password_last_changed
     , if(ifnull(password_lifetime, CAST(@@default_password_lifetime as signed))<1,'NEVER',
       concat(
            cast(   ifnull(password_lifetime, @@default_password_lifetime) as signed)
          + cast(datediff(password_last_changed, now()) as signed), " days")) as 
       days_till_expires
from mysql.user;

或者使用下麵優化調整過的SQL

--如果使用ALTER USER 'test'@'%' PASSWORD EXPIRE命令使賬號密碼過期,但是days_till_expires依然顯示賬號密碼還有N天才過期。
select user
     , host
     , plugin
     , password_expired
     , password_last_changed
     , if(password_expired='Y','password_expired',
          if(ifnull(password_lifetime, CAST(@@default_password_lifetime as signed))<1,'NEVER',
          concat(
               cast(   ifnull(password_lifetime, @@default_password_lifetime) as signed)
             + cast(datediff(password_last_changed, now()) as signed), " days")))  
       as days_till_expires
from mysql.user;

監控賬號密碼過期

監控賬號密碼過期,我們可以使用python腳本監控MySQL賬號密碼過期問題,如果密碼小於N(N可以是30,60)天即將過期,那麼發出下麵告警郵件:

處理即將密碼過期賬號

對於即將過期的賬號密碼,分兩種情況:

1:password_lifetime為null,default_password_lifetime不為null的情況,重置密碼後,它的過期期限變為default_password_lifetime的值。

mysql> alter user zbx_monitor@'localhost' identified by "*******";
Query OK, 0 rows affected (0.04 sec)

2:password_lifetime不為null的情況(手工設置密碼過期期限的情況),那麼你可以有以下幾種方式來處理

mysql> alter user test@'%' identified by "******";
Query OK, 0 rows affected (0.01 sec)

此時password_lifetime會變為之前指定的過期期限,當然,你也可以在修改賬號密碼時指定過期期限。

#不修改賬號密碼

mysql> alter user test@'%'  password expire interval 180 day;
Query OK, 0 rows affected (0.01 sec)

#修改賬號密碼

mysql> alter user test@'%' identified by "******" password expire interval 190 day;
Query OK, 0 rows affected (0.06 sec)

賬號密碼過期後,依然能連接上MySQL,但是此時做任何操操作都會報ERROR 1820(HY000)錯誤,如下所示:

mysql> select * from dual;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> 

從 MySQL 8.0.14 開始,允許用戶帳戶擁有雙重密碼,指定為主密碼和輔助密碼。雙密碼功能可以在以下場景中無縫執行憑據更改:

  • 一個系統有大量的MySQL伺服器,可能涉及複製。

  • 多個應用程式連接到不同的 MySQL 伺服器。

  • 必須對應用程式用來連接伺服器的一個或多個帳戶定期更改憑據。

DBA如果經歷過的,也許都知道有時候修改資料庫賬號密碼是比較麻煩的事情,系統開發人員或系統Support人員會覺得比較麻煩,因為對於複雜系統,一不小心,賬號密碼配置出了差錯或紕漏,可能會導致生產事故,另外,修改賬號密碼也會影響系統業務的可用性(可能需要短暫的停止應用系統服務...),所以對於定期修改賬號密碼,很多時候是名存實亡。因此要麼不會修改資料庫賬號密碼,要麼按規範定期修改賬號密碼,也是使用相同的賬號密碼,並不會修改賬戶密碼。

如果使用雙密碼,就可以更輕鬆地分階段修改密碼,無需密切合作,也無需停機。確實是一個很了不起的創新。其他資料庫暫時還沒有這種特性。

#建立新的主密碼,保留當前密碼作為輔助密碼

ALTER USER 'test'@'%' IDENTIFIED BY '****' RETAIN CURRENT PASSWORD;

#等到應用程式切換密碼後,丟棄舊密碼(輔助密碼)

ALTER USER 'test'@'%' DISCARD OLD PASSWORD;
掃描上面二維碼關註我 如果你真心覺得文章寫得不錯,而且對你有所幫助,那就不妨幫忙“推薦"一下,您的“推薦”和”打賞“將是我最大的寫作動力! 本文版權歸作者所有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接.
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • STM32FATFS文件系統移植 1。 FATFS簡介 FATFS文件系統是一個用於在微控制器上運行的開源文件系統,支持FAT/FATFS、NTFS、exFAT等主流文件系統,且一直保持更新。在此以FatFs官網最新版本v0.15進行移植。 2. 移植具體操作 2.1 下載FatFs源碼 FATFS ...
  • linux伺服器文件實時同步 1 背景說明 在做系統集群部署時,涉及到兩個或多個伺服器之間文件同步.在軟體層面linux服務環境找到以下兩種同步方式 利用linux NFS功能將網路共用文件掛載成本地目錄 採用文件監聽,實時推送 伺服器資源如下 伺服器1 10.2.4.51 ,作為主伺服器 伺服器2 ...
  • 關於88e1111 phy模塊的配置說明 1、前言 ​ 本次主要是參考了88e1111的phy晶元的數據手冊,對於88e1111這款經典的 10M/100M/1000M 乙太網晶元的一些基礎軟體硬體配置做一些說明,拋磚引玉,有不對之處,請多多指教。 2、88e1111 phy晶元的硬體相關 1、ph ...
  • STM32SPIFLASH讀寫 1.1 SPI註意事項 SPI是同步通信,即通信雙方每次信息交互必會帶有一問一答,這代表在正常的單核MCU(例如STM32)中很難實現軟體模擬的雙向SPI通信(TFT屏幕一類的外設不算,那些頂多屬於單向SPI),因為無法同時發送和接收數據。而在STM32中,硬體實現同 ...
  • 在使用yum工具安裝gcc的時候,報出了signature hdr data: BAD, no. of btyes(9088) out of range 的問題 這是由於centos8中rpm工具存在的一個bug,在校驗安裝包頭部大小的時候,應當限製為64M,但是實際限制了64k 這個問題存在於 r ...
  • 本文分享自華為雲社區《RDS for MySQL Serverless公測上線:彈性伸縮,最高可降成本超80%》,作者:GaussDB 資料庫。 隨著科技的快速發展,我們正在迅速步入一個全新的數字化時代。數字化時代,數據是最寶貴的資源。資料庫作為存儲數據的倉庫,重要性更是不言而喻。 一、業務背景及痛 ...
  • 最近碰到一個 case,值得分享一下。 現象就是一個 update 操作,在 mysql 客戶端中執行提示 warning,但在 java 程式中執行卻又報錯。 問題重現 mysql> create table test.t1(id int primary key, c1 datetime);Que ...
  • SpringData是Spring中數據操作的模塊,包含對各種資料庫的集成,其中對Redis的集成模塊就叫做SpringDataRedis。 技術支持 提供了對不同Redis客戶端的整合(Lettuce和Jedis) 提供了RedisTemplate統一API來操作Redis 支持Redis的發佈訂 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...