MySQL實現(xiàn)身份鑒別的項目實踐
前言
MySQL的身份鑒別是數(shù)據(jù)庫安全的核心命題之一。在每日“擰螺絲”的工作中,我們的開發(fā)人員可能會忽略這個問題。正因如此,博主以這個契機(jī),向大家做一次專題介紹??催^此文,相信你能夠“上應(yīng)付得了等保,下對得起公司”。

Q:如何保障MySQL數(shù)據(jù)庫身份鑒別的有效性
提示:本文示例均已MySQL5.7為例,通過root用戶執(zhí)行相關(guān)命令。
如何保障MySQL數(shù)據(jù)庫身份鑒別,有很多手段進(jìn)行識別。博主通過SQL的方式,進(jìn)行逐一介紹。
一、有效性檢查
1. 用戶唯一
檢查授權(quán)的用戶是否唯一:
SELECT USER, HOST FROM mysql.user;
2. 啟用密碼驗證
檢查PLUGIN是否包含*_password:
-- mysql_native_password,身份驗證插件 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ù)雜度校驗
檢查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è)置,永不鎖定 SHOW VARIABLES LIKE '%connection-control-min-connection-delay%';
8. 是否設(shè)置保持登錄的有效期
-- 默認(rèn)0,代表永不退出登錄 SHOW VARIABLES LIKE '%wait_timeout%';
二、應(yīng)對方案
針對第一部分的有效性檢查中,涉及不滿足的配置項,我們可以通過以下措施加以彌補。
1. 空口令問題
如存在空口令,可通過root執(zhí)行以下命令:
alter user [USER]@[HOST] identified by '[PASSWORD]';
2. 口令復(fù)雜度
如未啟用口令復(fù)雜度,可能會遇到暴力 破 解,因此建議設(shè)置相關(guān)項。
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ù)解釋
為加深各位盆友的理解,博主對返回的參數(shù)加以說明。
2.2.1 validate_password_policy
MySQL的密碼策略包含以下3種:
LOW 或 0代表密碼必須滿足指定長度。
MEDIUM 或 1(默認(rèn))代表密碼必須至少包含1個大寫字母、1個小寫字母、1個數(shù)字和1個特殊字符。
STRONG 或 2在滿足MEDIUM的基礎(chǔ)上,不允許存儲在字典文件(dictionary file)中。
2.2.2 配套參數(shù)
| 參數(shù)名稱 | 用途 |
|---|---|
| validate_password_length | 定義密碼長度,默認(rèn)8位,適用于LOW 策略。 |
| validate_password_mixed_case_count | 定義大、小寫字母的個數(shù),默認(rèn)1,適用于非LOW策略。 |
| validate_password_number_count | 定義數(shù)字的個數(shù),默認(rèn)1,適用于非LOW策略。 |
| validate_password_special_char_count | 定義特殊字符的個數(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è)置口令的有效期:
-- 必須以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)的最大延遲時間(毫秒),建議默認(rèn) |
| connection_control_min_connection_delay | 登錄失敗次數(shù)滿后,再次響應(yīng)的最小延遲時間(毫秒)。 |
4.3 調(diào)整參數(shù)
掌握了參數(shù)特征后,我們同樣可以按需調(diào)整相關(guān)參數(shù)的值,執(zhí)行命令如下:
--必須以root身份執(zhí)行,且擁有super權(quán)限。 set global [具體參數(shù)名稱]=[VALUE];
5. 設(shè)置登錄保持時間
設(shè)置保持登錄的有效期,過期自動退出登錄狀態(tài):
-- 必須以root身份執(zhí)行,設(shè)置保持登錄的有效期為1800秒 set global wait_timeout=1800;
結(jié)語
本文通過案例介紹的方式,針對MySQL不同的安全場景,制定差異化的解決辦法。當(dāng)然完成該過程離不開MySQL自帶的插件或訪問控制能力。
到此這篇關(guān)于MySQL實現(xiàn)身份鑒別的示例代碼的文章就介紹到這了,更多相關(guān)MySQL 身份鑒別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql一次將多條不同sql查詢結(jié)果并封裝到一個結(jié)果集的實現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于mysql一次將多條不同sql查詢結(jié)果并封裝到一個結(jié)果集的實現(xiàn)方法,文中通過實例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2023-03-03
mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的方法實例
mysql在5.7開始支持json解析了,也可以解析數(shù)組,下面這篇文章主要給大家介紹了關(guān)于mysql解析json數(shù)據(jù)組獲取數(shù)據(jù)組所有字段的相關(guān)資料,文中通過圖文以及實例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
mysql中l(wèi)ike % %模糊查詢的實現(xiàn)
這篇文章主要介紹了mysql中l(wèi)ike % %模糊查詢的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12
mysql查詢優(yōu)化之100萬條數(shù)據(jù)的一張表優(yōu)化方案
這篇文章主要介紹了mysql查詢優(yōu)化之100萬條數(shù)據(jù)的一張表優(yōu)化方案,需要的朋友可以參考下2021-05-05
SQL Server COALESCE函數(shù)詳解及實例

