萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> 資料庫綜合

MySQL 遠程訪問授權兩步走:防火牆放行 3306 + GRANT 網段授權

從「拒絕連接」到「安全遠程訪問」的標準化操作

MySQL 默認只允許本地連接。開啟遠程訪問僅需兩步:網絡層放行端口、數據庫層授權賬號。本文提供生產環境安全加固版操作指南。

步驟一:網絡層 — 防火牆放行 3306 (或自定義端口)

# Linux (firewalld)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

# Linux (iptables)
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save

# Windows 防火牆 (PowerShell 管理員)
New-NetFirewallRule -DisplayName "MySQL 3306" -Direction Inbound -LocalPort 3306 -Protocol TCP -Action Allow

# 雲廠商安全組/防火牆:控制台添加入站規則 TCP 3306,來源建議限制為應用服務器 CIDR (如 10.0.1.0/24),禁止 0.0.0.0/0。

步驟二:數據庫層 — 創建遠程賬號並最小權限授權

-- 1. 以 root 登錄
mysql -h 127.0.0.1 -u root -p

-- 2. 創建專用遠程賬號 (推薦不使用 root)
CREATE USER 'app_user'@'10.0.1.%' IDENTIFIED BY 'Str0ngP@ssw0rd!';  -- 限定應用服務器網段
-- 或特定 IP
CREATE USER 'app_user'@'10.0.1.100' IDENTIFIED BY 'Str0ngP@ssw0rd!';
-- 禁止使用 '%' (任意主機),除非極度確信網絡隔離足夠

-- 3. 最小權限授權 (按業務需要)
GRANT SELECT, INSERT, UPDATE, DELETE ON `mydb`.* TO 'app_user'@'10.0.1.%';
-- 僅授權特定表
GRANT SELECT, INSERT ON `mydb`.`orders` TO 'app_user'@'10.0.1.%';
-- 只讀賬號 (報表/數倉)
GRANT SELECT ON `mydb`.* TO 'readonly'@'10.0.1.%';

-- 4. 刷新權限生效
FLUSH PRIVILEGES;

-- 5. 驗證遠程連接
mysql -h  -u app_user -p -D mydb -e "SELECT 1;"

關鍵安全加固項 (必做)

  1. 強密碼策略:validate_password 插件強制長度≥12、混合大小寫數字特殊字符、過期輪換。
  2. SSL/TLS 傳輸加密:
    REQUIRE SSL 在 GRANT 中強制加密連接;
    服務端 require_secure_transport=ON 全局強制;
    客戶端 --ssl-mode=VERIFY_CA --ssl-ca=ca.pem 驗證服務端身份。
  3. 禁用不必要功能:skip_show_database、local_infile=OFF、symbolic_links=OFF。
  4. 審計日志:MariaDB Audit Plugin / MySQL Enterprise Audit / Percona Audit Log Plugin 記錄所有查詢/登錄/失敗。
  5. 定期審計賬號:SELECT User, Host, authentication_string FROM mysql.user; 清理僵屍賬號、收回過度權限。

常見連接失敗排查

生產環境連接池配置建議 (HikariCP 示例)

spring.datasource.hikari:
  maximum-pool-size: 20
  minimum-idle: 5
  connection-timeout: 30000
  idle-timeout: 600000
  max-lifetime: 1800000
  connection-test-query: SELECT 1
  data-source-properties:
    cachePrepStmts: true
    prepStmtCacheSize: 250
    prepStmtCacheSqlLimit: 2048
    useServerPrepStmts: true
    rewriteBatchedStatements: true

「最小權限、加密傳輸、網絡隔離、審計可追溯」—— 這才是專業的遠程訪問授權標準。

copyright © 萬盛學電腦網 all rights reserved
現象排查方向
Can't connect (timeout)防火牆/安全組/雲廠商 ACL、MySQL bind-address=127.0.0.1、服務未啟動
Access denied用戶名/密碼錯誤、Host 不匹配 (IP vs 域名)、密碼插件不兼容 (caching_sha2_password vs mysql_native_password)
SSL connection error客戶端不支持 TLS 版本、CA 證書路徑錯誤、require_secure_transport=ON 但客戶端未啟用 SSL
Host 'x.x.x.x' is blockedmax_connect_errors 觸發,執行 FLUSH HOSTS 或增大該變量