從小白到專家 PostgreSQL技術(shù)大講堂 - Part 6:PG用戶與角色管理
最新學(xué)訊:近期OCP認(rèn)證正在報名中,因考試人員較多請盡快報名獲取最近考試時間,報名費用請聯(lián)系在線老師,甲骨文官方認(rèn)證,報名從速!
我要咨詢
PostgreSQL從小白到專家,是從入門逐漸能力提升的一個系列教程,內(nèi)容包括對PG基礎(chǔ)的認(rèn)知、包括安裝使用、包括角色權(quán)限、包括維護(hù)管理、、等內(nèi)容,希望對熱愛PG、學(xué)習(xí)PG的同學(xué)們有幫助,歡迎持續(xù)關(guān)注CUUG PG技術(shù)大講堂。
Part 6:PG用戶與角色管理
內(nèi)容1:PostgreSQL 創(chuàng)建用戶
內(nèi)容2:PostgreSQL 創(chuàng)建角色
內(nèi)容3:PostgreSQL 權(quán)限介紹
內(nèi)容4:PostgreSQL 給用戶授權(quán)
內(nèi)容5:PostgreSQL 給角色授權(quán)
內(nèi)容6:PostgreSQL 回收權(quán)限
6.1、用戶角色概述
用戶與角色:? 數(shù)據(jù)庫用戶用來訪問、管理數(shù)據(jù)庫中的對象(表、索引…)
? 數(shù)據(jù)庫角色用來管理數(shù)據(jù)庫訪問權(quán)限,簡化權(quán)限的管理
? 用戶和角色在整個數(shù)據(jù)庫集簇中是全局性的,不是針對某個單一數(shù)據(jù)庫,只要有足夠的權(quán)限,用戶可以訪問所有數(shù)據(jù)庫的對象。
? 數(shù)據(jù)庫用戶可以分為兩類:
超級用戶--postgres
普通用戶--根據(jù)需要創(chuàng)建 用戶與角色的區(qū)別:? user:擁有l(wèi)ogin登陸數(shù)據(jù)庫權(quán)限的role
? role:可以擁有數(shù)據(jù)庫對象,如表、索引,也可以把這些對象上的權(quán)限賦予其它角色,以控制哪些用戶對哪些對象擁有哪些權(quán)限
? group:不擁有replication/noreplication、connectionlimit屬性的role
? 在PG8.1之前,user與group是不同類型的實體,現(xiàn)在可以被看作是role,任意一個role均可自由的在user與group間轉(zhuǎn)換
6.2、創(chuàng)建用戶
創(chuàng)建用戶? 方式1:在系統(tǒng)命令行使用create user命令
create user username create user -U postgres -p 7788 user1 (--forwindows)
? 方式2:在psql命令行使用create user(role)指令
CREATE user[ROLE] rolename;
CREATE USER name [[WITH] option[...]]
這里的option可以是:
SUPERUSER | NOSUPERUSER |CREATEDB | NOCREATEDB |CREATEROLE | NOCREATEROLE |CREATEUSER | NOCREATEUSER |INHERIT | NOINHERIT#角色是其他角色的成員,這些子句決定新角色是否從那些角色中“繼承”特權(quán) |LOGIN | NOLOGIN |REPLICATION | NOREPLICATION |BYPASSRLS | NOBYPASSRLS#決定是否一個角色可以繞過每一條行級安全性(RLS)策略。|CONNECTIONLIMIT connlimit |[ENCRYPTED | UNENCRYPTED] PASSWORD 'password' |VALIDUNTIL 'timestamp' | INROLE role_name [,...] |INGROUP role_name[,...] | ROLErole_name[,...]|ADMINrole_name[,...]#ADMIN子句與ROLE相似,讓它們能夠把這個角色中的成員關(guān)系授予給其他人。|USER role_name[,...] |SYSID uid
創(chuàng)建用戶示例:
CREATE USER u1 SUPERUSER PASSWORD 'u1';--創(chuàng)建一個具有超級用戶權(quán)限的用戶
CREATE USER u2 CREATEDB PASSWORD 'u2';--創(chuàng)建一個具有建庫權(quán)限的用戶
CREATE USER u3 LOGIN;--創(chuàng)建一個具有登錄權(quán)限的用戶,默認(rèn)值
CREATE ROLE u4 encrypted PASSWORD '123456' VALIDUNTIL '2018-08-16';--創(chuàng)建一個帶有加密密碼且具有有效時間的用戶
注:屬性LOGIN、SUPERUSER和CREATEROLE被視為特殊權(quán)限,它們不會像其它數(shù)據(jù)庫對象的普通權(quán)限那樣被繼承。
6.3、創(chuàng)建角色
CREATE ROLE name [[WITH]option[...]] 這里的option可以是:
SUPERUSER | NOSUPERUSER|CREATEDB | NOCREATEDB|CREATEROLE | NOCREATEROLE|CREATEUSER | NOCREATEUSER|INHERIT | NOINHERIT|LOGIN | NOLOGIN|REPLICATION | NOREPLICATION|CONNECTIONLIMIT connlimit|[ENCRYPTED | UNENCRYPTED] PASSWORD 'password'|VALIDUNTIL 'timestamp' | INROLE role_name[,...]|INGROUP role_name[,...] | ROLE role_name[,...]|ADMIN role_name[,...] | USER role_name[,...] | SYSID uid
創(chuàng)建角色示例
CREATE ROLE manager;--創(chuàng)建一個角色
CREATE ROLE dev createdb;--創(chuàng)建一個具有建庫權(quán)限的角色
CREATE ROLE r1 LOGIN;--創(chuàng)建一個具有登錄權(quán)限的角色,類似于用戶
CREATE ROLE u4 encrypted PASSWORD ‘123456’ VALIDUNTIL ‘2018-08-16’;--創(chuàng)建一個帶有加密密碼且具有有效時間的角色
6.4、查看用戶與角色
查看用戶與角色信息postgres=#\du 指令顯示用戶和角色屬性
通過數(shù)據(jù)庫字典表來查看用戶信息postgres=# \d pg_user
通過數(shù)據(jù)庫字典表來查看
通過數(shù)據(jù)庫字典表來查看角色信息
postgres=# \d pg_roles
通過數(shù)據(jù)庫字典表來查看角色信息
6.5、修改用戶和角色
修改用戶屬性postgres=# \h alter user
命令:ALTER USER
描述:更改數(shù)據(jù)庫角色
語法:
ALTER USER role_specification [ WITH ] 選項 [ ... ]
選項可以是
SUPERUSER | NOSUPERUSER| CREATEDB | NOCREATEDB| CREATEROLE | NOCREATEROLE | INHERIT | NOINHERIT | LOGIN | NOLOGIN| REPLICATION | NOREPLICATION | BYPASSRLS | NOBYPASSRLS | CONNECTION LIMIT 連接限制| [ ENCRYPTED ] PASSWORD '口令' | PASSWORD NULL | VALID UNTIL '時間戳'
ALTER USER 名稱 RENAME TO 新的名稱
……
修改用戶示例
ALTER USER u2 RENAME TO u22; --修改用戶的名字
ALTER USER u22 PASSWORD ‘u22’; --修改用戶的密碼
ALTER USER u22 CREATEROLE; --修改用戶的權(quán)限
ALTER USER u22 IN DATABASE testdb RESET ALL; --修改數(shù)據(jù)庫testdb中的參數(shù)重設(shè) 為默認(rèn)值
修改角色示例
ALTER ROLE dev RENAME TO dev1; --修改角色的名字
ALTER ROLE dev1 SUPERUSER; --修改角色的權(quán)限
ALTER ROLE dev1 LOGIN; --修改角色的權(quán)限
6.6、刪除用戶
刪除用戶方法:
? 方式1:在系統(tǒng)命令行使用drop user命令刪除用戶 drop user –U postgres –p 7788 username;
? 方式2:在psql命令行使用drop刪除
drop role rolename; 或 drop user username;
DROP ROLE IF EXISTS role_name;
注意事項:1、只用超級用戶能夠刪除超級用戶
2、只有具有create role權(quán)限的用戶能刪除非超級用戶
3、刪除用戶前,需要先刪除依賴該用戶的對象、權(quán)限等信息
4、任何屬于該組角色的對象都必須先被刪除或者將對象的所有者賦予其它角色, 任何賦予該組角色的權(quán)限也都必須被撤消。
5、刪除組role只會刪除組的role本身,組的成員并不會被刪除 刪除用戶與角色示例:
DROP USER u22;
DROP USER IF EXISTS u3;
DROP ROLE IF EXISTS u4;
注意:刪除用戶和角色所用命令可以通用
6.7、啟用角色賦予的權(quán)限
啟用某個角色權(quán)限:
分配給用戶的角色在用戶登錄時其權(quán)限不會自動生效,需要啟用該角色。命令:
Set role manager;
注意:此時登陸的用戶名變成manager。在此期間創(chuàng)建的對象也是屬于manager。
6.8、權(quán)限管理
權(quán)限管理
? 每個數(shù)據(jù)庫對象都有一個所有者,默認(rèn)情況下,所有者擁有該對象的所有權(quán)限
? 在數(shù)據(jù)庫中所有的權(quán)限都和角色掛鉤
? 對超級用戶postgres不做權(quán)限檢查,其它用戶走ACL(Access ControL List)
? 對于數(shù)據(jù)庫對象,開始只有所有者和超級用戶可以做任何操作,其它走ACL
權(quán)限管理結(jié)構(gòu)層次圖

以上就是Part 6 - PG用戶與角色管理 的內(nèi)容,歡迎進(jìn)群一起探討交流
QQ交流群:752027153
微信交流群:聯(lián)系客服拉你進(jìn)微信PG交流群
釘釘交流群:35822460,釘釘群專門講解
- 冉乃綱-老師CUUG金牌講師
- 冉老師 CUUG金牌講師 Oracle及RedHat高級講師、Unix/Linux 資深專家...[詳細(xì)了解老師]

- 陳衛(wèi)星-老師CUUG金牌講師
- 陳老師 CUUG金牌講師 精通Oracle管理、備份恢復(fù)、性能優(yōu)化 11年Ora...[詳細(xì)了解老師]
