亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

PostgreSQL?USAGE和SELECT權限實例代碼分析

發布時間:2023-04-18 17:51:04 來源:億速云 閱讀:353 作者:iii 欄目:開發技術

今天小編給大家分享一下PostgreSQL USAGE和SELECT權限實例代碼分析的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

起因

 在學習PostgREST的第一個起步案例 教程 0 - 讓它運行起來 的時候碰到了下面幾條語句:

CREATE ROLE web_anon NOLOGIN;
GRANT USAGE ON SCHEMA api TO web_anon;
GRANT SELECT ON api.todos TO web_anon;

因為不太懂PostgSQL,就行了了研究,研究結果如下:

第一個語句:

CREATE ROLE web_anon NOLOGIN;

這條命令創建了一個名為 web_anon 的新角色,并通過使用 NOLOGIN 選項指定該角色不能直接登錄到數據庫。通常,這是為了給不需要直接訪問數據庫的應用或服務授予權限。

第二個和第三個語句:

GRANT USAGE ON SCHEMA api TO web_anon;
GRANT SELECT ON api.todos TO web_anon;

這兩條命令分別將對 schema api 的使用權(USAGE)和對表 api.todos 的查看權(SELECT)授予 web_anon 角色。這意味著任何具有 web_anon 角色的用戶或連接將能夠查詢 api.todos 表中的數據。

分析

如果不給USAGE,只給SELECT 會有什么效果
如果只授予角色(例如 web_anon)對表(如 api.todos)的 SELECT 權限但沒有授予 SCHEMA(如 api)的 USAGE 權限,那么該角色將只能查詢與授權的表相關的數據。

在這種情況下,web_anon 角色將仍然能夠執行 SELECT 查詢訪問 api.todos 表中的數據,因為你已經授予了該角色針對該表的 SELECT 權限。然而,如果 schema api 包含其他對象(如數據類型、操作符、函數等),web_anon 角色將無法使用這些對象,因為沒有授予 SCHEMA 的 USAGE 權限。

簡而言之,沒有 SCHEMA 的 USAGE 權限,角色將無法使用此 SCHEMA 中的其他數據庫對象,但仍然可以運行 SELECT 查詢以訪問已授權表中的數據。需要注意的是,這可能會導致某些查詢和操作失敗,特別是當查詢涉及到 SCHEMA 中其他對象時。

授權USAGE之后,還需要授權select 嗎? 如果不授權select能進行查詢數據嗎?
即使已經授予角色 SCHEMA 的 USAGE 權限,你仍然需要為某個表(例如:api.todos)單獨授權 SELECT 權限。USAGE 權限只讓角色能夠訪問 SCHEMA 中的數據類型、操作符、函數等其他數據庫對象,但是不包含對 SCHEMA 中的表的訪問權。

如果沒有為表(例如:api.todos)授權 SELECT 權限,即使已授權 SCHEMA 的 USAGE 權限,角色仍然無法讀取該表中的數據。為了允許一個角色執行 SELECT 查詢并獲取某個表中的數據,你需要為該角色分別授權 SCHEMA 的 USAGE 權限和表的 SELECT 權限。

只有USAGE沒有SELECT的例子
為了更好地理解只有 SCHEMA 的 USAGE 權限的情況,我們首先需要了解 PostgreSQL schema。一個 schema 是一個命名空間,它可以包含多個數據庫對象,如表、視圖、數據類型、函數等。在這個例子中,假設我們有一個名為 api 的 schema 和一個名為 api.todos 的表。我們還有一個自定義數據類型和一個函數。

創建自定義數據類型:

CREATE TYPE api.priority_level AS ENUM ('Low', 'Medium', 'High');

創建一個使用自定義數據類型的表:

CREATE TABLE api.todos_with_priority (
    id SERIAL PRIMARY KEY,
    task VARCHAR(255) NOT NULL,
    priority api.priority_level NOT NULL
);

創建一個使用自定義數據類型的函數:

CREATE FUNCTION api.get_priority_as_text(p api.priority_level) RETURNS text
    LANGUAGE sql
    AS $$ SELECT 'Priority: ' || p::text; $$;

如果我們創建一個名為 web_anon 的角色并僅授權 SCHEMA 的 USAGE 權限:

CREATE ROLE web_anon NOLOGIN;
GRANT USAGE ON SCHEMA api TO web_anon;

在這種情況下,web_anon 角色將可以使用 api schema 中的自定義數據類型(例如 api.priority_level)以及自定義函數(例如 api.get_priority_as_text),但由于缺少 SELECT 權限,它無法查詢 api.todos_with_priority 表。

如果將 web_anon 角色分配給另一個用戶或角色并嘗試執行以下查詢:

SELECT id, task, api.get_priority_as_text(priority)
FROM api.todos_with_priority;

這個查詢將失敗,因為沒有授予 SELECT 權限。

為了讓 web_anon 角色能查詢 api.todos_with_priority 表,我們需要給它授予對該表的 SELECT 權限:

GRANT SELECT ON api.todos_with_priority TO web_anon;

以上就是“PostgreSQL USAGE和SELECT權限實例代碼分析”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泰兴市| 登封市| 进贤县| 沂源县| 晴隆县| 东兴市| 泰州市| 正宁县| 安图县| 洪雅县| 荆门市| 若羌县| 芜湖市| 鄂温| 乌拉特中旗| 洛川县| 成武县| 虞城县| 湟源县| 尉犁县| 乐亭县| 商南县| 伊宁市| 安西县| 马尔康县| 溆浦县| 寻乌县| 东海县| 台中县| 汉阴县| 电白县| 大石桥市| 临洮县| 长丰县| 家居| 什邡市| 临朐县| 华容县| 新宾| 马鞍山市| 株洲县|