MySQL 預設 root 僅允許本地登入,遠程連線需完成三步:建立遠程授權用戶、開放防火牆 3306 埠、調整綁定位址。
mysql -u root -p -- 本地登入用戶 (保留) GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'localhost' IDENTIFIED BY 'StrongPass#2024' WITH GRANT OPTION; -- 遠程連線用戶 (% 代表任意 IP) GRANT ALL PRIVILEGES ON *.* TO 'app_user'@'%' IDENTIFIED BY 'StrongPass#2024' WITH GRANT OPTION; FLUSH PRIVILEGES;
最小權限原則: 生產環境請僅授予必要權限 (如 SELECT, INSERT, UPDATE, DELETE),避免使用 ALL PRIVILEGES。
vi /etc/sysconfig/iptables # 在 REJECT 規則之前插入 -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT service iptables restart
firewall-cmd --permanent --add-port=3306/tcp firewall-cmd --reload # 或限定來源 IP firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
ufw allow 3306/tcp # 或限定 IP ufw allow from 192.168.1.0/24 to any port 3306
vi /etc/my.cnf (或 /etc/mysql/my.cnf) [mysqld] # 預設 bind-address=127.0.0.1 僅監聽本地 # 註釋或改為 0.0.0.0 監聽所有介面 # bind-address = 127.0.0.1 bind-address = 0.0.0.0
修改後 重啟 mysqld:systemctl restart mysqld。
# 客戶端測試 mysql -h 192.168.1.100 -u app_user -p # 或使用 telnet/nc 檢查埠通達性 telnet 192.168.1.100 3306 nc -zv 192.168.1.100 3306
DELETE FROM mysql.user WHERE User='root' AND Host!='localhost'; FLUSH PRIVILEGES;ssl-ca, ssl-cert, ssl-key 並要求 REQUIRE SSL。mysql.general_log 或 audit_log。