MySQL實(shí)現(xiàn)身份鑒別的項(xiàng)目實(shí)踐
前言
MySQL的身份鑒別是數(shù)據(jù)庫安全的核心命題之一。在每日“擰螺絲”的工作中,我們的開發(fā)人員可能會(huì)忽略這個(gè)問題。正因如此,博主以這個(gè)契機(jī),向大家做一次專題介紹??催^此文,相信你能夠“上應(yīng)付得了等保,下對(duì)得起公司”。
Q:如何保障MySQL數(shù)據(jù)庫身份鑒別的有效性
提示:本文示例均已MySQL5.7為例,通過root用戶執(zhí)行相關(guān)命令。
如何保障MySQL數(shù)據(jù)庫身份鑒別,有很多手段進(jìn)行識(shí)別。博主通過SQL的方式,進(jìn)行逐一介紹。
一、有效性檢查
1. 用戶唯一
檢查授權(quán)的用戶是否唯一:
SELECT USER, HOST FROM mysql.user;
2. 啟用密碼驗(yàn)證
檢查PLUGIN是否包含*_password
:
-- mysql_native_password,身份驗(yàn)證插件 SELECT USER, HOST, PLUGIN FROM mysql.user;
3. 是否存在空口令用戶
檢查authentication_string
是否存在空值:
-- authentication_string,加密后密碼,即執(zhí)行password()后的值 SELECT USER, HOST, PLUGIN, authentication_string FROM mysql.user;
4. 是否啟用口令復(fù)雜度校驗(yàn)
檢查validate_password
插件,是否已啟用:
-- 如果為空,證明未啟用該插件 SHOW VARIABLES LIKE 'validate%';
5. 是否設(shè)置口令的有效期
-- 默認(rèn)0,永不過期 SHOW VARIABLES LIKE '%default_password_lifetime%';
6. 是否限制登錄失敗嘗試次數(shù)
-- 如為空,代表未設(shè)置,可無限嘗試 SHOW VARIABLES LIKE '%connection-control-failed-connections-threshold%';
7. 是否設(shè)置(超過嘗試次數(shù))鎖定的最小時(shí)長(zhǎng)
-- 如為空,代表未設(shè)置,永不鎖定 SHOW VARIABLES LIKE '%connection-control-min-connection-delay%';
8. 是否設(shè)置保持登錄的有效期
-- 默認(rèn)0,代表永不退出登錄 SHOW VARIABLES LIKE '%wait_timeout%';
二、應(yīng)對(duì)方案
針對(duì)第一部分的有效性檢查中,涉及不滿足的配置項(xiàng),我們可以通過以下措施加以彌補(bǔ)。
1. 空口令問題
如存在空口令,可通過root
執(zhí)行以下命令:
alter user [USER]@[HOST] identified by '[PASSWORD]';
2. 口令復(fù)雜度
如未啟用口令復(fù)雜度,可能會(huì)遇到暴力 破 解,因此建議設(shè)置相關(guān)項(xiàng)。
2.1 安裝插件
MySQL默認(rèn)預(yù)留了口令復(fù)雜度插件:validate_password
。我們只需要通過root用戶安裝即可:
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
查看是否安裝成功(如看到以下記錄,代表成功):
SHOW VARIABLES LIKE 'validate%';
2.2 參數(shù)解釋
為加深各位盆友的理解,博主對(duì)返回的參數(shù)加以說明。
2.2.1 validate_password_policy
MySQL的密碼策略包含以下3種:
LOW 或 0代表密碼必須滿足指定長(zhǎng)度。
MEDIUM 或 1(默認(rèn))代表密碼必須至少包含1個(gè)大寫字母、1個(gè)小寫字母、1個(gè)數(shù)字和1個(gè)特殊字符。
STRONG 或 2在滿足MEDIUM的基礎(chǔ)上,不允許存儲(chǔ)在字典文件(dictionary file)中。
2.2.2 配套參數(shù)
參數(shù)名稱 | 用途 |
---|---|
validate_password_length | 定義密碼長(zhǎng)度,默認(rèn)8位,適用于LOW 策略。 |
validate_password_mixed_case_count | 定義大、小寫字母的個(gè)數(shù),默認(rèn)1,適用于非LOW 策略。 |
validate_password_number_count | 定義數(shù)字的個(gè)數(shù),默認(rèn)1,適用于非LOW 策略。 |
validate_password_special_char_count | 定義特殊字符的個(gè)數(shù),默認(rèn)1,適用于非LOW 策略。 |
2.3 調(diào)整參數(shù)
掌握了參數(shù)特征后,我們可以按需調(diào)整相關(guān)參數(shù)的值,以滿足安全需要,執(zhí)行命令如下:
--必須以root身份執(zhí)行,且擁有super權(quán)限。 set global [具體參數(shù)名稱]=[VALUE];
3. 口令有效期
如滿足口令定期更換的安全要求時(shí),必須設(shè)置口令的有效期:
-- 必須以root身份執(zhí)行,設(shè)置有效期為90天 set global default_password_lifetime=90;
4. 設(shè)置登錄失敗處理
假如要求你限制登錄失敗的次數(shù)以及失敗次數(shù)達(dá)到上限后鎖定用戶,你該怎么辦?先不急,且聽博主分解。
4.1 安裝插件
滿足上述要求,需要安裝MySQL自帶的插件:connection_control
,命令如下:
-- 必須以root身份執(zhí)行 INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so'; INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';
4.2 參數(shù)解釋
參數(shù)名稱 | 用途 |
---|---|
connection_control_failed_connections_threshold | 登錄失敗嘗試次數(shù),默認(rèn)3,如0代表不限制。 |
connection_control_max_connection_delay | 登錄失敗次數(shù)滿后,再次響應(yīng)的最大延遲時(shí)間(毫秒),建議默認(rèn) |
connection_control_min_connection_delay | 登錄失敗次數(shù)滿后,再次響應(yīng)的最小延遲時(shí)間(毫秒)。 |
4.3 調(diào)整參數(shù)
掌握了參數(shù)特征后,我們同樣可以按需調(diào)整相關(guān)參數(shù)的值,執(zhí)行命令如下:
--必須以root身份執(zhí)行,且擁有super權(quán)限。 set global [具體參數(shù)名稱]=[VALUE];
5. 設(shè)置登錄保持時(shí)間
設(shè)置保持登錄的有效期,過期自動(dòng)退出登錄狀態(tài):
-- 必須以root身份執(zhí)行,設(shè)置保持登錄的有效期為1800秒 set global wait_timeout=1800;
結(jié)語
本文通過案例介紹的方式,針對(duì)MySQL不同的安全場(chǎng)景,制定差異化的解決辦法。當(dāng)然完成該過程離不開MySQL自帶的插件或訪問控制能力。
到此這篇關(guān)于MySQL實(shí)現(xiàn)身份鑒別的示例代碼的文章就介紹到這了,更多相關(guān)MySQL 身份鑒別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Mysql全文搜索對(duì)模糊查詢的性能提升測(cè)試方式
這篇文章主要介紹了Mysql全文搜索對(duì)模糊查詢的性能提升測(cè)試方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08Mysql通過ibd文件恢復(fù)數(shù)據(jù)的詳細(xì)步驟
mysql在使用的過程中,難免遇到數(shù)據(jù)庫表誤操作,下面這篇文章主要給大家介紹了關(guān)于Mysql通過ibd文件恢復(fù)數(shù)據(jù)的詳細(xì)步驟,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-06-06mysql自增navicat_navicat如何設(shè)置主鍵自增
通過Navicat設(shè)置MySQL表的主鍵自增,步驟包括:打開Navicat連接數(shù)據(jù)庫,選擇表并設(shè)計(jì),右擊id字段設(shè)置為主鍵,然后勾選自動(dòng)遞增功能,這樣每次插入新記錄時(shí),id字段都會(huì)自動(dòng)遞增2025-01-01MySQL報(bào)錯(cuò)Lost connection to MySQL server&n
在確保網(wǎng)絡(luò)沒有問題的情況下,服務(wù)器正常運(yùn)行一段時(shí)間后,數(shù)據(jù)庫拋出了異常"Lost connection to MySQL server during query",本文將給大家介紹MySQL報(bào)錯(cuò)Lost connection to MySQL server during query的解決方案,需要的朋友可以參考下2024-01-01mysql 5.7.17 以及workbench安裝配置圖文教程
這篇文章主要為大家詳細(xì)介紹了mysql 5.7.17 以及workbench安裝配置圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-06-06Mysql中replace與replace into的用法講解
今天小編就為大家分享一篇關(guān)于Mysql中replace與replace into的用法講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-03-03關(guān)于Mysql搭建主從復(fù)制功能的步驟實(shí)現(xiàn)
這篇文章主要介紹了關(guān)于Mysql搭建主從復(fù)制功能的步驟實(shí)現(xiàn),在實(shí)際的生產(chǎn)中,為了解決Mysql的單點(diǎn)故障已經(jīng)提高M(jìn)ySQL的整體服務(wù)性能,一般都會(huì)采用主從復(fù)制,需要的朋友可以參考下2023-05-05如何用workbench導(dǎo)出mysql數(shù)據(jù)庫關(guān)系圖
用workbench導(dǎo)出mysql數(shù)據(jù)庫關(guān)系圖的解決方法,需要的朋友請(qǐng)往下閱讀2013-03-03