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