MySQL授予許可權(Grant語句)

在本教學中,您將學習如何使用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,並所有示例資料庫(zaixiandb)中的所有權限,請使用以下語句:

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

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

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

下表說明了可用於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語句向用戶授予許可權。


上一篇: MySQL管理 下一篇: MySQL全文搜索