首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 數據庫安全加固清單:從安裝初始化到生產基線 10 步走

     編輯:MySQL 資料庫相關知識

安裝後默認不安全狀態

  • root 無密碼 / 弱密碼,本地免密登錄。
  • 匿名用戶存在,可訪問 test 庫。
  • root 允許遠程登錄 (% 主機)。
  • 默認端口 3306 直接暴露公網。
  • 權限過大:應用賬號擁有 ALL PRIVILEGES / DROP / SHUTDOWN。

10 步安全基線 (按執行順序)

1. 運行官方安全腳本 (必做第一步)


mysql_secure_installation
# 依次:設置 root 強密碼 → 移除匿名用戶 → 禁止遠程 root 登錄 → 移除 test 庫 → 重載權限表

2. 以最小權限運行 mysqld 進程

  • 創建專用用戶/組:useradd -r -s /sbin/nologin mysql (包管理通常已創建)。
  • 數據目錄擁有權:chown -R mysql:mysql /var/lib/mysql。
  • 配置文件權限:chown root:mysql /etc/my.cnf && chmod 640 /etc/my.cnf。
  • **禁用 root 啟動 mysqld** (systemd 默認 User=mysql)。

3. 修改/禁用默認端口 & 綁定地址


[mysqld]
port = 3306          # 建議改非標準高位端口 (如 13306),配合防火牆
bind_address = 10.0.0.10  # 僅綁定內網管理 IP,嚴禁 0.0.0.0
# skip_networking = ON   # 極致模式:僅本地 Socket 連接,彈性差

4. 本地文件導入導出管控


[mysqld]
local_infile = 0  # 禁用 LOAD DATA LOCAL INFILE,防止任意文件讀取漏洞 (CVE-2013-XXXX 類)
secure_file_priv = /data/mysql_files/  # 僅允許此目錄 SELECT ... INTO OUTFILE / LOAD DATA INFILE

5. 禁止 SHOW DATABASES 洩露庫列表


[mysqld]
skip_show_database = ON
# 僅擁有 SHOW DATABASES 權限或對庫有任意權限的用戶才能看到庫列表

6. 最小權限應用賬號 (核心原則)


-- 僅授權業務所需庫、表、列、操作
CREATE USER 'app_user'@'10.0.0.%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON `biz_db`.* TO 'app_user'@'10.0.0.%';
-- 禁止 GRANT ALL, DROP, ALTER, CREATE, SHUTDOWN, PROCESS, FILE, SUPER 等管理權限
FLUSH PRIVILEGES;

列級權限** (敏感字段如薪資/身分證):GRANT SELECT (id, name), UPDATE (name) ON hr.employees TO 'hr_app'@'%';

7. 修改/禁用 root 賬號名 (安全通過模糊性)


-- 5.7
RENAME USER 'root'@'localhost' TO 'dba_admin'@'localhost';
-- 8.0
ALTER USER 'root'@'localhost' RENAME TO 'dba_admin'@'localhost';
FLUSH PRIVILEGES;

同步更新監控/備份/運維腳本中的用戶名。

8. 啟用 SSL/TLS 傳輸加密 (生產必備)

  1. 生成 CA/Server/Client 證書 (或用 mysql_ssl_rsa_setup 自動生成自簽)。
  2. 配置:
    
    [mysqld]
    ssl_ca = /etc/mysql/ssl/ca.pem
    ssl_cert = /etc/mysql/ssl/server-cert.pem
    ssl_key = /etc/mysql/ssl/server-key.pem
    require_secure_transport = ON  # 強制所有連接使用 SSL
    
  3. 客戶端連接驗證:mysql -h host -u user -p --ssl-mode=VERIFY_CA --ssl-ca=ca.pem。

9. 審計日誌 (合規/事後追蹤)

  • 企業版:INSTALL PLUGIN audit_log SONAME 'audit_log.so'; 配置策略。
  • 社區版:MariaDB Audit Plugin / Percona Audit Plugin / McAfee MySQL Audit。
  • 記錄:登錄/登出、DDL/DML、失敗嘗試、權限變更。
  • 日誌轉發至 SIEM / ELK / Kafka,不可本地可刪改。

10. 定期安全掃描與合規檢查

  1. CIS MySQL Benchmark**:下載對應版本基準,逐項核查 (腳本化)。
  2. 漏洞掃描**:Nessus / OpenVAS 定期掃描 3306 端口。
  3. 權限回收**:季度審核 mysql.user、db、tables_priv、columns_priv,回收離職/廢棄賬號、過度授權。
  4. 密碼輪換**:啟用 validate_password 強制複雜度/過期,配合 Vault 自動化輪換應用賬號。

快速修復腳本 (緊急情況)


mysqlcheck -A -o -r -p  # 分析/優化/修復所有庫所有表
mysqlcheck -o -r db_name -p  # 指定庫

總結

安全是系統工程,**最小權限、纵深防禦、審計可追溯、自動化基線** 是核心思想。上述 10 步覆蓋「身份認證、網絡訪問、權限控制、數據保護、傳輸加密、審計合規、持續運營」七大域。建議將清單納入 Ansible/Terraform/Puppet 自動化部署,新實例一鍵達標,定期掃描偏離自動修復。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved