欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

PostgreSQL USAGE和SELECT權(quán)限案例深入分析

 更新時(shí)間:2023年04月12日 11:17:04   作者:ziop-三月  
這篇文章主要介紹了PostgreSQL USAGE和SELECT權(quán)限案例深入分析,因?yàn)轫?xiàng)目需求,需要學(xué)習(xí)PostgreSQL,本人之前學(xué)習(xí)過(guò)MYSQL,臨時(shí)快速上手,盡快的去學(xué)習(xí)項(xiàng)目需要PostgREST

起因

因?yàn)轫?xiàng)目需求,需要學(xué)習(xí)PostgreSQL,本人之前學(xué)習(xí)過(guò)MYSQL,臨時(shí)快速上手,盡快的去學(xué)習(xí)項(xiàng)目需要PostgREST, 在學(xué)習(xí)PostgREST的第一個(gè)起步案例 教程 0 - 讓它運(yùn)行起來(lái) 的時(shí)候碰到了下面幾條語(yǔ)句:

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

因?yàn)椴惶甈ostgSQL,就行了了研究,研究結(jié)果如下:

第一個(gè)語(yǔ)句:

CREATE ROLE web_anon NOLOGIN;

這條命令創(chuàng)建了一個(gè)名為 web_anon 的新角色,并通過(guò)使用 NOLOGIN 選項(xiàng)指定該角色不能直接登錄到數(shù)據(jù)庫(kù)。通常,這是為了給不需要直接訪問(wèn)數(shù)據(jù)庫(kù)的應(yīng)用或服務(wù)授予權(quán)限。

第二個(gè)和第三個(gè)語(yǔ)句:

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

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

分析

如果不給USAGE,只給SELECT 會(huì)有什么效果
如果只授予角色(例如 web_anon)對(duì)表(如 api.todos)的 SELECT 權(quán)限但沒(méi)有授予 SCHEMA(如 api)的 USAGE 權(quán)限,那么該角色將只能查詢(xún)與授權(quán)的表相關(guān)的數(shù)據(jù)。

在這種情況下,web_anon 角色將仍然能夠執(zhí)行 SELECT 查詢(xún)?cè)L問(wèn) api.todos 表中的數(shù)據(jù),因?yàn)槟阋呀?jīng)授予了該角色針對(duì)該表的 SELECT 權(quán)限。然而,如果 schema api 包含其他對(duì)象(如數(shù)據(jù)類(lèi)型、操作符、函數(shù)等),web_anon 角色將無(wú)法使用這些對(duì)象,因?yàn)闆](méi)有授予 SCHEMA 的 USAGE 權(quán)限。

簡(jiǎn)而言之,沒(méi)有 SCHEMA 的 USAGE 權(quán)限,角色將無(wú)法使用此 SCHEMA 中的其他數(shù)據(jù)庫(kù)對(duì)象,但仍然可以運(yùn)行 SELECT 查詢(xún)以訪問(wèn)已授權(quán)表中的數(shù)據(jù)。需要注意的是,這可能會(huì)導(dǎo)致某些查詢(xún)和操作失敗,特別是當(dāng)查詢(xún)涉及到 SCHEMA 中其他對(duì)象時(shí)。

授權(quán)USAGE之后,還需要授權(quán)select 嗎? 如果不授權(quán)select能進(jìn)行查詢(xún)數(shù)據(jù)嗎?
即使已經(jīng)授予角色 SCHEMA 的 USAGE 權(quán)限,你仍然需要為某個(gè)表(例如:api.todos)單獨(dú)授權(quán) SELECT 權(quán)限。USAGE 權(quán)限只讓角色能夠訪問(wèn) SCHEMA 中的數(shù)據(jù)類(lèi)型、操作符、函數(shù)等其他數(shù)據(jù)庫(kù)對(duì)象,但是不包含對(duì) SCHEMA 中的表的訪問(wèn)權(quán)。

如果沒(méi)有為表(例如:api.todos)授權(quán) SELECT 權(quán)限,即使已授權(quán) SCHEMA 的 USAGE 權(quán)限,角色仍然無(wú)法讀取該表中的數(shù)據(jù)。為了允許一個(gè)角色執(zhí)行 SELECT 查詢(xún)并獲取某個(gè)表中的數(shù)據(jù),你需要為該角色分別授權(quán) SCHEMA 的 USAGE 權(quán)限和表的 SELECT 權(quán)限。

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

創(chuàng)建自定義數(shù)據(jù)類(lèi)型:

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

創(chuàng)建一個(gè)使用自定義數(shù)據(jù)類(lèi)型的表:

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

創(chuàng)建一個(gè)使用自定義數(shù)據(jù)類(lèi)型的函數(shù):

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

如果我們創(chuàng)建一個(gè)名為 web_anon 的角色并僅授權(quán) SCHEMA 的 USAGE 權(quán)限:

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

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

如果將 web_anon 角色分配給另一個(gè)用戶(hù)或角色并嘗試執(zhí)行以下查詢(xún):

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

這個(gè)查詢(xún)將失敗,因?yàn)闆](méi)有授予 SELECT 權(quán)限。

為了讓 web_anon 角色能查詢(xún) api.todos_with_priority 表,我們需要給它授予對(duì)該表的 SELECT 權(quán)限:

GRANT SELECT ON api.todos_with_priority TO web_anon;

總結(jié)

本文主要討論了 PostgreSQL 中角色權(quán)限的授予及其影響。CREATE ROLE 命令用于創(chuàng)建一個(gè)新的角色,同時(shí)可以通過(guò) NOLOGIN 選項(xiàng)指定角色無(wú)法直接登錄到數(shù)據(jù)庫(kù)。通過(guò) GRANT 命令可以為角色授予權(quán)限,如 SCHEMA 的 USAGE 權(quán)限和對(duì)表的 SELECT 權(quán)限。

在授權(quán)過(guò)程中,注意區(qū)分 SCHEMA 的 USAGE 權(quán)限和表的 SELECT 權(quán)限。授予角色 SCHEMA 的 USAGE 權(quán)限意味著角色可以訪問(wèn) SCHEMA 中的其他數(shù)據(jù)庫(kù)對(duì)象(例如數(shù)據(jù)類(lèi)型、操作符和函數(shù)等)。而為角色授予對(duì)表的 SELECT 權(quán)限,則允許角色查詢(xún)?cè)摫淼臄?shù)據(jù)。

總之,在 PostgreSQL 中設(shè)置權(quán)限時(shí),需要根據(jù)具體情況為角色分別授予 SCHEMA 的 USAGE 權(quán)限和表的 SELECT 權(quán)限,以確保正確的訪問(wèn)能力。僅具有 SCHEMA 的 USAGE 權(quán)限將無(wú)法訪問(wèn)表的數(shù)據(jù),需要額外為表授予 SELECT 權(quán)限。

到此這篇關(guān)于PostgreSQL USAGE和SELECT權(quán)限案例深入分析的文章就介紹到這了,更多相關(guān)PostgreSQL USAGE和SELECT內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Centos7下無(wú)法遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)的原因與解決

    Centos7下無(wú)法遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)的原因與解決

    MySQL是由Oracle公司開(kāi)發(fā)的開(kāi)源SQL數(shù)據(jù)庫(kù)管理系統(tǒng),下面這篇文章主要給大家介紹了關(guān)于在Centos7下無(wú)法遠(yuǎn)程連接mysql數(shù)據(jù)庫(kù)的原因與解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-09-09
  • mysql實(shí)現(xiàn)查詢(xún)結(jié)果導(dǎo)出csv文件及導(dǎo)入csv文件到數(shù)據(jù)庫(kù)操作

    mysql實(shí)現(xiàn)查詢(xún)結(jié)果導(dǎo)出csv文件及導(dǎo)入csv文件到數(shù)據(jù)庫(kù)操作

    這篇文章主要介紹了mysql實(shí)現(xiàn)查詢(xún)結(jié)果導(dǎo)出csv文件及導(dǎo)入csv文件到數(shù)據(jù)庫(kù)操作,結(jié)合實(shí)例形式分析了mysql相關(guān)數(shù)據(jù)庫(kù)導(dǎo)出、導(dǎo)入語(yǔ)句使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • 關(guān)于mysql中的json解析函數(shù)JSON_EXTRACT

    關(guān)于mysql中的json解析函數(shù)JSON_EXTRACT

    這篇文章主要介紹了關(guān)于mysql中的json解析函數(shù)JSON_EXTRACT講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • MySql如何查看索引并實(shí)現(xiàn)優(yōu)化

    MySql如何查看索引并實(shí)現(xiàn)優(yōu)化

    這篇文章主要介紹了MySql如何查看索引并實(shí)現(xiàn)優(yōu)化,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-12-12
  • MySQL回滾日志(undo?log)的作用和使用詳解

    MySQL回滾日志(undo?log)的作用和使用詳解

    undo?log是innodb引擎的一種日志,在事務(wù)的修改記錄之前,會(huì)把該記錄的原值先保存起來(lái)再做修改,以便修改過(guò)程中出錯(cuò)能夠恢復(fù)原值或者其他的事務(wù)讀取,這篇文章主要給大家介紹了關(guān)于MySQL回滾日志(undo?log)的作用和使用的相關(guān)資料,需要的朋友可以參考下
    2022-04-04
  • 一次Mysql?update?sql不當(dāng)引起的生產(chǎn)故障記錄

    一次Mysql?update?sql不當(dāng)引起的生產(chǎn)故障記錄

    這篇文章主要給大家介紹了關(guān)于一次Mysql?update?sql不當(dāng)引起的生產(chǎn)故障的相關(guān)資料,由于update涉及到數(shù)據(jù)的修改,所以很容易推斷,update語(yǔ)句比select語(yǔ)句會(huì)更復(fù)雜一些,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • QT連接MYSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟

    QT連接MYSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟

    這篇文章主要介紹了QT連接MYSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • 兩種mysql對(duì)自增id重新從1排序的方法

    兩種mysql對(duì)自增id重新從1排序的方法

    本文介紹了兩種mysql對(duì)自增id重新從1排序的方法,簡(jiǎn)少了對(duì)于某個(gè)項(xiàng)目初始化數(shù)據(jù)的工作量,感興趣的朋友可以參考下
    2015-07-07
  • MySQL筆記之?dāng)?shù)據(jù)類(lèi)型詳解

    MySQL筆記之?dāng)?shù)據(jù)類(lèi)型詳解

    本篇文章對(duì)mysql數(shù)據(jù)類(lèi)型進(jìn)行了詳細(xì)的介紹,需要的朋友參考下
    2013-05-05
  • mysql如何將查詢(xún)結(jié)果插入到另一張表中

    mysql如何將查詢(xún)結(jié)果插入到另一張表中

    這篇文章主要介紹了mysql如何將查詢(xún)結(jié)果插入到另一張表中問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評(píng)論