首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 遠程訪問授權配置全攻略:Windows/Linux 通用方案

     編輯:MySQL 資料庫相關知識

核心原理

MySQL 權限系統基於 user 表的 Host、User、Password 三元組匹配。默認 root@localhost 僅允許本地 Socket 連接,遠程需顯式授權。

方法一:GRANT 授權法(推薦,動態生效)

任意主機訪問所有庫

GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'StrongPass#2024' WITH GRANT OPTION;
FLUSH PRIVILEGES;

指定 IP 訪問特定庫

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;

方法二:直接修改 mysql.user 表(需刷新)

USE mysql;
UPDATE user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

風險:易誤操作導致無法登錄,不推薦生產環境使用。

Linux 環境額外配置:綁定網卡

修改 /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';

常見錯誤代碼對照

錯誤碼含義排查方向
1045Access denied密碼錯誤、Host 不匹配、權限未刷新
1130Host not alloweduser 表無對應 Host 行、bind-address 限制
2003Can't connect防火牆、服務未啟動、端口錯誤、bind-address=127.0.0.1
2013Lost connection網絡抖動、大包超過 max_allowed_packet

安全加固清單

  1. 最小權限原則:業務賬戶僅授予所需庫/表/操作
  2. 強密碼策略:validate_password 插件強制複雜度
  3. IP 白名單:GRANT ... TO 'user'@'10.0.0.%' 限制網段
  4. 禁用 root 遠程:運維走堡壘機/SSH 隧道 ssh -L 3306:localhost:3306 user@db_host
  5. 定期審計:SELECT User, Host, plugin FROM mysql.user; 檢查異常賬戶

GUI 工具推薦

  • Navicat / DataGrip / DBeaver:可視化管理用戶、權限、導入導出
  • 命令行批量:mysql -e "GRANT ...;" 配合 Ansible/Shell 自動化
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved