test 庫。% 主機)。ALL PRIVILEGES / DROP / SHUTDOWN。
mysql_secure_installation
# 依次:設置 root 強密碼 → 移除匿名用戶 → 禁止遠程 root 登錄 → 移除 test 庫 → 重載權限表
useradd -r -s /sbin/nologin mysql (包管理通常已創建)。chown -R mysql:mysql /var/lib/mysql。chown root:mysql /etc/my.cnf && chmod 640 /etc/my.cnf。
[mysqld]
port = 3306 # 建議改非標準高位端口 (如 13306),配合防火牆
bind_address = 10.0.0.10 # 僅綁定內網管理 IP,嚴禁 0.0.0.0
# skip_networking = ON # 極致模式:僅本地 Socket 連接,彈性差
[mysqld]
local_infile = 0 # 禁用 LOAD DATA LOCAL INFILE,防止任意文件讀取漏洞 (CVE-2013-XXXX 類)
secure_file_priv = /data/mysql_files/ # 僅允許此目錄 SELECT ... INTO OUTFILE / LOAD DATA INFILE
[mysqld]
skip_show_database = ON
# 僅擁有 SHOW DATABASES 權限或對庫有任意權限的用戶才能看到庫列表
-- 僅授權業務所需庫、表、列、操作
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'@'%';
-- 5.7
RENAME USER 'root'@'localhost' TO 'dba_admin'@'localhost';
-- 8.0
ALTER USER 'root'@'localhost' RENAME TO 'dba_admin'@'localhost';
FLUSH PRIVILEGES;
同步更新監控/備份/運維腳本中的用戶名。
mysql_ssl_rsa_setup 自動生成自簽)。
[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
mysql -h host -u user -p --ssl-mode=VERIFY_CA --ssl-ca=ca.pem。INSTALL PLUGIN audit_log SONAME 'audit_log.so'; 配置策略。mysql.user、db、tables_priv、columns_priv,回收離職/廢棄賬號、過度授權。validate_password 強制複雜度/過期,配合 Vault 自動化輪換應用賬號。
mysqlcheck -A -o -r -p # 分析/優化/修復所有庫所有表
mysqlcheck -o -r db_name -p # 指定庫
安全是系統工程,**最小權限、纵深防禦、審計可追溯、自動化基線** 是核心思想。上述 10 步覆蓋「身份認證、網絡訪問、權限控制、數據保護、傳輸加密、審計合規、持續運營」七大域。建議將清單納入 Ansible/Terraform/Puppet 自動化部署,新實例一鍵達標,定期掃描偏離自動修復。