詳解GuassDB資料庫許可權命令:GRANT和REVOKE

来源:https://www.cnblogs.com/huaweiyun/archive/2023/10/26/17788803.html
-Advertisement-
Play Games

在資料庫中,對象的創建者將成為該對象的所有者,具有對該對象進行查詢、修改和刪除等操作的許可權。同時,系統管理員也擁有與所有者相同的許可權。 ...


本文分享自華為雲社區《GuassDB資料庫的GRANT & REVOKE》,作者: Gauss松鼠會小助手2 。

一、GaussDB的許可權概述

在資料庫中,對象的創建者將成為該對象的所有者,具有對該對象進行查詢、修改和刪除等操作的許可權。同時,系統管理員也擁有與所有者相同的許可權。因此,如果要讓其他用戶能夠使用某個對象,必須向該用戶或包含該用戶的角色授予必要的許可權。

GaussDB資料庫對象許可權:

對象

許可權

說明

資料庫 DATABASE

CONNECT

允許用戶連接到指定的資料庫

CREATE

允許在資料庫里創建新的模式

模式 SCHEMA

CREATE

允許在模式中創建新的對象

USAGE

允許訪問包含在指定模式中的對象,若沒有該許可權,則只能看到這些對象的名字

函數 FUNCTION

EXECUTE

允許使用指定的函數,以及利用這些函數實現的操作符

表空間 TABLESPACE

CREATE

允許在表空間中創建表,允許在創建資料庫和模式的時候把該表空間指定為預設表空間。

表 TABLE

INSERT

DELETE

UPDATE

SELECT

允許用戶對指定表進行增刪改查操作

TRUNCATE

允許執行TRUNCATE語句刪除指定表中的所有記錄。

REFERENCES

創建一個外鍵約束,必須擁有參考表和被參考表的REFERENCES許可權

要撤消已經授予的許可權,可以使用REVOKE。

對象所有者的許可權(例如ALTER、DROP、COMMENT、INDEX、VACUUM、GRANT和REVOKE)是隱式擁有的,即只要擁有對象就可以執行對象所有者的這些隱式許可權。對象所有者可以撤消自己的普通許可權。

系統表和系統視圖要麼只對系統管理員可見,要麼對所有用戶可見。標識了需要系統管理員許可權的系統表和視圖只有系統管理員可以查詢。

資料庫提供對象隔離的特性,對象隔離特性開啟時,用戶只能查看有許可權訪問的對象(表、視圖、欄位、函數),系統管理員不受影響。

不建議用戶修改系統表和系統視圖的許可權。

二、GaussDB許可權設計建議

在進行業務使用前,必須由系統管理員(root用戶)創建資料庫、模式(SCHEMA)和用戶(USER)。然後,需要為相關用戶授予訪問對象所需的許可權。如果該用戶不是該模式的所有者,則要訪問該模式下的對象,還需要同時向該用戶授予模式的usage許可權和對象的相應許可權。

DATABASE、SCHEMA和USER名使用小寫。資料庫會預設把其名轉為小寫,連接串裡面如果出現大寫的對象名無法連接到資料庫。

對角色和用戶賦權時,應使用最小化許可權原則。

優先通過角色來管理許可權。使用角色管理許可權,再將角色賦予用戶。例如:

  • 角色和用戶為多對多關係,一個角色可以賦予多個用戶,修改角色中的許可權,被賦予角色的用戶許可權就可以同時更新。
  • 刪除用戶時,不會影響到角色。
  • 新建用戶後可以通過賦予角色快速獲取所需許可權。

在刪除指定資料庫時,應回收用戶對該資料庫的CONNECT許可權,避免刪除時仍然存在活躍的資料庫連接而失敗。

三、GaussDB的GRANT命令

1.功能說明

1)將系統許可權授權給角色或用戶

系統許可權又稱為用戶屬性,包括SYSADMIN、CREATEDB、CREATEROLE、AUDITADMIN、MONADMIN、OPRADMIN、POLADMIN、INHERIT、REPLICATION、VCADMIN和LOGIN等。

系統許可權一般通過CREATE/ALTER ROLE語法來指定。其中,SYSADMIN許可權可以通過GRANT/REVOKE ALL PRIVILEGE授予或撤銷。但系統許可權無法通過ROLE和USER的許可權被繼承,也無法授予PUBLIC。

2)將資料庫對象授權給角色或用戶

將資料庫對象(表和視圖、指定欄位、資料庫、函數、模式、表空間等)的相關許可權授予特定角色或用戶;

GRANT命令將資料庫對象的特定許可權授予一個或多個角色。這些許可權會追加到已有的許可權上。

關鍵字PUBLIC表示該許可權要賦予所有角色,包括以後創建的用戶。PUBLIC可以看做是一個隱含定義好的組,它總是包括所有角色。任何角色或用戶都將擁有通過GRANT直接賦予的許可權和所屬的許可權,再加上PUBLIC的許可權。

如果聲明瞭WITH GRANT OPTION,則被授權的用戶也可以將此許可權賦予他人。這個選項不能賦予PUBLIC(GaussDB特有的屬性)。

GaussDB會將某些類型的對象上的許可權授予PUBLIC。預設情況下,對錶、表欄位、序列、外部數據源、外部伺服器、模式或表空間對象的許可權不會授予PUBLIC,而以下這些對象的許可權會授予PUBLIC:資料庫的CONNECT許可權和CREATE TEMP TABLE許可權、函數的EXECUTE特權、語言和數據類型(包括域)的USAGE特權。當然,對象擁有者可以撤銷預設授予PUBLIC的許可權並專門授予許可權給其他用戶。為了更安全,建議在同一個事務中創建對象並設置許可權,這樣其他用戶就沒有時間視窗使用該對象。

對象的所有者預設具有該對象上的所有許可權,出於安全考慮所有者可以捨棄部分許可權,但ALTER、DROP、COMMENT、INDEX、VACUUM以及對象的可再授予許可權屬於所有者固有的許可權,隱式擁有。

3)將角色或用戶的許可權授權給其他角色或用戶

將一個角色或用戶的許可權授予一個或多個其他角色或用戶。在這種情況下,每個角色或用戶都可視為擁有一個或多個資料庫許可權的集合。

如果聲明瞭WITH ADMIN OPTION,被授權的用戶可以將該許可權再次授予其他角色或用戶,以及撤銷所有由該角色或用戶繼承到的許可權。當授權的角色或用戶發生變更或被撤銷時,所有繼承該角色或用戶許可權的用戶擁有的許可權都會隨之發生變更。

資料庫系統管理員可以給任何角色或用戶授予/撤銷任何許可權。擁有CREATEROLE許可權的角色可以賦予或者撤銷任何非系統管理員角色的許可權。

4)將ANY許可權授予給角色或用戶

將ANY許可權授予特定的角色和用戶。當聲明瞭WITH ADMIN OPTION,被授權的用戶可以將該ANY許可權再次授予其他角色/用戶,或從其他角色/用戶處回收該ANY許可權。ANY許可權可以通過角色被繼承,但不能賦予PUBLIC。初始用戶和三權分立關閉時的系統管理員用戶可以給任何角色/用戶授予或撤銷ANY許可權。

目前支持以下ANY許可權:

CREATE ANY TABLE

CREATE ANY SEQUENCE

ALTER ANY TABLE

CREATE ANY INDEX

DROP ANY TABLE

CREATE ANY FUNCTION

SELECT ANY TABLE

EXECUTE ANY FUNCTION

INSERT ANY TABLE

CREATE ANY PACKAGE

UPDATE ANY TABLE

EXECUTE ANY PACKAGE

DELETE ANY TABLE

CREATE ANY TYPE

2.註意事項

1)不允許將ANY許可權授予PUBLIC,也不允許從PUBLIC回收ANY許可權。

2)ANY許可權屬於資料庫內的許可權,只對授予該許可權的資料庫內的對象有效,例如SELECT ANY TABLE只允許用戶查看當前資料庫內的所有用戶表數據,對其他資料庫內的用戶表無查看許可權。

3)即使用戶被授予ANY許可權,也不能對私有用戶下的對象進行訪問操作(INSERT、DELETE、UPDATE、SELECT)。

4)ANY許可權與原有的許可權相互無影響。

5)如果用戶被授予CREATE ANY TABLE許可權,在同名schema下創建表的屬主是該schema的創建者,用戶對錶進行其他操作時,需要授予相應的操作許可權。

6)需要謹慎授予用戶CREATE ANY FUNMCTION的許可權,以免其他用戶利用SECURITY DEFINER類型的函數進行許可權提升。

3.常用語法

1)將表或視圖的訪問許可權賦予指定的用戶或角色

GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER | ALTER | DROP | COMMENT | INDEX | VACUUM } [, ...]

      | ALL [ PRIVILEGES ] }

    ON { [ TABLE ] table_name [, ...]

       | ALL TABLES IN SCHEMA schema_name [, ...] }

    TO { [ GROUP ] role_name | PUBLIC } [, ...]

    [ WITH GRANT OPTION ];

2)將表中欄位的訪問許可權賦予指定的用戶或角色

GRANT { {{ SELECT | INSERT | UPDATE | REFERENCES | COMMENT } ( column_name [, ...] )} [, ...] 

      | ALL [ PRIVILEGES ] ( column_name [, ...] ) }

    ON [ TABLE ] table_name [, ...]

    TO { [ GROUP ] role_name | PUBLIC } [, ...]

    [ WITH GRANT OPTION ];

3)將資料庫的訪問許可權賦予指定的用戶或角色

GRANT { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...]

      | ALL [ PRIVILEGES ] }

    ON DATABASE database_name [, ...]

    TO { [ GROUP ] role_name | PUBLIC } [, ...]

    [ WITH GRANT OPTION ];

4)將函數的訪問許可權賦予給指定的用戶或角色

GRANT { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }

    ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...]

       | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }

    TO { [ GROUP ] role_name | PUBLIC } [, ...]

    [ WITH GRANT OPTION ];

5)將存儲過程的訪問許可權賦予給指定的用戶或角色

GRANT { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }

    ON { PROCEDURE {proc_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...]

    TO { [ GROUP ] role_name | PUBLIC } [, ...]

    [ WITH GRANT OPTION ];

……

四、GaussDB的REVOKE命令用法

1.功能說明

REVOKE用於撤銷一個或多個用戶或角色的許可權。

2.註意事項

非對象所有者REVOKE許可權時,按照以下規則執行:

1)如果授權用戶沒有該對象上的許可權,則命令立即失敗。

2)如果授權用戶有部分許可權,則只撤銷那些有授權選項的許可權。

3)如果授權用戶沒有授權選項,REVOKE ALL PRIVILEGES形式將發出一個錯誤信息,而對於其他形式的命令而言,如果是命令中指定名稱的許可權沒有相應的授權選項,該命令將發出一個警告。

3.常用語法

1)回收指定表或視圖上的許可權

REVOKE [ GRANT OPTION FOR ]

    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | ALTER | DROP | COMMENT | INDEX | VACUUM }[, ...] 

    | ALL [ PRIVILEGES ] }

    ON { [ TABLE ] table_name [, ...]

       | ALL TABLES IN SCHEMA schema_name [, ...] }

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ];

2)回收表上指定欄位的許可權

REVOKE [ GRANT OPTION FOR ]

    { {{ SELECT | INSERT | UPDATE | REFERENCES | COMMENT } ( column_name [, ...] )}[, ...] 

    | ALL [ PRIVILEGES ] ( column_name [, ...] ) }

    ON [ TABLE ] table_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ];

3)回收指定資料庫上的許可權

REVOKE [ GRANT OPTION FOR ]

    { { CREATE | CONNECT | TEMPORARY | TEMP | ALTER | DROP | COMMENT } [, ...] 

    | ALL [ PRIVILEGES ] }

    ON DATABASE database_name [, ...]

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ];

4)回收指定函數上的許可權

REVOKE [ GRANT OPTION FOR ]

    { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }

    ON { FUNCTION {function_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...]

       | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ];

5)回收指定存儲過程上的許可權

REVOKE [ GRANT OPTION FOR ]

    { { EXECUTE | ALTER | DROP | COMMENT } [, ...] | ALL [ PRIVILEGES ] }

    ON { PROCEDURE {proc_name ( [ {[ argmode ] [ arg_name ] arg_type} [, ...] ] )} [, ...]

       | ALL PROCEDURE IN SCHEMA schema_name [, ...] }

    FROM { [ GROUP ] role_name | PUBLIC } [, ...]

    [ CASCADE | RESTRICT ];

……

五、GaussDB示例

1.GRANT 語句示例

1)授予用戶 user_name 對 database_name.table_name 表的 SELECT、INSERT、UPDATE、DELETE 許可權。

GRANT SELECT,INSERT,UPDATE,DELETE ON database_name.table_name TO user_name;

2)授予用戶 user_name 對 database_name.table_name 的所有許可權。

GRANT ALL PRIVILEGES ON database_name.table_name TO user_name;

3)授予用戶 user_name 對 database_name.table_name 的 SELECT、INSERT、UPDATE、DELETE 許可權,並允許他將該許可權傳遞給其他用戶。

GRANT SELECT,INSERT,UPDATE,DELETE ON database_name.table_name TO user_name WITH GRANT OPTION;

2.REVOKE 語句示例:

1)撤銷用戶 user_name 對 database_name.table_name 表的 SELECT、INSERT、UPDATE、DELETE 許可權。

REVOKE SELECT,INSERT,UPDATE,DELETE on database_name.table_name FROM user_name;

2)撤銷用戶 user_name 對 database_name.table_name 的所有許可權。

REVOKE ALL PRIVILEGES ON database_name.table_name FROM user_name;

3)撤銷用戶 user_name 對 database_name.table_name 表的 SELECT、INSERT、UPDATE、DELETE 許可權。

Tip:一個用戶只能撤銷由它自己直接賦予的許可權,依賴性許可權仍然存在,但如果聲明瞭CASCADE,則所有依賴性許可權都被撤銷.

REVOKE SELECT,INSERT,UPDATE,DELETE ON database_name.table_name FROM user_name WITH GRANT OPTION;

小結:資料庫的GRANT & REVOKE命令是用於管理資料庫用戶許可權的命令。這些命令通常用於在資料庫中為用戶分配許可權,以便用戶可以訪問和操作資料庫中的數據。GRANT & REVOKE是GaussDB雲資料庫中非常重要的一個命令,它可以用於撤銷和管理資料庫中的不同對象的訪問許可權,從而保證資料庫的安全性和可靠性。

點擊關註,第一時間瞭解華為雲新鮮技術~

 


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

-Advertisement-
Play Games
更多相關文章
  • 在Java編程中,我們經常需要找出兩個列表(List)中的重覆元素。在本文中,我們將探討三種方法來實現這一目標。 ...
  • 來源:https://www.cnblogs.com/liuboren/p/17017421.html 0.前言 本篇文章是<<代碼整潔之道>>的學習總結, 通過這篇文章你將瞭解到整潔的代碼對項目、公司和你的重要性,以及如何書寫整潔的代碼. 通過命名、類、函數、測試這四個章節,使我們的代碼變得整潔. ...
  • MDI窗體的相關學習使用 1、設置MDI父窗體 在屬性中找到IsMdiContainer選項,設置為True 2、添加MDI子窗體,在項目中依次選擇添加->窗體,然後一直預設即可 添加後的項目目錄(Form1為父視窗,Form2、Form3為子視窗) 3、在Form1.cs中,創建對應MDI子視窗的 ...
  • 【學習課程】:【【小白入門 通俗易懂】2021韓順平 一周學會Linux】 https://www.bilibili.com/video/BV1Sv411r7vd/?p=14&share_source=copy_web&vd_source=2c07d62293f5003c919b2df9b2e054 ...
  • 電腦數據的表示 1. 數值數據的表示 1.1 各種進位數的表示 二進位 (Binary) :以 0b 或 0B 開頭,字元僅含0和1. 用下標2或者數字後面加B表示。如 $(1011)_2$ 或 $1011B$ 八進位 (Octal) :以 0o 或 0O 開頭,字元含0-7. 用下標8或者數字後 ...
  • 1. 圖論 1.1. 起源於萊昂哈德·歐拉在1736年發表的一篇關於“哥尼斯堡七橋問題”的論文 1.2. 要解決這個問題,該圖需要零個或兩個具有奇數連接的節點 1.3. 任何滿足這一條件的圖都被稱為歐拉圖 1.4. 如果路徑只訪問每條邊一次,則該圖具有歐拉路徑 1.5. 如果路徑起點和終點相同,則該 ...
  • 天下武功,無堅不摧,唯快不破!我的名字叫 Redis,全稱是 Remote Dictionary Server。 有人說,組 CP,除了要瞭解她外,還要給機會讓她瞭解你。 那麼,作為開發工程師的你,是否願意認真閱讀此心法抓住機會來瞭解我,運用到你的系統中提升性能。 我遵守 BSD 協議,由義大利人 ...
  • 一、背景 公元2023-10-12(周四)上午,組內的亞梅反饋,用戶生成標簽報死鎖異常 二、排查異常日誌 查到當時報錯的日誌 具體異常信息如下 server-provider-info-2023-10-12.0.log:2023-10-12 09:40:50.593 [TID:bf623bded18 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...