目錄blog:https://www.cnblogs.com/Rohn/
SQL語言大致分為
DCL、DDL、DML三種,本文主要介紹MySQL 5.7版本DCL陳述句,
- 概述
- 關鍵字
- 查看用戶權限
- GRANT陳述句
- 語法格式
- 權限型別(priv_type)
- 授予資料庫權限型別
- 授予表權限型別
- 授予列(欄位)權限型別
- 授予創建和洗掉用戶的權限
- ON
- 物件型別(object_type)
- 權限級別(priv_level)
- 被授權的用戶(user)
- 身份驗證方式(auth_option)
- 加密連接(tls_option)
- 用戶資源限制(resource_option)
- 權限生效
- REVOKE陳述句
- 語法格式
概述
DCL(Data Control Language)陳述句:資料控制陳述句,用于控制不同資料段直接的許可和訪問級別的陳述句,這些陳述句定義了資料庫、表、欄位、用戶的訪問權限和安全級別,
關鍵字
GRANTREVOKE
查看用戶權限
當成功創建用戶賬戶后,還不能執行任何操作,需要為該用戶分配適當的訪問權限,可以使用SHOW GRANTS FOR 陳述句來查詢用戶的權限,例如:
mysql> SHOW GRANTS FOR test;
+-------------------------------------------+
| Grants for test@% |
+-------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' |
+-------------------------------------------+
1 row in set (0.00 sec)
GRANT陳述句
參考:
- GRANT Syntax
- MySQL用戶授權(GRANT)
對于新建的MySQL用戶,必須給它授權,可以用GRANT陳述句來實作對新建用戶的授權,
語法格式
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [auth_option] [, user [auth_option]] ...
[REQUIRE {NONE | tls_option [[AND] tls_option] ...}]
[WITH {GRANT OPTION | resource_option} ...]
GRANT PROXY ON user
TO user [, user] ...
[WITH GRANT OPTION]
object_type: {
TABLE
| FUNCTION
| PROCEDURE
}
priv_level: {
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
}
user:
(see Section 6.2.4, “Specifying Account Names”)
auth_option: {
IDENTIFIED BY 'auth_string'
| IDENTIFIED WITH auth_plugin
| IDENTIFIED WITH auth_plugin BY 'auth_string'
| IDENTIFIED WITH auth_plugin AS 'auth_string'
| IDENTIFIED BY PASSWORD 'auth_string'
}
tls_option: {
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
}
resource_option: {
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
}
權限型別(priv_type)
授權的權限型別一般可以分為資料庫、表、列、用戶,
授予資料庫權限型別
授予資料庫權限時,priv_type可以指定為以下值:
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:表示授予用戶可以鎖定特定資料庫的已有資料表的權限,-
SHOW DATABASES:表示授權可以使用SHOW DATABASES陳述句查看所有已有的資料庫的定義的權限,
ALL或ALL PRIVILEGES:表示以上所有權限,
授予表權限型別
授予表權限時,priv_type可以指定為以下值:
SELECT:授予用戶可以使用 SELECT 陳述句進行訪問特定表的權限,INSERT:授予用戶可以使用 INSERT 陳述句向一個特定表中添加資料行的權限,DELETE:授予用戶可以使用 DELETE 陳述句從一個特定表中洗掉資料行的權限,DROP:授予用戶可以洗掉資料表的權限,UPDATE:授予用戶可以使用 UPDATE 陳述句更新特定資料表的權限,ALTER:授予用戶可以使用 ALTER TABLE 陳述句修改資料表的權限,REFERENCES:授予用戶可以創建一個外鍵來參照特定資料表的權限,CREATE:授予用戶可以使用特定的名字創建一個資料表的權限,INDEX:授予用戶可以在表上定義索引的權限,ALL或ALL PRIVILEGES:所有的權限名,
授予列(欄位)權限型別
授予列(欄位)權限時,priv_type的值只能指定為SELECT、INSERT和UPDATE,同時權限的后面需要加上列名串列(column-list),
授予創建和洗掉用戶的權限
授予列(欄位)權限時,priv_type的值指定為CREATE USER權限,具備創建用戶、洗掉用戶、重命名用戶和撤消所有特權,而且是全域的,
ON
有ON,是授予權限,無ON,是授予角色,如:
-- 授予資料庫db1的所有權限給指定賬戶
GRANT ALL ON db1.* TO 'user1'@'localhost';
-- 授予角色給指定的賬戶
GRANT 'role1', 'role2' TO 'user1'@'localhost', 'user2'@'localhost';
物件型別(object_type)
在ON關鍵字后給出要授予權限的object_type,通常object_type可以是資料庫名、表名等,
權限級別(priv_level)
指定權限級別的值有以下幾類格式:
*:表示當前資料庫中的所有表,*.*:表示所有資料庫中的所有表,db_name.*:表示某個資料庫中的所有表,db_name指定資料庫名,db_name.tbl_name:表示某個資料庫中的某個表或視圖,db_name指定資料庫名,tbl_name指定表名或視圖名,tbl_name:表示某個表或視圖,tbl_name指定表名或視圖名,db_name.routine_name:表示某個資料庫中的某個存盤程序或函式,routine_name指定存盤程序名或函式名,
被授權的用戶(user)
參考:Specifying Account Names
語法格式如下:
'user_name'@'host_name'
- Tips:
'host_name'用于適應從任意主機訪問資料庫而設定的,可以指定某個地址或地址段訪問,- 可以同時授權多個用戶,
user表中host列的默認值
| host | 說明 |
|---|---|
| % | 匹配所有主機 |
| localhost | localhost不會被決議成IP地址,直接通過UNIXsocket連接 |
| 127.0.0.1 | 會通過TCP/IP協議連接,并且只能在本機訪問 |
| ::1 | ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1 |
host_name格式有以下幾種:
- 使用
%模糊匹配,符合匹配條件的主機可以訪問該資料庫實體,例如192.168.2.%或%.test.com; - 使用
localhost、127.0.0.1、::1及服務器名等,只能在本機訪問; - 使用ip地址或地址段形式,僅允許該ip或ip地址段的主機訪問該資料庫實體,例如
192.168.2.1或192.168.2.0/24或192.168.2.0/255.255.255.0; - 省略即默認為
%,
身份驗證方式(auth_option)
auth_option為可選欄位,可以指定密碼以及認證插件(mysql_native_password、sha256_password、caching_sha2_password),
加密連接(tls_option)
tls_option為可選的,一般是用來加密連接,
用戶資源限制(resource_option)
resource_option為可選的,一般是用來指定最大連接數等,
| 引數 | 說明 |
|---|---|
| MAX_QUERIES_PER_HOUR count | 每小時最大查詢數 |
| MAX_UPDATES_PER_HOUR count | 每小時最大更新數 |
| MAX_CONNECTIONS_PER_HOUR count | 每小時連接次數 |
| MAX_USER_CONNECTIONS count | 用戶最大連接數 |
權限生效
若要權限生效,需要執行以下陳述句:
FLUSH PRIVILEGES;
REVOKE陳述句
參考:REVOKE Syntax
REVOKE陳述句主要用于撤銷權限,
語法格式
REVOKE語法和GRANT陳述句的語法格式相似,但具有相反的效果
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user [, user] ...
REVOKE ALL [PRIVILEGES], GRANT OPTION
FROM user [, user] ...
REVOKE PROXY ON user
FROM user [, user] ...
- 若要使用
REVOKE陳述句,必須擁有MySQL資料庫的全域CREATE USER權限或UPDATE權限;- 第一種語法格式用于回收指定用戶的某些特定的權限,第二種回收指定用戶的所有權限;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/116997.html
標籤:MySQL
