| 表 | 範圍 | 關鍵欄位 |
mysql.user | 全域 | Select_priv, Super_priv, Grant_priv 等 40+ 權限欄位 |
mysql.db | 資料庫級 | Db, User, Host, Select_priv... |
mysql.tables_priv | 表級 | Table_name, Column_priv |
mysql.columns_priv | 欄位級 | Column_name, Column_priv |
權限疊加邏輯:全域 OR 資料庫 OR 表 OR 欄位,GRANT OPTION 允許轉授權限。
連線參數完整指南
mysql -h host -u user -p[password] -P port -D database
# 關鍵選項
--protocol={TCP|SOCKET|PIPE|MEMORY} # 強制協議
--compress # 壓縮協議
--ssl-mode=REQUIRED # 強制 SSL
--default-auth=caching_sha2_password # 指定認證插件
權限管理最佳實踐
-- 1. 建立最小權限用戶
CREATE USER 'app_user'@'10.0.%' IDENTIFIED BY 'strong_pass';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'10.0.%';
-- 2. 僅讀報表用戶
CREATE USER 'readonly'@'%' IDENTIFIED BY 'pass';
GRANT SELECT ON *.* TO 'readonly'@'%';
-- 3. 開發測試用戶(受限)
CREATE USER 'dev'@'192.168.1.%' IDENTIFIED BY 'pass';
GRANT ALL ON dev_db.* TO 'dev'@'192.168.1.%';
-- 4. 定期審計
SELECT User, Host,
Select_priv, Insert_priv, Update_priv, Delete_priv,
Super_priv, Grant_priv
FROM mysql.user WHERE User != 'mysql.sys';
常見陷阱
GRANT ALL ON *.* 含 GRANT OPTION,等同超級用戶
- 匿名用戶
''@'localhost' 可能阻擋具名用戶登入(優先級更高)
FLUSH PRIVILEGES 僅在直接修改權限表時需要,GRANT 自動生效
- 8.0
caching_sha2_password 需客戶端支援,舊驅動需 ALTER USER ... IDENTIFIED WITH mysql_native_password
- 上一篇文章: MySQL TIMESTAMP 欄位實現「預設當前時間」與自動更新完全指南
- 下一篇文章: MySQL 預存程序動態 SQL 實戰:PREPARE/EXECUTE 變數限制與表名參數化解決方案
Copyright ©
程式碼之家 All Rights Reserved