MySQL 權限系統基於四張授權表:user、db、tables_priv、columns_priv(另有 host 表不受 GRANT/REVOKE 影響)。GRANT/REVOKE 是操作這些表的前端介面,比直接修改資料表更安全直觀。
GRANT ALL PRIVILEGES ON *.* TO 'system'@'localhost' IDENTIFIED BY 'manager' WITH GRANT OPTION;
*.*:所有資料庫、所有資料表WITH GRANT OPTION:允許將自身權限轉授他人@'localhost' 降低暴力破解風險| 層級 | 語法範例 | 適用範圍 |
|---|---|---|
| 全域 | GRANT ALL ON *.* | 所有資料庫,含管理權限 |
| 資料庫 | GRANT ALL ON db_name.* | 單一資料庫所有表 |
| 資料表 | GRANT SELECT,INSERT ON db.tbl | 單一資料表 |
| 欄位 | GRANT UPDATE(col) ON db.tbl | 單一欄位 |
FILE、PROCESS、RELOAD、SHUTDOWNGRANT RELOAD ON *.* TO 'flush_user'@'localhost' IDENTIFIED BY 'pwd';user@'%':任意主機(最不安全)user@'%.domain.com':特定網域user@'192.168.1.%':IP 段user@'192.168.1.0/255.255.255.0':CIDR 表示法(MySQL 3.23+)GRANT ALL ON tmp.* TO ''@'mars.net';
允許 mars.net 網域任何用戶使用 tmp 資料庫建立臨時表,不影響主業務資料權限。
INSERT INTO user
VALUES('localhost','system',PASSWORD('manager'),
'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
MySQL 3.22.34 共 14 個 Y,對應權限順序:
注意: 新版 MySQL 權限欄位已擴充(含 Create_tmp_table_priv、Lock_tables_priv 等),直接 INSERT 需對應完整欄位數,建議改用 GRANT。
CREATE DATABASE XinXiKu;
@'localhost'、強密碼、定期輪換DROP/SHUTDOWN 等高危權限SHOW GRANTS FOR 'user'@'host';