首頁 > mysql教程 閱讀:0更新時間:2020-03-28 04:09:26

MySQL用戶授權(GRANT)

當成功創建用戶賬戶后,還不能執行任何操作,需要為該用戶分配適當的訪問權限??梢允褂?SHOW GRANT FOR 語句來查詢用戶的權限。

注意:新創建的用戶只有登錄 mysql 服務器的權限,沒有任何其他權限,不能進行其他操作。

USAGE ON*.* 表示該用戶對任何數據庫和任何表都沒有權限。

授予用戶權限

對于新建的 MySQL 用戶,必須給它授權,可以用 GRANT 語句來實現對新建用戶的授權。

語法格式:
GRANT
<權限類型> [ ( <列名> ) ] [ , <權限類型> [ ( <列名> ) ] ]
ON <對象> <權限級別> TO <用戶>
其中<用戶>的格式:
<用戶名> [ IDENTIFIED ] BY [ PASSWORD ] <口令>
[ WITH GRANT OPTION]
| MAX_QUERIES_PER_HOUR <次數>
| MAX_UPDATES_PER_HOUR <次數>
| MAX_CONNECTIONS_PER_HOUR <次數>
| MAX_USER_CONNECTIONS <次數>
語法說明如下:

1) <列名>

可選項。用于指定權限要授予給表中哪些具體的列。

2) ON 子句

用于指定權限授予的對象和級別,如在 ON 關鍵字后面給出要授予權限的數據庫名或表名等。

3) <權限級別>

用于指定權限的級別??梢允谟璧臋嘞抻腥缦聨捉M:
  • 列權限,和表中的一個具體列相關。例如,可以使用 UPDATE 語句更新表 students 中 student_name 列的值的權限。
  • 表權限,和一個具體表中的所有數據相關。例如,可以使用 SELECT 語句查詢表 students 的所有數據的權限。
  • 數據庫權限,和一個具體的數據庫中的所有表相關。例如,可以在已有的數據庫 mytest 中創建新表的權限。
  • 用戶權限,和 MySQL 中所有的數據庫相關。例如,可以刪除已有的數據庫或者創建一個新的數據庫的權限。

對應地,在 GRANT 語句中可用于指定權限級別的值有以下幾類格式:
  • *:表示當前數據庫中的所有表。
  • *.*:表示所有數據庫中的所有表。
  • db_name.*:表示某個數據庫中的所有表,db_name 指定數據庫名。
  • db_name.tbl_name:表示某個數據庫中的某個表或視圖,db_name 指定數據庫名,tbl_name 指定表名或視圖名。
  • tbl_name:表示某個表或視圖,tbl_name 指定表名或視圖名。
  • db_name.routine_name:表示某個數據庫中的某個存儲過程或函數,routine_name 指定存儲過程名或函數名。
  • TO 子句:用來設定用戶口令,以及指定被賦予權限的用戶 user。若在 TO 子句中給系統中存在的用戶指定口令,則新密碼會將原密碼覆蓋;如果權限被授予給一個不存在的用戶,MySQL 會自動執行一條 CREATE USER 語句來創建這個用戶,但同時必須為該用戶指定口令。

GRANT語句中的<權限類型>的使用說明如下:

1) 授予數據庫權限時,<權限類型>可以指定為以下值:

  • SELECT:表示授予用戶可以使用 SELECT 語句訪問特定數據庫中所有表和視圖的權限。
  • INSERT:表示授予用戶可以使用 INSERT 語句向特定數據庫中所有表添加數據行的權限。
  • DELETE:表示授予用戶可以使用 DELETE 語句刪除特定數據庫中所有表的數據行的權限。
  • UPDATE:表示授予用戶可以使用 UPDATE 語句更新特定數據庫中所有數據表的值的權限。
  • REFERENCES:表示授予用戶可以創建指向特定的數據庫中的表外鍵的權限。
  • CREATE:表示授權用戶可以使用 CREATE TABLE 語句在特定數據庫中創建新表的權限。
  • ALTER:表示授予用戶可以使用 ALTER TABLE 語句修改特定數據庫中所有數據表的權限。
  • SHOW VIEW:表示授予用戶可以查看特定數據庫中已有視圖的視圖定義的權限。
  • CREATE ROUTINE:表示授予用戶可以為特定的數據庫創建存儲過程和存儲函數的權限。
  • ALTER ROUTINE:表示授予用戶可以更新和刪除數據庫中已有的存儲過程和存儲函數的權限。
  • INDEX:表示授予用戶可以在特定數據庫中的所有數據表上定義和刪除索引的權限。
  • DROP:表示授予用戶可以刪除特定數據庫中所有表和視圖的權限。
  • CREATE TEMPORARY TABLES:表示授予用戶可以在特定數據庫中創建臨時表的權限。
  • CREATE VIEW:表示授予用戶可以在特定數據庫中創建新的視圖的權限。
  • EXECUTE ROUTINE:表示授予用戶可以調用特定數據庫的存儲過程和存儲函數的權限。
  • LOCK TABLES:表示授予用戶可以鎖定特定數據庫的已有數據表的權限。
  • ALL 或 ALL PRIVILEGES:表示以上所有權限。

2) 授予表權限時,<權限類型>可以指定為以下值:

  • SELECT:授予用戶可以使用 SELECT 語句進行訪問特定表的權限。
  • INSERT:授予用戶可以使用 INSERT 語句向一個特定表中添加數據行的權限。
  • DELETE:授予用戶可以使用 DELETE 語句從一個特定表中刪除數據行的權限。
  • DROP:授予用戶可以刪除數據表的權限。
  • UPDATE:授予用戶可以使用 UPDATE 語句更新特定數據表的權限。
  • ALTER:授予用戶可以使用 ALTER TABLE 語句修改數據表的權限。
  • REFERENCES:授予用戶可以創建一個外鍵來參照特定數據表的權限。
  • CREATE:授予用戶可以使用特定的名字創建一個數據表的權限。
  • INDEX:授予用戶可以在表上定義索引的權限。
  • ALL 或 ALL PRIVILEGES:所有的權限名。

3) 授予列權限時,<權限類型>的值只能指定為 SELECT、INSERT 和 UPDATE,同時權限的后面需要加上列名列表 column-list。

4) 最有效率的權限是用戶權限。

授予用戶權限時,<權限類型>除了可以指定為授予數據庫權限時的所有值之外,還可以是下面這些值:
  • CREATE USER:表示授予用戶可以創建和刪除新用戶的權限。
  • SHOW DATABASES:表示授予用戶可以使用 SHOW DATABASES 語句查看所有已有的數據庫的定義的權限。

【實例】使用 GRANT 語句創建一個新的用戶 testUser,密碼為 testPwd。用戶 testUser 對所有的數據有查詢、插入權限,并授予 GRANT 權限。輸入的 SQL 語句和執行過程如下所示。
mysql> GRANT SELECT,INSERT ON *.*
    -> TO 'testUser'@'localhost'
    -> IDENTIFIED BY 'testPwd'
    -> WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.05 sec)
使用 SELECT 語句查詢用戶 testUser 的權限,如下所示。
mysql> SELECT Host,User,Select_priv,Grant_priv
    -> FROM mysql.user
    -> WHERE User='testUser';
+-----------+----------+-------------+------------+
| Host      | User     | Select_priv | Grant_priv |
+-----------+----------+-------------+------------+
| localhost | testUser | Y           | Y          |
+-----------+----------+-------------+------------+
1 row in set (0.01 sec)

beylze編程學院,一個分享編程知識和seo優化知識的網站。跟著beylze一起學習,每天都有進步。

通俗易懂,深入淺出,一篇文章只講一個知識點。

文章不深奧,不需要鉆研,在公交、在地鐵、在廁所都可以閱讀,隨時隨地漲姿勢。

文章不涉及代碼,不燒腦細胞,人人都可以學習。

當你決定關注beylze(公眾號:beylze),你已然超越了90%的其他從業者!

相關文章

国产亚洲欧美日韩