目錄
- 一、概述
- 二 、授權
- 2.1 語法格式
- 2.2 語法說明
- 2.3 權限型別
- 2.4 權限級別
- 三、 回收權限
- 3.1 語法格式
- 3.2 語法說明
- 3.3 注意事項
- 四 、實踐操作
一、概述
資料控制語言,用來定義訪問權限和安全級別,主要包含包括grant,revoke 關鍵字
- grant 授予權限
- revoke 回收權限
二 、授權
2.1 語法格式
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user[IDENTIFIED BY [PASSWORD] 'password']] ...
[WITH with_option [with_option]...]
2.2 語法說明
| 引數 | 引數說明 |
|---|---|
priv_type |
引數表示權限型別 |
columns_list |
引數表示權限作用于哪些列上,省略該引數時,表示作用于整個表 |
object_type |
引數用于指定權限物件 |
priv_level |
引數用于指定權限級別 |
user |
引數表示用戶賬戶;由用戶名和主機名構成,格式是“'username'@'hostname'” |
IDENTIFIED BY |
引數用來為用戶設定密碼 |
password |
引數是用戶的新密碼 |
WITH |
一個或多個with_option 引數 |
with_option 引數一共5個選項
| with_option引數 | 引數說明 |
|---|---|
GRANT OPTION |
被授權的用戶可以將這些權限賦予給別的用戶 |
MAX_QUERIES_PER_HOUR count |
設定每個小時可以允許執行 count 次查詢 |
MAX_UPDATES_PER_HOUR count |
設定每個小時可以允許執行 count 次更新 |
MAX_CONNECTIONS_PER_HOUR count |
設定每小時可以建立 count 個連接 |
MAX_USER_CONNECTIONS count |
設定單個用戶可以同時具有的 count 個連接 |
2.3 權限型別
權限型別分類
| 權限型別 | 說明 |
|---|---|
資料庫權限 |
和一個具體的資料庫中的所有表相關,例如,可以在已有的資料庫 mytest 中創建新表的權限 |
表權限 |
和一個具體表中的所有資料相關,例如,可以使用 SELECT 陳述句查詢表 students 的所有資料的權限 |
列權限 |
和表中的一個具體列相關,例如,可以使用 UPDATE 陳述句更新表 students 中 name 列的值的權限 |
用戶權限 |
和 MySQL 中所有的資料庫相關,例如,可以洗掉已有的資料庫或者創建一個新的資料庫的權限 |
① 授予資料庫權限時,<權限型別>可以指定為以下值
| 權限名稱 | 對應user表中的欄位 | 說明 |
|---|---|---|
SELECT |
Select_priv | 表示授予用戶可以使用 SELECT 陳述句訪問特定資料庫中所有表和視圖的權限, |
INSERT |
Insert_priv | 表示授予用戶可以使用 INSERT 陳述句向特定資料庫中所有表添加資料行的權限, |
DELETE |
Delete_priv | 表示授予用戶可以使用 DELETE 陳述句洗掉特定資料庫中所有表的資料行的權限, |
UPDATE |
Update_priv | 表示授予用戶可以使用 UPDATE 陳述句更新特定資料庫中所有資料表的值的權限, |
REFERENCES |
References_priv | 表示授予用戶可以創建指向特定的資料庫中的表外鍵的權限, |
CREATE |
Create_priv | 表示授權用戶可以使用 CREATE TABLE 陳述句在特定資料庫中創建新表的權限, |
ALTER |
Alter_priv | 表示授予用戶可以使用 ALTER TABLE 陳述句修改特定資料庫中所有資料表的權限, |
SHOW VIEW |
Show_view_priv | 表示授予用戶可以查看特定資料庫中已有視圖的視圖定義的權限, |
CREATE ROUTINE |
Create_routine_priv | 表示授予用戶可以為特定的資料庫創建存盤程序和存盤函式的權限, |
ALTER ROUTINE |
Alter_routine_priv | 表示授予用戶可以更新和洗掉資料庫中已有的存盤程序和存盤函式的權限, |
INDEX |
Index_priv | 表示授予用戶可以在特定資料庫中的所有資料表上定義和洗掉索引的權限, |
DROP |
Drop_priv | 表示授予用戶可以洗掉特定資料庫中所有表和視圖的權限, |
CREATE TEMPORARY TABLES |
Create_tmp_table_priv | 表示授予用戶可以在特定資料庫中創建臨時表的權限, |
CREATE VIEW |
Create_view_priv | 表示授予用戶可以在特定資料庫中創建新的視圖的權限, |
EXECUTE ROUTINE |
Execute_priv | 表示授予用戶可以呼叫特定資料庫的存盤程序和存盤函式的權限, |
LOCK TABLES |
Lock_tables_priv | 表示授予用戶可以鎖定特定資料庫的已有資料表的權限, |
ALL 或 ALL PRIVILEGES 或 SUPER |
Super_priv | 表示以上所有權限/超級權限 |
② 授予表權限時,<權限型別>可以指定為以下值:
| 權限名稱 | 對應user表中的欄位 | 說明 |
|---|---|---|
SELECT |
Select_priv | 授予用戶可以使用 SELECT 陳述句進行訪問特定表的權限 |
INSERT |
Insert_priv | 授予用戶可以使用 INSERT 陳述句向一個特定表中添加資料行的權限 |
DELETE |
Delete_priv | 授予用戶可以使用 DELETE 陳述句從一個特定表中洗掉資料行的權限 |
DROP |
Drop_priv | 授予用戶可以洗掉資料表的權限 |
UPDATE |
Update_priv | 授予用戶可以使用 UPDATE 陳述句更新特定資料表的權限 |
ALTER |
Alter_priv | 授予用戶可以使用 ALTER TABLE 陳述句修改資料表的權限 |
REFERENCES |
References_priv | 授予用戶可以創建一個外鍵來參照特定資料表的權限 |
CREATE |
Create_priv | 授予用戶可以使用特定的名字創建一個資料表的權限 |
INDEX |
Index_priv | 授予用戶可以在表上定義索引的權限 |
ALL 或 ALL PRIVILEGES 或 SUPER |
Super_priv | 所有的權限名 |
③ 授予列權限時,<權限型別>可以指定以下值
| 權限名稱 | 對應user表中的欄位 | 說明 |
|---|---|---|
SELECT |
Select_priv | 授予用戶可以使用 SELECT 陳述句進行訪問特定表的權限 |
INSERT |
Insert_priv | 授予用戶可以使用 INSERT 陳述句向一個特定表中添加資料行的權限 |
UPDATE |
Update_priv | 授予用戶可以使用 UPDATE 陳述句更新特定資料表的權限 |
④授予用戶權限時,<權限型別> 除了可以指定為授予資料庫權限,還可以指定以下值
| 權限名稱 | 說明 |
|---|---|
CREATE USER |
表示授予用戶可以創建和洗掉新用戶的權限 |
SHOW DATABASES |
表示授予用戶可以使用 SHOW DATABASES 陳述句查看所有已有的資料庫的定義的權限 |
2.4 權限級別
| 權限級別 | 說明 |
|---|---|
* |
表示當前資料庫中的所有表 |
*.* |
表示所有資料庫中的所有表 |
db_name.* |
表示某個資料庫中的所有表,db_name 指定資料庫名 |
db_name.tbl_name |
表示某個資料庫中的某個表或視圖,db_name 指定資料庫名,tbl_name 指定表名或視圖名 |
db_name.routine_name |
表示某個資料庫中的某個存盤程序或函式,routine_name 指定存盤程序名或函式名 |
TO 子句 |
如果權限被授予給一個不存在的用戶,MySQL 會自動執行一條 CREATE USER 陳述句來創建這個用戶,但同時必須為該用戶設定密碼 |
三、 回收權限
3.1 語法格式
REVOKE priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user]...
3.2 語法說明
| 引數 | 引數說明 |
|---|---|
priv_type |
引數表示權限的型別 |
column_list |
引數表示權限作用于哪些列上,沒有該引數時作用于整個表上 |
user |
引數由用戶名和主機名構成,格式為“username'@'hostname'” |
3.3 注意事項
- REVOKE 語法和 GRANT 陳述句的語法格式相似,但具有相反的效果,
- 要使用 REVOKE 陳述句,必須擁有 MySQL 資料庫的全域 CREATE USER 權限或 UPDATE 權限
四 、實踐操作
① 運維童鞋想要查詢所有用戶的權限
select * FROM mysql.user;

②運維童鞋想要創建一個新的用戶testXiezhr,密碼為testXiezhr,并授予test用戶所有的資料查詢、插入權限
# 創建用戶并授權
mysql> GRANT SELECT,INSERT ON *.*
-> TO 'testXiezhr'@'localhost'
-> IDENTIFIED BY 'testXiezhr'
-> WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.01 sec)
# 使用 SHOW GRANTS 陳述句查詢用戶 testXiezhr的權限
mysql> show grants for 'testXiezhr'@localhost;
+---------------------------------------------------------------------------+
| Grants for testXiezhr@localhost |
+---------------------------------------------------------------------------+
| GRANT SELECT, INSERT ON *.* TO 'testXiezhr'@'localhost' WITH GRANT OPTION |
+---------------------------------------------------------------------------+
1 row in set (0.00 sec)
③ 運維童鞋想要識訓testXiezhr用戶的插入權限
# 使用revoke關鍵字識訓insert 權限
mysql> REVOKE INSERT ON *.* FROM 'testXiezhr'@'localhost';
Query OK, 0 rows affected (0.00 sec)
#使用 SHOW GRANTS 陳述句查詢用戶 testXiezhr的權限,我們發現insert 權限沒有了
mysql> show grants for 'testXiezhr'@localhost;
+-------------------------------------------------------------------+
| Grants for testXiezhr@localhost |
+-------------------------------------------------------------------+
| GRANT SELECT ON *.* TO 'testXiezhr'@'localhost' WITH GRANT OPTION |
+-------------------------------------------------------------------+
1 row in set (0.00 sec)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/551579.html
標籤:MySQL
上一篇:Oracle ORA-01033: ORACLE initialization or shutdown in progress(誤刪了DBF資料庫檔案導致)解決方法
下一篇:返回列表
