默認僅允許本地訪問,遠程訪問需配置:用戶 Host 授權、bind_address、防火牆、SSL 加密。
MySQL 權限系統基於 mysql.user 表,**用戶 = 用戶名 + Host**。同名不同 Host 視為不同用戶。
USE mysql;
UPDATE user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
-- 或
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'strong_pass' WITH GRANT OPTION;
FLUSH PRIVILEGES;
風險:root 遠程登錄、全庫全表權限、暴力破解目標。
-- 創建用戶(指定來源 IP/網段)
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'strong_pass_123';
-- 或特定 IP
CREATE USER 'app_user'@'192.168.1.100' IDENTIFIED BY 'strong_pass_123';
-- 按需授權(最小權限原則)
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'192.168.1.%';
-- 僅讀賬號
GRANT SELECT ON app_db.* TO 'readonly'@'192.168.1.%' IDENTIFIED BY 'pass';
FLUSH PRIVILEGES;
# /etc/my.cnf [mysqld]
# 監聽所有接口(默認 127.0.0.1 僅本地)
bind_address = 0.0.0.0
# 或具體內網 IP
bind_address = 192.168.1.10
port = 3306
# 跳過 DNS 解析,加快連接
skip_name_resolve = 1
# firewalld (CentOS 7+)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
firewall-cmd --reload
# iptables
iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
iptables-save > /etc/sysconfig/iptables
# 雲廠商安全組:入站規則 3306/tcp 來源 192.168.1.0/24
# 1. 生成證書(或用 mysqld 自動生成 5.7+)
mysql_ssl_rsa_setup --datadir=/var/lib/mysql
# 2. 配置強制 SSL
# /etc/my.cnf [mysqld]
require_secure_transport = ON
ssl_ca = /var/lib/mysql/ca.pem
ssl_cert = /var/lib/mysql/server-cert.pem
ssl_key = /var/lib/mysql/server-key.pem
# 3. 客戶端驗證
mysql -h 192.168.1.10 -u app_user -p --ssl-mode=VERIFY_CA --ssl-ca=ca.pem
# 4. 用戶強制 SSL
ALTER USER 'app_user'@'192.168.1.%' REQUIRE SSL;
FLUSH PRIVILEGES;
# 測試連通性
telnet 192.168.1.10 3306
nc -zv 192.168.1.10 3306
# 客戶端連接測試
mysql -h 192.168.1.10 -u app_user -p -e "SELECT USER(), CURRENT_USER();"
# 常見錯誤
# ERROR 1130 (HY000): Host '192.168.1.100' is not allowed to connect
# → 檢查 user 表 Host 欄位、bind_address、防火牆、skip_name_resolve
# ERROR 2026 (HY000): SSL connection error
# → 檢查證書路徑、ssl_mode、服務端 require_secure_transport
audit_log 插件記錄所有操作遠程訪問 = 攻擊面擴大。遵循「最小權限、最小暴露、加密傳輸、審計可追溯」四原則。雲環境優先使用 VPC 內網、PrivateLink、ProxySQL 中間件,避免數據庫直接暴露公網。