MySQL授予許可權(Grant語句)

2019-10-16 22:55:41

在本教學中,您將學習如何使用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允許為使用者設定新密碼。
  • 之後,可指定使用者是否必須通過安全連線(如SSLX059等)連線到資料庫伺服器。
  • 最後,可選的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,並所有範例資料庫(yiibaidb)中的所有許可權,請使用以下語句:

CREATE USER auditor@localhost IDENTIFIED BY 'newpasswd';
GRANT ALL ON yiibaidb.* TO auditor@localhost;

您可以在單個GRANT語句中授予多個許可權。 例如,建立一個針對yiibaidb資料庫執行SELECTINSERTUPDATE語句的許可權的使用者,如下語句:

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允許的特權

下表說明了可用於GRANTREVOKE語句的所有可用許可權:

許可權 含義 全域性 資料庫 過程 代理
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 USERDROP USERRENAME USERREVOKE 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 TOKILLPURGE BINARY LOGSSET GLOBALmysqladmin命令 x
TRIGGER 允許使用者使用TRIGGER操作 x x x
UPDATE 允許使用者使用UPDATE語句 x x x x
USAGE 相當於「無許可權」

在本教學中,您已經學會了如何使用MySQL的GRANT語句向使用者授予許可權。