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

MySQL 用戶授權體系深度解析:GRANT 語法、權限層級與實戰最佳實踐

     編輯:MySQL 資料庫相關知識

權限四層級架構

層級作用範圍儲存表語法範例
全域所有資料庫mysql.userGRANT ALL ON *.* TO 'user'@'host'
資料庫指定資料庫所有表mysql.db, mysql.hostGRANT ALL ON `db`.* TO 'user'@'host'
資料表指定表所有欄位mysql.tables_privGRANT SELECT,INSERT ON `db`.`tbl` TO 'user'@'host'
欄位指定表特定欄位mysql.columns_privGRANT SELECT(`col1`),UPDATE(`col2`) ON `db`.`tbl` TO 'user'@'host'

最終有效權限 = 全域 OR (資料庫 AND 主機) OR 資料表 OR 欄位,高層級權限不可被低層級拒絕(無否決機制)。

GRANT 完整語法

GRANT priv_type [(column_list)]
  ON {tbl_name | * | *.* | db_name.*}
  TO user_specification [, user_specification] ...
  [IDENTIFIED BY 'password']
  [WITH GRANT OPTION]

關鍵字說明

  • priv_type:ALL、SELECT、INSERT、UPDATE、DELETE、CREATE、DROP、INDEX、ALTER、GRANT、RELOAD、SHUTDOWN、PROCESS、FILE、REFERENCES(未實現)、USAGE(無權限)。
  • user_specification:'user'@'host',支援萬用字元 %(如 'user'@'%.example.com'、'user'@'192.168.1.%')。
  • IDENTIFIED BY:創建新用戶時必須指定,否則無密碼(高風險)。
  • WITH GRANT OPTION:允許將自身擁有的權限再授予他人,謹慎授予。

實戰授權範例

超級管理員

GRANT ALL ON *.* TO 'admin'@'localhost' IDENTIFIED BY 'strongpass' WITH GRANT OPTION;

應用程式帳號(單庫讀寫)

GRANT SELECT,INSERT,UPDATE,DELETE ON `app_db`.* TO 'app_user'@'10.0.0.%' IDENTIFIED BY 'apppass';

唯讀報表帳號

GRANT SELECT ON `report_db`.* TO 'readonly'@'%' IDENTIFIED BY 'readonlypass';

查看與撤銷權限

  • SHOW GRANTS FOR 'user'@'host'; 顯示具體授權語句(密碼顯示為加密雜湊)。
  • REVOKE priv_type ON object FROM 'user'@'host'; 回收權限,配合 FLUSH PRIVILEGES 生效。

直接操作授權表(不推薦,易出錯)

若必須手動 INSERT/UPDATE mysql.user/db/tables_priv/columns_priv,務必記住 FLUSH PRIVILEGES 或 mysqladmin reload 重新載入,否則修改不生效。欄位權限值存儲為字串 'Select,Insert' 格式。

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