首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 遠程訪問授權三種方式:GRANT、UPDATE host、CREATE USER 完整指南

     編輯:MySQL 綜合教學

MySQL 遠程訪問授權三種方式:GRANT、UPDATE host、CREATE USER 完整指南

MySQL 預設僅允許本地連線,遠程訪問需顯式授權。本文整理三種主流授權方式,適用不同版本與場景。

核心概念:用戶@主機 模型

  • 'user'@'%':任意 IP 遠程連線
  • 'user'@'192.168.1.%':特定網段
  • 'user'@'localhost':本機 Unix Socket
  • 'user'@'127.0.0.1':本機 TCP
⚠️ %' 不包含 localhost,需單獨授權。

方式一:GRANT 隱式建用戶 + 授權(5.7 及舊版通用)

-- 登入 root
mysql -u root -p

-- 授權所有庫所有表,任意遠程 IP
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' IDENTIFIED BY 'StrongPass123!';

-- 僅授權特定庫
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';

-- 僅授權特定 IP
GRANT SELECT, INSERT, UPDATE ON app_db.* TO 'app_user'@'192.168.1.100' IDENTIFIED BY 'StrongPass123!';

-- 刷新權限生效
FLUSH PRIVILEGES;

方式二:CREATE USER + GRANT(8.0 標準,推薦)

-- 1. 建立用戶(支援密碼策略、過期、鎖定等)
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPass123!'
  PASSWORD EXPIRE INTERVAL 90 DAY
  FAILED_LOGIN_ATTEMPTS 5
  PASSWORD_LOCK_TIME 2;

-- 2. 授權
GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%' WITH GRANT OPTION;
-- 或精細授權
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'remote_user'@'%';

-- 3. 刷新
FLUSH PRIVILEGES;

方式三:直接修改 mysql.user 表 host 欄位(不推薦,僅緊急修復)

USE mysql;

-- 查看現狀
SELECT Host, User FROM user WHERE User='app_user';

-- 修改 host 從 localhost 改為 %(允許遠程)
UPDATE user SET Host='%' WHERE User='app_user' AND Host='localhost';

FLUSH PRIVILEGES;
⚠️ 直接操作系統表風險高:可能破壞權限一致性、跳過密碼驗證邏輯、升級不兼容。僅在無法正常登入時緊急使用,事後必須用標準 GRANT 重建。

網路層配置(必檢項)

層級檢查項命令/配置
MySQL 配置bind-addressbind-address=0.0.0.0 (my.cnf) 或註釋掉預設 127.0.0.1
MySQL 配置skip-networking必須關閉(註釋或設 0)
防火牆3306 埠開放firewall-cmd --permanent --add-port=3306/tcp && firewall-cmd --reload
雲廠商安全組/防火牆入站規則開放 3306,來源限制業務 IP 段
SELinuxMySQL 網路連線setsebool -P mysql_connect_any 1

驗證遠程連線

# 客戶端測試
mysql -h 192.168.1.50 -u remote_user -p

# 檢查連線來源
SHOW PROCESSLIST;
-- Host 欄顯示 client_ip:port

常見問題排查

錯誤原因解決
Host 'x.x.x.x' is not allowed to connect用戶無 % 或對應 IP 授權GRANT ... TO 'user'@'%' / 'user'@'x.x.x.x'
Access denied for user 'user'@'localhost'匿名用戶 ''@'localhost' 攔截DELETE FROM mysql.user WHERE User=''; FLUSH PRIVILEGES;
Connection refused / timeoutbind-address / 防火牆 / 安全組檢查 my.cnf bind-address=0.0.0.0、開放 3306
SSL connection required8.0 預設要求 SSLJDBC URL 加 useSSL=false 或配置憑證

安全基線建議

  • 禁止 root 遠程:DELETE FROM mysql.user WHERE User='root' AND Host!='localhost';
  • 最小權限原則:應用帳號僅授權所需庫/表/操作
  • 強密碼策略:安裝 validate_password 元件
  • IP 白名單:'user'@'192.168.1.%' 而非 '%'
  • 定期審計:SELECT Host, User FROM mysql.user WHERE Host='%';
遠程授權鐵律:網路通 → bind-address 開 → 用戶@% 授權 → 防火牆放行 → 強密碼 → 最小權限 → 定期審計。任一環節缺失皆導致連線失敗或安全風險。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved