在本教學中,您將學習如何使用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
語句向用戶授予許可權。