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

MySQL 權限系統深度解析:用戶認證、主機匹配、權限表結構與最佳實踐

     編輯:MySQL 資料庫相關知識

用戶認證核心機制

  • MySQL 用戶 = 用戶名@主機(非系統帳號)
  • 用戶名最長 32 字元(舊版 16),主機支援通配符 %、192.168.1.%
  • 認證順序:mysql.user 表按 Host, User 排序,最具體匹配優先
  • 密碼加密:PASSWORD()(非標準 crypt),8.0 改用 caching_sha2_password

四大權限表層級

權限疊加邏輯:全域 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
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
表範圍關鍵欄位
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