首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 資料庫安全配置最佳實踐:帳號、權限、SSL 加密

     編輯:MySQL 綜合教學

MySQL 資料庫安全配置最佳實踐:帳號、權限、SSL 加密

資料庫安全防線分三層:認證 (誰能連)、授權 (能做什麼)、傳輸加密 (數據在飛行中不可竄改/竊聽)。本文系統梳理 MySQL 用戶體系、權限模型、SSL/TLS 配置與最小權限原則落地。

一、帳號體系與認證

MySQL 用戶 = 用戶名 + 主機 + 密碼。同名不同主機視為不同用戶,權限完全隔離。

CREATE USER 'app_user'@'10.0.%.%' IDENTIFIED BY 'StrongPass#2024';
CREATE USER 'readonly'@'%' IDENTIFIED BY 'ReadOnly#2024' REQUIRE SSL;
-- 8.0 支援雙因子認證
ALTER USER 'app_user'@'10.0.%.%' ADD 2FA AUTHENTICATION FACTOR;

二、權限模型 (GRANT/REVOKE)

常用權限分類

類別權限說明
數據操作 (DML)SELECT查詢
INSERT插入
UPDATE更新
DELETE刪除
REFERENCES建外鍵引用
EXECUTE執行存儲過程/函數
結構變更 (DDL)CREATE建表/庫
DROP刪表/庫
ALTER修改表結構
INDEX建/刪索引
CREATE VIEW建視圖
管理權限 (高危)GRANT OPTION將自己權限授予他人
SUPERKILL、CHANGE MASTER、SET GLOBAL、Debug
SHUTDOWN關閉服務器
RELOADFLUSH 操作
PROCESSSHOW PROCESSLIST
FILELOAD DATA INFILE / SELECT INTO OUTFILE (極高危)
REPLICATION CLIENT/SLAVE複製相關

授權範例

-- 僅讀賬號 (生產只讀副本)
GRANT SELECT ON `biz_db`.* TO 'readonly'@'10.0.%.%';

-- 應用寫入賬號 (無 DDL、無 GRANT)
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `biz_db`.* TO 'app_user'@'10.0.%.%';

-- 開發賬號 (測試庫全權限)
GRANT ALL PRIVILEGES ON `dev_db`.* TO 'dev'@'10.0.%.%' WITH GRANT OPTION;

-- 撤銷權限
REVOKE DELETE ON `biz_db`.* FROM 'app_user'@'10.0.%.%';

-- 查看權限
SHOW GRANTS FOR 'app_user'@'10.0.%.%';

三、SSL/TLS 傳輸加密

1. 驗證 SSL 支援

SHOW VARIABLES LIKE 'have_ssl';
-- YES 表示已編譯 OpenSSL (官方 5.7+ 預設開啟)

2. 生成憑證 (生產請用 CA 簽發)

# 使用 MySQL 自帶工具 (5.7+)
mysql_ssl_rsa_setup --datadir=/var/lib/mysql
# 生成: ca.pem, server-cert.pem, server-key.pem, client-cert.pem, client-key.pem

3. 配置 my.cnf 強制 SSL

[mysqld]
ssl_ca=/var/lib/mysql/ca.pem
ssl_cert=/var/lib/mysql/server-cert.pem
ssl_key=/var/lib/mysql/server-key.pem
require_secure_transport=ON  # 強制所有連接必須 SSL

4. 客戶端連接驗證

# 命令列
mysql -h db-host -u app_user -p --ssl-ca=ca.pem --ssl-cert=client-cert.pem --ssl-key=client-key.pem

# JDBC URL
jdbc:mysql://db-host:3306/biz_db?useSSL=true&verifyServerCertificate=true&
  clientCertificateKeyStoreUrl=file:/path/client.p12&
  clientCertificateKeyStorePassword=secret&
  trustCertificateKeyStoreUrl=file:/path/ca.p12&
  trustCertificateKeyStorePassword=secret

5. GRANT 強制 SSL (細粒度控制)

GRANT ALL ON `biz_db`.* TO 'app_user'@'10.0.%.%' REQUIRE SSL;
GRANT SELECT ON `biz_db`.* TO 'readonly'@'%' REQUIRE X509;
GRANT SELECT ON `biz_db`.* TO 'audit'@'%' REQUIRE SUBJECT '/CN=audit-client';
GRANT SELECT ON `biz_db`.* TO 'partner'@'%' REQUIRE ISSUER '/CN=MyCA';
GRANT SELECT ON `biz_db`.* TO 'legacy'@'%' REQUIRE CIPHER 'TLS_AES_256_GCM_SHA384';

四、最小權限落地清單

  1. 業務賬號:僅授予具體庫表的 SELECT/INSERT/UPDATE/DELETE/EXECUTE,無 DDL、無 GRANT、無 FILE、無 SUPER。
  2. 只讀賬號:僅 SELECT,強制 SSL,來源 IP 限制讀副本 VIP。
  3. 管理賬號:DBA 專用,REQUIRE SSL,配合堡壘機/跳板機審計。
  4. 定期審計:SELECT user, host FROM mysql.user WHERE User NOT IN ('mysql.sys','root'); 檢查無用賬號、通配符主機、弱密碼。
  5. 密碼策略:validate_password 插件強制長度、複雜度、過期輪換。
  6. 審計日誌:開啟 audit_log 記錄所有 DDL/DML/登入/失敗嘗試。
安全是系統工程:網絡層 (VPC/安全組/防火牆) + 傳輸層 (SSL/TLS) + 應用層 (參數化防注入/最小權限) + 數據層 (透明加密 TDE/字段級加密) + 審計層 (審計日誌/異常行為檢測)。MySQL 配置只是其中一環。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved