在本教學中,您將學習如何使用MySQL中的GRANT語句向MySQL用戶授予許可權。
MySQL GRANT語句簡介
創建新的用戶帳戶後,用戶沒有任何許可權。如要向用戶帳戶授予許可權,請使用GRANT語句。
下麵說明GRANT語句的語法:
GRANT privilege,[privilege],.. ON privilege_level
TO user [IDENTIFIED BY password]
[REQUIRE tsl_option]
[WITH [GRANT_OPTION | resource_option]];
下麵讓我們來詳細地看看GRANT語句 -
- 首先,在
GRANT關鍵字之後指定一個或多個特權。如果要授予用戶多個許可權,則每個許可權都將以逗號分隔(見下表中的特權列表)。 - 接下來,指定確定特權應用級別的
privilege_level。MySQL支持全局(*.*),資料庫(database.*),表(database.table)和列級別。 如果您使用列許可權級別,則必須在每個許可權之後使用逗號分隔列的列表。 - 然後,放置要授予許可權的用戶。如果用戶已經存在,則
GRANT語句修改其特權。如不存在,則GRANT語句將創建一個新用戶。可選的條件IDENTIFIED BY允許為用戶設置新密碼。 - 之後,可指定用戶是否必須通過安全連接(如
SSL,X059等)連接到資料庫伺服器。 - 最後,可選的
WITH GRANT OPTION子句允許此用戶授予其他用戶或從其他用戶刪除您擁有的許可權。此外,可以使用WITH子句來分配MySQL資料庫伺服器的資源,例如,設置用戶每小時可以使用多少個連接或語句。這在MySQL共用託管等共用環境中非常有用。
請注意,要使用GRANT語句,您必須具有GRANT OPTION許可權和您授予其他用戶的許可權。 如果啟用了read_only系統變數,則需要具有SUPER許可權才能執行GRANT語句授權。
我們來練習一些使用MySQL中的GRANT語句的例子來更好的理解。
MySQL GRANT示例
通常,我們首先使用CREATE USER語句創建新的用戶帳戶,然後再使用GRANT語句向用戶授予許可權。
例如,以下CREATE USER語句創建一個新的超級用戶帳戶。
CREATE USER super@localhost IDENTIFIED BY 'newpasswd';
要查看已分配給super@localhost用戶帳戶的許可權,請使用SHOW GRANTS語句。
SHOW GRANTS FOR super@localhost;
上面代碼執行結果如下 -
mysql> SHOW GRANTS FOR super@localhost;
+-------------------------------------------+
| Grants for super@localhost |
+-------------------------------------------+
| GRANT USAGE ON *.* TO 'super'@'localhost' |
+-------------------------------------------+
1 row in set
要向super@localhost用戶帳戶授予所有權限,請使用以下語句。
GRANT ALL ON *.* TO 'super'@'localhost' WITH GRANT OPTION;
ON *.*子句表示MySQL中的所有資料庫和所有對象。WITH GRANT OPTION允許super@localhost向其他用戶授予許可權。
現在,如果再次執行SHOW GRANTS FOR super@localhost語句,您將看到super@localhost的許可權已被更新。
SHOW GRANTS FOR super@localhost;
執行上面查詢語句,得到以下結果 -
mysql> SHOW GRANTS FOR super@localhost;
+----------------------------------------------------------------------+
| Grants for super@localhost |
+----------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'super'@'localhost' WITH GRANT OPTION |
+----------------------------------------------------------------------+
1 row in set
要創建一個用戶:auditor,並所有示例資料庫(zaixiandb)中的所有權限,請使用以下語句:
CREATE USER auditor@localhost IDENTIFIED BY 'newpasswd';
GRANT ALL ON zaixiandb.* TO auditor@localhost;
您可以在單個GRANT語句中授予多個許可權。 例如,創建一個針對zaixiandb資料庫執行SELECT,INSERT和UPDATE語句的許可權的用戶,如下語句:
CREATE USER rfc IDENTIFIED BY 'mypasswd';
GRANT SELECT, UPDATE, DELETE ON zaixiandb.* TO rfc;
現在,如果您使用rfc用戶帳戶登錄到MySQL伺服器併發出以下查詢語句:
CREATE TABLE city(
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255)
);
MySQL將發出以下錯誤資訊:
ERROR 1142 (42000): CREATE command denied to user 'rfc'@'localhost' for table 'city'
GRANT允許的特權
下表說明了可用於GRANT和REVOKE語句的所有可用許可權:
| 許可權 | 含義 | 全局 | 資料庫 | 表 | 列 | 過程 | 代理 |
|---|---|---|---|---|---|---|---|
ALL [PRIVILEGES] |
授予除了GRANT OPTION之外的指定訪問級別的所有權限 |
||||||
ALTER |
允許用戶使用ALTER TABLE語句 |
x | x | x | |||
ALTER ROUTINE |
允許用戶更改或刪除存儲程式 | x | x | x | |||
CREATE |
允許用戶創建資料庫和表 | x | x | x | |||
CREATE ROUTINE |
x | x | |||||
CREATE TABLESPACE |
允許用戶創建,更改或刪除表空間和日誌檔組 | x | |||||
CREATE TEMPORARY TABLES |
允許用戶使用CREATE TEMPORARY TABLE創建臨時表 |
x | x | ||||
CREATE USER |
允許用戶使用CREATE USER,DROP USER,RENAME USER和REVOKE ALL PRIVILEGES語句。 |
x | |||||
CREATE VIEW |
允許用戶創建或修改視圖 | x | x | x | |||
DELETE |
允許用戶使用DELETE |
x | x | x | |||
DROP |
允許用戶刪除資料庫,表和視圖 | x | x | x | |||
EVENT |
能夠使用事件計畫的事件 | x | x | ||||
EXECUTE |
允許用戶執行存儲過程/存儲函數 | x | x | ||||
FILE |
允許用戶讀取資料庫目錄中的任何檔 | x | |||||
GRANT OPTION |
允許用戶有權授予或撤銷其他帳戶的許可權 | x | x | x | x | x | |
INDEX |
允許用戶創建或刪除索引 | x | x | x | |||
INSERT |
允許用戶使用INSERT語句 |
x | x | x | x | ||
LOCK TABLES |
允許用戶在具有SELECT許可權的表上使用LOCK TABLES |
x | x | ||||
PROCESS |
允許用戶使用SHOW PROCESSLIST語句查看所有進程 |
x | |||||
PROXY |
啟用用戶代理 | ||||||
REFERENCES |
允許用戶創建外鍵 | x | x | x | x | ||
RELOAD |
允許用戶使用FLUSH操作 |
x | |||||
REPLICATION CLIENT |
允許用戶查詢主伺服器或從伺服器的位置 | x | |||||
REPLICATION SLAVE |
允許用戶使用複製從站從主機讀取二進位日誌事件 | x | |||||
SELECT |
允許用戶使用SELECT語句 |
x | x | x | x | ||
SHOW DATABASES |
允許用戶顯示所有資料庫 | x | |||||
SHOW VIEW |
允許用戶使用SHOW CREATE VIEW語句 |
x | x | x | |||
SHUTDOWN |
允許用戶使用mysqladmin shutdown命令 |
x | |||||
SUPER |
允許用戶使用其他管理操作,如CHANGE MASTER TO,KILL,PURGE BINARY LOGS,SET GLOBAL和mysqladmin命令 |
x | |||||
TRIGGER |
允許用戶使用TRIGGER操作 |
x | x | x | |||
UPDATE |
允許用戶使用UPDATE語句 |
x | x | x | x | ||
USAGE |
相當於“無權限” |
在本教學中,您已經學會了如何使用MySQL的GRANT語句向用戶授予許可權。
