MySQL基礎:DCL語句總結

来源:https://www.cnblogs.com/Rohn/archive/2019/10/22/11722515.html
-Advertisement-
Play Games

DCL(Data Control Language)語句:數據控制語句,用於控制不同數據段直接的許可和訪問級別的語句。這些語句定義了資料庫、表、欄位、用戶的訪問許可權和安全級別。 ...


SQL語言大致分為DCLDDLDML三種,本文主要介紹MySQL 5.7版本DCL語句。

概述

DCL(Data Control Language)語句:數據控制語句,用於控制不同數據段直接的許可和訪問級別的語句。這些語句定義了資料庫、表、欄位、用戶的訪問許可權和安全級別。

關鍵字

  • GRANT
  • REVOKE

查看用戶許可權

當成功創建用戶賬戶後,還不能執行任何操作,需要為該用戶分配適當的訪問許可權。可以使用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語句

參考:

對於新建的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語句查看所有已有的資料庫的定義的許可權。
  • ALLALL PRIVILEGES:表示以上所有許可權。

授予表許可權類型

授予表許可權時,priv_type可以指定為以下值:

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

授予列(欄位)許可權類型

授予列(欄位)許可權時,priv_type的值只能指定為SELECTINSERTUPDATE,同時許可權的後面需要加上列名列表(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
  • 使用localhost127.0.0.1::1及伺服器名等,只能在本機訪問;
  • 使用ip地址或地址段形式,僅允許該ip或ip地址段的主機訪問該資料庫實例,例如192.168.2.1192.168.2.0/24192.168.2.0/255.255.255.0
  • 省略即預設為%

身份驗證方式(auth_option)

auth_option為可選欄位,可以指定密碼以及認證插件(mysql_native_passwordsha256_passwordcaching_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許可權;
  • 第一種語法格式用於回收指定用戶的某些特定的許可權,第二種回收指定用戶的所有許可權;

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、ngx_http_referer_module(阻擋來源非法的功能變數名稱請求),配置如下: 二、HttpAccessKeyMoudule,配置如下: 參數說明: accesskey on|off 模塊開關 accesskey_hashmethod md5|sha-1 簽名加密方式 accesskey_ ...
  • MAC 安裝 JDK: 這篇文章主要為在MAC蘋果系統下安裝JDK1.8並配置系統環境變數。 主要分為以下步驟: 到Oracle官網下載JDK1.8安裝包。 打開獲取到的安裝包按步驟安裝到系統上。 配置系統的環境變數。 驗證JDK1.8是否安裝成功。 到Oracle官網下載JDK1.8安裝包 jdk ...
  • MySQL的安裝 (4,5,6可省略) 聲明:CentOS版本為7.6,安裝的MySQL版本為8.0.17 1. 首先要卸載掉本機自帶的mysql相關,包括MariaDB。 shell rpm pa | grep mysql 將搜到的結果使用 刪除掉,沒有就跳過 rpm pa | grep mari ...
  • 系統環境: NFS伺服器操作系統: ubuntu18.04 server lts NFS伺服器IP: 192.168.1.164 註: NFS伺服器 指的是 待安裝 NFS服務 的機器(物理機或者虛擬機) 步驟如下: 1. 先更新 2. 安裝 NFS服務 (此時該服務已設置開機自啟動) 3.修改配置 ...
  • 安裝python3(編譯安裝) 1. 下載python安裝包到指定目錄 這裡的目錄如果不存在可以自己建,當然也可以自己放在自己想放的位置,只要等會兒安裝的時候能找到就行。 2.確保已經安裝了gcc編譯器(一般預設有的) 3.下載python安裝包,這裡選擇的是gz格式的壓縮包 4. 解壓安裝包 5. ...
  • 直接上代碼: curl -I -m 10 -o /dev/null -s -w %{http_code} www.baidu.com ...
  • 第一步: 添加GitLab的官方存儲庫: curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash 第二步: 安裝最新版本的GitLab Runner ...
  • top n:選出查詢結果的前n項,可改為 top n percent 形式:選出查詢結果的前百分之n項; inner join:內連接查詢,可改為left join(左連接)、right join(右連接); ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...