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

MySQL 遠程訪問授權實戰:指定 IP、通配符、最小權限原則

     編輯:MySQL 綜合教學

核心授權語法

GRANT 權限列表 ON 數據庫.表 TO '用戶'@'主機' IDENTIFIED BY '密碼' [WITH GRANT OPTION];
FLUSH PRIVILEGES;

常見授權模板

場景SQL 示例說明
任意主機全權限 (極不推薦生產)GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'strong_pass' WITH GRANT OPTION;% 匹配任意 IP,僅內網測試用
指定 IP 全權限GRANT ALL PRIVILEGES ON *.* TO 'root'@'218.12.50.60' IDENTIFIED BY 'strong_pass';精確 IP,安全性高
指定網段只讀GRANT SELECT ON mydb.* TO 'readonly'@'10.0.0.%' IDENTIFIED BY '...';10.0.0.0/24 網段
指定域名 (需 DNS 解析)GRANT SELECT, INSERT ON appdb.* TO 'app'@'api.example.com' IDENTIFIED BY '...';依賴 skip_name_resolve=OFF
特定表增刪改查GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.orders TO 'order_svc'@'172.16.%.%' IDENTIFIED BY '...';最小權限原則

實操步驟:從創建用戶到驗證連通

  1. 登入 MySQL:mysql -uroot -p
  2. 創建用戶 (8.0+ 推薦):
    CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'ComplexPass#2024';
    -- 或舊版兼容
    GRANT USAGE ON *.* TO 'app_user'@'192.168.1.%' IDENTIFIED BY 'ComplexPass#2024';
  3. 授權:
    GRANT SELECT, INSERT, UPDATE, DELETE ON production_db.* TO 'app_user'@'192.168.1.%';
  4. 刷新生效:FLUSH PRIVILEGES;
  5. 驗證:
    SHOW GRANTS FOR 'app_user'@'192.168.1.%';
    -- 客戶端測試
    mysql -h db_host -u app_user -p'ComplexPass#2024' -D production_db -e "SELECT 1;"

修改現有用戶 Host (遷移/擴展訪問來源)

-- 方法 1:更新 user 表 (需權限)
USE mysql;
UPDATE user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

-- 方法 2:重新授權 (推薦,更安全)
RENAME USER 'root'@'localhost' TO 'root'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

安全加固清單

  1. 禁用 root 遠程:生產環境 root 僅允許 localhost / 127.0.0.1 / ::1。
  2. 強密碼策略:validate_password 插件強制長度、大小寫、數字、特殊字符。
  3. 網絡層隔離:安全組/防火牆僅放行應用服務器 IP 段 3306 端口。
  4. SSL 加密傳輸:REQUIRE SSL 子句強制加密連接。
  5. 定期審計:SELECT User, Host, authentication_string FROM mysql.user; 掃描弱口令、通配符 Host。

常見報錯排查

錯誤碼原因解決
1130 Host not allowed用戶 Host 不匹配檢查 SHOW GRANTS,確認 Host 模式 (IP/域名/%)
1045 Access denied密碼錯誤/插件不匹配確認密碼、authentication_plugin (caching_sha2_password vs mysql_native_password)
SSL connection required服務端強制 SSL客戶端加 --ssl-mode=REQUIRED 或配置 CA/證書

一鍵授權腳本 (Bash + 參數化)

#!/bin/bash
# grant_remote.sh     
set -euo pipefail
USER=$1; HOST=$2; DB=$3; PRIVS=$4; PASS=$5
SQL="GRANT ${PRIVS} ON ${DB} TO '${USER}'@'${HOST}' IDENTIFIED BY '${PASS}'; FLUSH PRIVILEGES;"
mysql -uroot -p"${ROOT_PASS}" -e "${SQL}"
echo "Granted ${PRIVS} on ${DB} to ${USER}@${HOST}"

掌握授權本質:用戶 = 用戶名 + 來源 Host,精確控制來源、最小化權限、加密傳輸、定期審計,構建纵深防禦體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved