在本教學中,您將學習如何使用MySQL中的GRANT
語句向MySQL使用者授予許可權。
建立新的使用者帳戶後,使用者沒有任何許可權。如要向使用者帳戶授予許可權,請使用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
語句的例子來更好的理解。
通常,我們首先使用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
,並所有範例資料庫(yiibaidb
)中的所有許可權,請使用以下語句:
CREATE USER auditor@localhost IDENTIFIED BY 'newpasswd';
GRANT ALL ON yiibaidb.* TO auditor@localhost;
您可以在單個GRANT
語句中授予多個許可權。 例如,建立一個針對yiibaidb
資料庫執行SELECT,INSERT和UPDATE語句的許可權的使用者,如下語句:
CREATE USER rfc IDENTIFIED BY 'mypasswd';
GRANT SELECT, UPDATE, DELETE ON yiibaidb.* 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
和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
語句向使用者授予許可權。