| 層級 | 作用範圍 | 儲存表 | 語法範例 |
|---|---|---|---|
| 全域 | 所有資料庫 | mysql.user | GRANT ALL ON *.* TO 'user'@'host' |
| 資料庫 | 指定資料庫所有表 | mysql.db, mysql.host | GRANT ALL ON `db`.* TO 'user'@'host' |
| 資料表 | 指定表所有欄位 | mysql.tables_priv | GRANT SELECT,INSERT ON `db`.`tbl` TO 'user'@'host' |
| 欄位 | 指定表特定欄位 | mysql.columns_priv | GRANT SELECT(`col1`),UPDATE(`col2`) ON `db`.`tbl` TO 'user'@'host' |
最終有效權限 = 全域 OR (資料庫 AND 主機) OR 資料表 OR 欄位,高層級權限不可被低層級拒絕(無否決機制)。
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' 格式。