MySQL 權限系統基於 user 表的 Host、User、Password 三元組匹配。默認 root@localhost 僅允許本地 Socket 連接,遠程需顯式授權。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'StrongPass#2024' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'192.168.1.100' IDENTIFIED BY 'StrongPass#2024';
FLUSH PRIVILEGES;
GRANT SELECT, SHOW VIEW ON mydb.* TO 'readonly'@'%' IDENTIFIED BY 'ReadOnly#2024';
FLUSH PRIVILEGES;
USE mysql;
UPDATE user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
風險:易誤操作導致無法登錄,不推薦生產環境使用。
/etc/my.cnf[mysqld]
bind-address = 0.0.0.0 # 監聽所有網卡,或指定具體 IP 如 192.168.1.10
# skip-networking 註釋掉
重啟服務:systemctl restart mysqld
# 客戶端測試
mysql -h 192.168.1.10 -umyuser -pStrongPass#2024 -e "SELECT USER(), CURRENT_USER();"
# 服務端查看連接
SHOW PROCESSLIST;
SELECT Host, User FROM mysql.user WHERE User='myuser';
| 錯誤碼 | 含義 | 排查方向 |
|---|---|---|
| 1045 | Access denied | 密碼錯誤、Host 不匹配、權限未刷新 |
| 1130 | Host not allowed | user 表無對應 Host 行、bind-address 限制 |
| 2003 | Can't connect | 防火牆、服務未啟動、端口錯誤、bind-address=127.0.0.1 |
| 2013 | Lost connection | 網絡抖動、大包超過 max_allowed_packet |
validate_password 插件強制複雜度GRANT ... TO 'user'@'10.0.0.%' 限制網段ssh -L 3306:localhost:3306 user@db_hostSELECT User, Host, plugin FROM mysql.user; 檢查異常賬戶mysql -e "GRANT ...;" 配合 Ansible/Shell 自動化