中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

Postgresql數據庫角色創建登錄的方法是什么

發布時間:2023-02-22 16:53:20 來源:億速云 閱讀:116 作者:iii 欄目:開發技術

本篇內容主要講解“Postgresql數據庫角色創建登錄的方法是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Postgresql數據庫角色創建登錄的方法是什么”吧!

角色

PG中使用角色(role)機制來解決用戶身份認證。擁有登陸數據庫權限的角色稱之為可登錄角色(login role)。一個角色可以繼承其他角色的權限從而成為其成員角色;擁有成員角色的角色稱為組角色。(一個組角色可以是另一個組角色的成員角色,并且這種角色之間的繼承關系可以無限多層,但除非你非常有把握,否則別這么折騰自己)擁有登錄權限的組角色稱為可登錄的組角色。然而,基于安全性的考慮,管理員呢一般是不會給組角色登陸權限的。一個角色還可以被授權于超級用戶權限,但是此種授權要謹慎。

PG在最近的版本已經不再使用“用戶”和“組”這兩個術語,別人可能還會用,你就記住,用戶代表可登錄角色,組代表組角色就好。當然,PG為了保持前向兼容,create user和create group 這兩個命令在當前版本中也是支持的,但與時俱進嘛,最好不要使用他們,請使用create role。

創建可登錄角色

在PG安裝的過程中的數據初始化階段,系統是會默認創建一個名為postgres的可登錄角色(同時會創建一個名為postgres的同名databases)。你可以通過前面文章介紹過的ident或者peer身份驗證機制來將操作系統的root用戶映射到數據庫的postgres角色,這樣就可以實現root用戶免密登陸,當然或者通過設置trust模式的效果也是一樣。數據庫安裝完成的第一件事就是用psql或者pgadmin工具以postgres角色身份登陸,然后創建其他已經規劃好的角色。

創建具備登陸權限的角色

CREATE ROLE leo LOGIN PASSWORD 'mimajiushiwo'  VALID UNTIL  'infinity'  CREATEDB;

VALID子句是可選的,其功能是為此角色的權限設定的有效期,如果不寫則該角色永久有效,CREATEDB 子句表明為此角色賦予了創建新數據庫的權限。

創建具備超級用戶權限的角色

CREATE ROLE regina LOGIN PASSWORD 'queen' VALID UNTIL '2023-2-17 00:00' SUPERUSER;

上面的兩個例子中我們創建的都是可登錄的角色,如果創建不可登錄的角色,省略掉LOGIN PASSWORD 子句既可。

創建組角色

一般是不應該授予組角色登錄權限,但是你想,也不是不可以。

以下的SQL創建組角色

CREATE ROLE zujuese INHERIT;

注意這個關鍵詞INHERIT的用法。他表示組角色zujuese的任何一個成員角色都將自動繼承其除“超級用戶權限”外的所有權限。如果不寫

INHERIT,默認也會有INHERIT的效果。

如果希望禁止組角色將其權限授予成員角色,加上NOINHERIT關鍵字。

????以下語句可以為組角色添加成員角色

GRANT zujuese TO leo;
GRANT zujuese TO regina;

我們之前提到過SUPERUSER超級用戶權限是沒有辦法被繼承的,然而成員角色卻可以通過SET ROLE命令來實現“冒名頂替”其組角色的身份,從而獲得其父角色所擁有的SUPERUSER權限,當然這種冒名頂替的狀態是有期限的,僅限于當前會話存續期間有效。

舉例如下:

我們呢先給zujuese超級用戶權限:

ALTER ROLE zujuese SUPERUSER;

上面這個leo是zujuese的成員角色,也繼承了絕大多數的權限,但leo登陸后依然不具備SUPERUSER權限。但是呢,我們只要執行以下語句就可以獲得SUPERUSER權限:

SET ROLE zujuese;

我在下面才想明白這個問題:這個口令的意思是,leo扮演了zujuse在這個角色,雖然leo是zujuese的成員角色,但是superuser這個權限是沒有被通過默認的賦權方式賦予的,此時set role一執行,就表示leo現在扮演了zujuese,所以才有了superuser權限

但是這種方式獲得的SUPERUSER權限僅僅在會話存續期間有效。

雖然這個操作邏輯看起來好像很傻很呆 ,但是如果你不希望登錄到以superuser身份犯下一些無法挽回的錯誤,那么這個方法是值得你考慮的。

所有的用戶都可以使用SET ROLE這個命令,但是還有一個比它更加強大的命令:SET SESSION AUTHORIZATION ,該命令只允許具備superuser權限的用戶執行。為了便于理解呢,我們先介紹兩個postgresql中的全局變量:current_user和session_user。執行下面的語句,我們就可以看到在這兩個變量值。

SELECT session_user ,current_user;

首次登陸后,這兩個值相同。執行set role就會修改current_user的值,要是執行SET SESSION AUTHORIZATION 就會同時改變current_user和session_user的值。

以下是set role命令的主要特點。

  • set role無須superuser 權限既可執行。

  • set role會修改current_user變量的值,但不會修改session_user的值。

  • 一個具備superuser權限的session_user同名角色可以通過set role設置為任何用戶。

  • 非超級用戶可以通過set role 設置為session_user同名角色或者其所屬的組用戶。

  • set role命令可以讓執行角色獲取到所“扮演”角色的全部權限,當然除了,set role 和SET SESSION AUTHORIZATION權限。

SET SESSION AUTHORIZATION是比set role 更為強大的命令,其關鍵特性如下:

  • 只有超級用戶才可以執行SET SESSION AUTHORIZATION

  • SET SESSION AUTHORIZATION在整個會話存續期間都是有效的,也就是說及時超級用戶通過SET SESSION AUTHORIZATION來扮演了一個非超級用戶,只要會話未中斷,都可以在上面再次執行SET SESSION AUTHORIZATION命令的。

  • SET SESSION AUTHORIZATION會將current_user和session_user修改為要扮演的角色。

  • 具備超級用戶權限的session_user同名角色可以通過set role 來扮演任何其他角色。

下面呢,我們就展示一波:

psql -U leo -d postgres
SELECT session_user ,current_user;

Postgresql數據庫角色創建登錄的方法是什么

 set role zujuese; 
SELECT session_user ,current_user;

Postgresql數據庫角色創建登錄的方法是什么

alter role leo superuser;
set role regina ;
SELECT session_user ,current_user;

Postgresql數據庫角色創建登錄的方法是什么

set session authorization regina;

Postgresql數據庫角色創建登錄的方法是什么

為啥這個不成功呢,這就是我們上面說的set role的特點,是有了全部權限,但是set role和set session authorization權限是沒有的。

所以我們退出后,再用leo登陸:

Postgresql數據庫角色創建登錄的方法是什么

這說明什么呢,這說明我們上次扮演的時候給我們賦予的superuser權限是會話結束還是生效的

所以我們這波set session authorization直接就是成功了。

到此,相信大家對“Postgresql數據庫角色創建登錄的方法是什么”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

竹溪县| 景洪市| 乃东县| 石首市| 武山县| 宽甸| 定边县| 吉木萨尔县| 宁武县| 阿勒泰市| 高青县| 大丰市| 定结县| 西乌珠穆沁旗| 江安县| 清苑县| 吉安县| 峨眉山市| 航空| 土默特右旗| 连州市| 夹江县| 城步| 巴楚县| 禄劝| 宜良县| 西安市| 申扎县| 凌云县| 安义县| 阳泉市| 庄浪县| 高州市| 北票市| 凭祥市| 景德镇市| 濉溪县| 环江| 高邑县| 璧山县| 凌源市|