萬盛學電腦網

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

MySQL 開啟遠程連線授權完整步驟與安全強化指南

核心授權語句

-- 建立用戶並授權(MySQL 8.0+ 建議分步)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER, REFERENCES
  ON mydb.* TO 'app_user'@'%';
FLUSH PRIVILEGES;

參數解析:

  • ALL PRIVILEGES 或列舉具體權限(最小權限原則)。
  • mydb.*:資料庫.表,* 代表所有表。*.* 為全庫全表(極度危險)。
  • 'app_user'@'%':% 允許任意 IP,生產環境務必限定具體 IP 或網段(如 'app_user'@'10.0.%.%')。
  • FLUSH PRIVILEGES:重載授權表使立即生效(MySQL 8.0 通常隱含,但保留為佳)。

完整操作流程

  1. 修改綁定位址:/etc/my.cnf 或 /etc/mysql/mysql.conf.d/mysqld.cnf
    [mysqld]
    bind-address = 0.0.0.0  # 監聽所有介面,預設 127.0.0.1 僅本機
    重啟服務 systemctl restart mysqld。
  2. 防火牆放行:
    firewall-cmd --permanent --add-port=3306/tcp
    firewall-cmd --reload
    # 或限定來源 IP
    firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="10.0.1.0/24" port protocol="tcp" port="3306" accept'
  3. 建立用戶與授權(如上)。
  4. 驗證連線:
    mysql -h server_ip -u app_user -p -D mydb -e "SELECT 1;"

安全強化清單

措施說明
禁用 root 遠程登入DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1'); FLUSH PRIVILEGES;
強制 SSL/TLS 連線REQUIRE SSL 於 GRANT 子句,或全域 require_secure_transport=ON。
密碼策略安裝 validate_password 元件,強制長度、複雜度、過期輪換。
審計日誌啟用 audit_log 外掛記錄登入、查詢、DDL。
連線限制max_user_connections、max_connections 防止耗盡。
定期審核權限SHOW GRANTS FOR 'user'@'host'; 移除過期/多餘授權。

常見錯誤排查

  • Host 'x.x.x.x' is not allowed to connect → 用戶 Host 欄位不匹配,檢查 SELECT User, Host FROM mysql.user;。
  • Access denied for user 'user'@'host' (using password: YES) → 密碼錯誤或權限不足。
  • SSL connection error → 客戶端/伺服器 TLS 版本不匹配,檢查 tls_version 參數。

遠程存取便利與安全並重,嚴守最小權限、網路隔離、加密傳輸三原則。

copyright © 萬盛學電腦網 all rights reserved