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

MySQL 權限管理最佳實踐:GRANT 授權、FLUSH PRIVILEGES 與最小權限原則

     編輯:MySQL 綜合教學

MySQL 權限管理最佳實踐:GRANT 授權、FLUSH PRIVILEGES 與最小權限原則

MySQL 權限系統基於「主機+用戶+密碼」三元組認證,權限分為全局、庫級、表級、列級四個層次。正確授權、及時刷新、遵循最小權限原則是資料庫安全的基石。本文梳理標準授權流程、常用權限組合、撤銷與審計技巧。

一、 標準授權流程

-- 1. 創建用戶 (推薦 8.0+ 語法)
CREATE USER 'liuyz'@'%' IDENTIFIED BY 'StrongPass#2025';

-- 2. 授權 (按需分配,避免 ALL PRIVILEGES)
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `biz_db`.* TO 'liuyz'@'%';

-- 3. 刷新生效 (8.0+ 隱式刷新,5.7 必須顯式執行)
FLUSH PRIVILEGES;

二、 權限層次與常用組合

層次語法示例適用場景
全局GRANT RELOAD, PROCESS, REPLICATION CLIENT ON *.* TO 'monitor'@'%';監控、備份、複製管理賬號
庫級GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON `app_db`.* TO 'app_rw'@'%';應用讀寫賬號 (無 DDL 權限更安全)
表級GRANT SELECT ON `app_db`.`sensitive_log` TO 'audit'@'%';審計、數據導出賬號
列級GRANT SELECT (id, name, email) ON `app_db`.`users` TO 'api_user'@'%';敏感字段隔離 (密碼哈希、身份證等)

三、 高危權限慎用清單

  • ALL PRIVILEGES:等同 root,包含 SHUTDOWN、FILE、GRANT OPTION 等極危操作。
  • FILE:可讀寫服務器文件 (LOAD_FILE/SELECT ... INTO OUTFILE),易導致系統滲透。
  • GRANT OPTION:允許將自己的權限轉授他人,權限蔓延源頭。
  • SUPER (5.7)/SYSTEM_VARIABLES_ADMIN 等 (8.0):可修改全局變量、Kill 任意線程、控制複製。
  • SHUTDOWN:可關閉數據庫實例。

四、 主機名匹配規則

  • 'user'@'%':允許任意主機連接 (生產環境**嚴禁**,需限制具體 IP/網段)。
  • 'user'@'192.168.1.%':允許特定網段。
  • 'user'@'localhost':僅允許本地 Unix Socket 連接 (繞過 TCP)。
  • 'user'@'127.0.0.1':僅允許本地 TCP 回環。

最佳實踐:應用賬號綁定應用服務器 IP;運維賬號綁定堡壘機/跳板機 IP;監控賬號綁定監控系統 IP。

五、 撤銷與審計

-- 撤銷特定權限
REVOKE INSERT, UPDATE ON `biz_db`.* FROM 'liuyz'@'%';

-- 撤銷所有權限 (保留用戶)
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'liuyz'@'%';

-- 刪除用戶
DROP USER 'liuyz'@'%';

-- 審計:查看用戶權限
SHOW GRANTS FOR 'liuyz'@'%';
SELECT * FROM information_schema.USER_PRIVILEGES WHERE GRANTEE LIKE '%liuyz%';

六、 MySQL 8.0 權限新特性

  1. 角色 (Role):CREATE ROLE 'app_read'; GRANT SELECT ON db.* TO 'app_read'; GRANT 'app_read' TO 'user1'@'%'; 實現權限集複用。
  2. 動態權限:將 SUPER 拆分為 SYSTEM_VARIABLES_ADMIN、CONNECTION_ADMIN、REPLICATION_SLAVE_ADMIN 等 30+ 細粒度權限。
  3. 密碼策略:validate_password 組件強制複雜度、過期、歷史記錄。
  4. 隱式 FLUSH PRIVILEGES:GRANT/REVOKE/CREATE USER/DROP USER 自動持久化,無需手動刷新。

七、 生產環境權限管理清單

  1. 按「業務模塊+讀寫層級」劃分賬號 (如 order_ro、order_rw、order_admin)。
  2. 所有賬號強制綁定具體 IP/網段,禁用 %。
  3. 應用賃戶隔離:不同業務線使用不同數據庫賬號,甚至不同實例。
  4. 定期 (月度) 審計 mysql.user、mysql.db、mysql.tables_priv,清理僵屍賬號、回收過期權限。
  5. 備份賬號僅授予 SELECT, RELOAD, LOCK TABLES, REPLICATION CLIENT, PROCESS (xtrabackup/mysqldump 所需)。
  6. 開啟 log_bin、audit_log 記錄所有 DDL/DCL 操作。

八、 總結

MySQL 權限管理核心三步走:**創建綁定主機用戶 → 按最小權限授予具體層級權限 → 刷新生效並持續審計**。MySQL 8.0 引入角色與動態權限大幅簡化了大規模授權維護,建議升級並重構權限體系。

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