等保需求
MySQL密碼復雜度改成STRONG
MySQL密碼設置90天有效期
MySQL設置用戶登錄失敗處理鎖定時間功能
MySQL設置登錄超時過期時間
MySQL設置三權用戶
MySQL設置日志審計功能
操作方案
一、 操作前注意事項
- 密碼策略變更和連接超時設置可能導致老舊應用無法連接,客戶端工具無法連接。
- 審計日志會占用大量磁盤空間,做好實時監控工作。
- 操作前備份MySQL配置文件my.cnf。
- 先在測試環境做好方案的驗證工作。
- 提前和業務部門溝通割接變更窗口,修改完后驗證所有應用是否正常。
- 檢查并記錄數據庫中的用戶:select user,host from mysql.user;
二、等保設置
1、MySQL密碼復雜度改成STRONG
檢查密碼校驗組件(Validate Password)是否安裝:
SHOW VARIABLES LIKE 'validate_password%';
安裝組件(如果未安裝):
INSTALL PLUGIN validate_password SONAME 'validate_password.so';
設置密碼策略
SET GLOBAL validate_password.policy = STRONG;
SET GLOBAL validate_password.length = 12;
持久化配置(修改my.cnf):
[mysqld]
validate_password.policy = STRONG
validate_password.length = 12
重啟MySQL服務使配置生效。
2、設置密碼有效期(90天)
數據庫全局設置:
SET GLOBAL default_password_lifetime = 90;
持久化配置(修改my.cnf):
[mysqld]
default_password_lifetime = 90
3、設置登錄失敗處理與賬戶鎖定功能
此功能需要CONNECTION_CONTROL和CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS插件。
安裝插件:
INSTALL PLUGIN CONNECTION_CONTROL SONAME 'connection_control.so';
INSTALL PLUGIN CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS SONAME 'connection_control.so';
SELECT PLUGIN_NAME, PLUGIN_STATUS
FROM INFORMATION_SCHEMA.PLUGINS
WHERE PLUGIN_NAME LIKE 'connection%';
配置策略:
SET GLOBAL connection_control_failed_connections_threshold = 6; -- 設置失敗閾值為6次
SET GLOBAL connection_control_min_connection_delay = 600000; -- 超過最大失敗次數之后阻塞登錄最小時間為10分鐘(單位毫秒)
查看登錄失敗次數:
SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
持久化配置(修改my.cnf):
[mysqld]
plugin-load-add = connection_control.so
connection_control_failed_connections_threshold = 6
connection_control_min_connection_delay = 600000
4、設置登錄超時(非交互式連接等待時間)
設置wait_timeout和interactive_timeout變量,控制非活動連接的自動斷開時間。
-- 設置全局超時為14400秒(4小時)
SET GLOBAL wait_timeout = 14400; -- 非交互式連接超時時間,4小時
SET GLOBAL interactive_timeout = 14400; -- 交互式連接超時時間,4小時
-- 查看當前會話的超時設置
SHOW VARIABLES LIKE '%timeout%';
持久化配置(修改my.cnf):
[mysqld]
wait_timeout = 28800
interactive_timeout = 28800
5、設置三權用戶(權限分離)
等保要求數據庫系統管理員、安全管理員、審計員職責分離。
系統管理員(DBA):負責數據庫安裝、配置、備份恢復。通常是 root,但應禁止遠程登錄:
--如果數據庫中有root@%用戶,但是無root@localhost用戶:
UPDATE mysql.user SET Host = 'localhost' WHERE User = 'root' AND Host = '%';
FLUSH PRIVILEGES;
--如果數據庫中既有root@%用戶,又有root@localhost用戶,把root@%修改為admin@%用戶:
特別注意:需要確認下程序中有沒有用到root@%用戶連接數據庫,否則會影響業務
UPDATE mysql.user SET user = 'admin' WHERE User = 'root' AND Host = '%';
FLUSH PRIVILEGES;
安全管理員 (SecAdmin) - 負責用戶管理、權限分配、安全策略(如密碼、審計策略)
CREATE USER 'sec_admin'@'localhost' IDENTIFIED BY '*******';
-- 授權:允許其創建、修改、刪除用戶,但不允許操作業務數據或授予其他權限。
GRANT CREATE USER ON *.* TO 'sec_admin'@'localhost';
GRANT SELECT ON mysql.user TO 'sec_admin'@'localhost'; -- 允許查看用戶信息
GRANT RELOAD ON *.* TO 'sec_admin'@'localhost'; -- 可能需要 reload 權限來使部分權限生效
FLUSH PRIVILEGES;
審計管理員 (AuditAdmin) - 負責查看、分析日志
CREATE USER 'audit_admin'@'localhost' IDENTIFIED BY '*******';
-- 授權:僅允許查詢審計日志相關的表或文件(需根據審計日志存放位置授權)
GRANT SELECT ON information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS TO 'audit_admin'@'localhost';-- 失敗登錄記錄
-- 如果通用日志或慢查詢日志開啟為TABLE,則授權
-- GRANT SELECT ON mysql.general_log TO 'audit_admin'@'localhost';
FLUSH PRIVILEGES;
6、設置日志審計功能
開啟通用查詢日志(General Log)(審計所有操作,對性能影響大,且占用磁盤空間,慎用,如果開啟務必實時監控磁盤使用率):
數據庫全局設置:
SET GLOBAL general_log = 'ON';
SET GLOBAL log_output = 'FILE';
持久化配置(修改my.cnf):
[mysqld]
general_log = ON
general_log_file = /data/mysql/general.log
log-output = FILE
三、 操作后驗證
-
密碼復雜度:
- 嘗試創建用戶并設置簡單密碼(如Aa123456),看是否會報錯。
create USER 'test'@'%' IDENTIFIED BY 'Aa123456'; -
密碼有效期:
- 創建一個測試用戶,設置密碼立即過期,嘗試登錄看是否被強制修改密碼。
CREATE USER 'testexpire'@'localhost' IDENTIFIED BY 'TempPass123!'; ALTER USER 'testexpire'@'localhost' PASSWORD EXPIRE; -- 然后用該用戶登錄執行命令(如show databases),會提示必須修改密碼 -
登錄失敗鎖定:
- 故意用錯誤密碼連接數據庫6次,看第7次連接是否被明顯延遲10分鐘(根據配置)。
-
連接超時:
- 建立一個連接后,等待4小時(根據配置),看是否會自動斷開。
-
權限驗證:
- 分別用
root@localhost,sec_admin,audit_admin賬戶登錄,驗證其權限是否與設計一致(如sec_admin無法創建數據庫,audit_admin無法修改數據)。
- 分別用
-
日志審計:
- 執行一些SQL操作,然后檢查對應的日志文件(
general_log,)是否正常生成并記錄了相關操作。
- 執行一些SQL操作,然后檢查對應的日志文件(
四、 回滾方案
如果變更過程中出現嚴重問題,立即回滾:
- 停止MySQL服務。
- 恢復備份的my.cnf配置文件。
- 啟動MySQL服務。
關于作者
網名:飛天,墨天輪2024年度優秀原創作者,擁有 Oracle 10g OCM 認證、PGCE認證、MySQL 8.0 OCP認證以及OBCA、KCP、KCSM、ACP、YCP、磐維等眾多國產數據庫認證證書,目前從事Oracle、Mysql、PostgresSQL、磐維數據庫管理運維工作,喜歡結交更多志同道合的朋友,熱衷于研究、分享數據庫技術。
微信公眾號:飛天online
墨天輪:http://www.sunline.cc/u/15197
如有任何疑問,歡迎大家留言,共同探討~~~




