PostgreSQL 數(shù)據(jù)庫角色

2021-08-31 15:19 更新

數(shù)據(jù)庫角色在概念上已經(jīng)完全與操作系統(tǒng)用戶獨(dú)立開來。事實(shí)上可能維護(hù)一個對應(yīng)關(guān)系會比較方便,但是這并非必需。數(shù)據(jù)庫角色在一個數(shù)據(jù)庫集簇安裝范圍內(nèi)是全局的(而不是獨(dú)立數(shù)據(jù)庫內(nèi))。要創(chuàng)建一個角色,可使用CREATE ROLE SQL 命令:

CREATE ROLE name;

name遵循 SQL 標(biāo)識符的規(guī)則:或是未經(jīng)裝飾沒有特殊字符,或是用雙引號包圍(實(shí)際上,你將總是給該命令要加上額外選項(xiàng),例如LOGIN。更多細(xì)節(jié)可見下文)。要移除一個已有的角色,使用相似的DROP ROLE命令:

DROP ROLE name;

為了方便,createuserdropuser程序被提供作為這些 SQL 命令的包裝器,它們可以從 shell 命令行調(diào)用:

createuser name
dropuser name

要決定現(xiàn)有角色的集合,檢查pg_roles系統(tǒng)目錄,例如:

SELECT rolname FROM pg_roles;

psql程序的\du元命令也可以用來列出現(xiàn)有角色。

為了引導(dǎo)數(shù)據(jù)庫系統(tǒng),一個剛剛被初始化好的系統(tǒng)總是包含一個預(yù)定義角色。這個角色總是一個superuser,并且默認(rèn)情況下(除非在運(yùn)行initdb時修改)它的名字和初始化數(shù)據(jù)庫集簇的操作系統(tǒng)用戶相同。習(xí)慣上,這個角色將被命名為postgres。為了創(chuàng)建更多角色,你首先必須以初始角色的身份連接。

每一個到數(shù)據(jù)庫服務(wù)器的連接都是使用某個特定角色名建立的,并且這個角色決定發(fā)起連接的命令的初始訪問權(quán)限。要使用一個特定數(shù)據(jù)庫連接的角色名由客戶端指示,該客戶端以一種應(yīng)用相關(guān)的風(fēng)格發(fā)起連接請求。例如,psql程序使用-U命令行選項(xiàng)來指定要以哪個角色連接。很多應(yīng)用假定該名字默認(rèn)是當(dāng)前操作系統(tǒng)用戶(包括createuserpsql)。因此在角色和操作系統(tǒng)用戶之間維護(hù)一個名字對應(yīng)關(guān)系通常是很方便的。

一個給定客戶端連接能夠用來連接的數(shù)據(jù)庫角色的集合由該客戶端的認(rèn)證設(shè)置決定,這些在第 20 章中有解釋(因此,一個客戶端不止限于以匹配其操作系統(tǒng)用戶的角色連接,就像一個人的登錄名不需要匹配她的真實(shí)名字一樣)。因?yàn)榻巧矸輿Q定一個已連接客戶端可用的權(quán)限集合,在設(shè)置一個多用戶環(huán)境時要小心地配置權(quán)限。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號