亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > PostgreSQL > 正文

PostgreSQL 角色與用戶管理介紹

2020-03-12 23:55:13
字體:
來源:轉載
供稿:網友
這篇文章主要介紹PostgreSQL 角色與用戶管理相關知識,需要的朋友可以參考下
 
 

一、角色與用戶的區別

角色就相當于崗位:角色可以是經理,助理。
用戶就是具體的人:比如陳XX經理,朱XX助理,王XX助理。
在PostgreSQL 里沒有區分用戶和角色的概念,"CREATE USER" 為 "CREATE ROLE" 的別名,這兩個命令幾乎是完全相同的,唯一的區別是"CREATE USER" 命令創建的用戶默認帶有LOGIN屬性,而"CREATE ROLE" 命令創建的用戶默認不帶LOGIN屬性(CREATE USER is equivalent to CREATE ROLE except that CREATE USER assumes LOGIN by default, while CREATE ROLE does not)。

1.1 創建角色與用戶

CREATE ROLE 語法

CREATE ROLE name [ [ WITH ] option [ ... ] ]
where option can be:
      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp'
    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid

創建david 角色和sandy 用戶
postgres=# CREATE ROLE david;  //默認不帶LOGIN屬性
CREATE ROLE
postgres=# CREATE USER sandy;  //默認具有LOGIN屬性
CREATE ROLE
postgres=# /du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 david     | Cannot login                                   | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 sandy     |                                                | {}

postgres=# 
postgres=# SELECT rolname from pg_roles ;
 rolname  
----------
 postgres
 david
 sandy
(3 rows)

postgres=# SELECT usename from pg_user;         //角色david 創建時沒有分配login權限,所以沒有創建用戶
 usename  
----------
 postgres
 sandy
(2 rows)

postgres=# 
1.2 驗證LOGIN屬性
postgres@CS-DEV:~> psql -U david
psql: FATAL:  role "david" is not permitted to log in
postgres@CS-DEV:~> psql -U sandy
psql: FATAL:  database "sandy" does not exist
postgres@CS-DEV:~> psql -U sandy -d postgres
psql (9.1.0)
Type "help" for help.

postgres=> /dt
No relations found.
postgres=> 
用戶sandy 可以登錄,角色david 不可以登錄。
1.3 修改david 的權限,增加LOGIN權限
postgres=# ALTER ROLE david LOGIN ;
ALTER ROLE
postgres=# /du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 david     |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 sandy     |                                                | {}

postgres=# SELECT rolname from pg_roles ;
 rolname  
----------
 postgres
 sandy
 david
(3 rows)

postgres=# SELECT usename from pg_user;  //給david 角色分配login權限,系統將自動創建同名用戶david
 usename  
----------
 postgres
 sandy
 david
(3 rows)

postgres=# 
1.4 再次驗證LOGIN屬性
postgres@CS-DEV:~> psql -U david -d postgres
psql (9.1.0)
Type "help" for help.

postgres=> /du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 david     |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 sandy     |                                                | {}

postgres=> 
david 現在也可以登錄了。

二、查看角色信息

psql 終端可以用/du 或/du+ 查看,也可以查看系統表 select * from pg_roles;
postgres=> /du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 david     | Cannot login                                   | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 sandy     |                                                | {}

postgres=> /du+
                                    List of roles
 Role name |                   Attributes                   | Member of | Description 
-----------+------------------------------------------------+-----------+-------------
 david     | Cannot login                                   | {}        | 
 postgres  | Superuser, Create role, Create DB, Replication | {}        | 
 sandy     |                                                | {}        |

postgres=> SELECT * from pg_roles;
 rolname  | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword | rolvaliduntil | rolconfig |  oid  
----------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+---------------+-----------+-------
 postgres | t        | t          | t             | t           | t            | t           | t              |           -1 | ********    |               |           |    10
 david    | f        | t          | f             | f           | f            | f           | f              |           -1 | ********    |               |           | 49438
 sandy    | f        | t          | f             | f           | f            | t           | f              |           -1 | ********    |               |           | 49439
(3 rows)

postgres=>

三、角色屬性(Role Attributes)

一個數據庫角色可以有一系列屬性,這些屬性定義了他的權限。

 

屬性 說明
login 只有具有 LOGIN 屬性的角色可以用做數據庫連接的初始角色名。
superuser 數據庫超級用戶
createdb 創建數據庫權限
createrole       允許其創建或刪除其他普通的用戶角色(超級用戶除外)
replication 做流復制的時候用到的一個用戶屬性,一般單獨設定。
password 在登錄時要求指定密碼時才會起作用,比如md5或者password模式,跟客戶端的連接認證方式有關
inherit 用戶組對組員的一個繼承標志,成員可以繼承用戶組的權限特性
... ...

 

 

四、創建用戶時賦予角色屬性

從pg_roles 表里查看到的信息,在上面創建的david 用戶時,默認沒有創建數據庫等權限。 

postgres@CS-DEV:~> psql -U david -d postgres 
psql (9.1.0) 
Type "help" for help. 

postgres=> /du 
List of roles 
Role name | Attributes | Member of 
-----------+------------------------------------------------+----------- 
david | | {} 
postgres | Superuser, Create role, Create DB, Replication | {} 
sandy | | {} 

postgres=> CREATE DATABASE test; 
ERROR: permission denied to create database 
postgres=> 
如果要在創建角色時就賦予角色一些屬性,可以使用下面的方法。 
首先切換到postgres 用戶。 
4.1 創建角色bella 并賦予其CREATEDB 的權限。 
postgres=# CREATE ROLE bella CREATEDB ; 
CREATE ROLE 
postgres=# /du 
List of roles 
Role name | Attributes | Member of 
-----------+------------------------------------------------+----------- 
bella | Create DB, Cannot login | {} 
david | | {} 
postgres | Superuser, Create role, Create DB, Replication | {} 
sandy | | {} 

postgres=# 
4.2 創建角色renee 并賦予其創建數據庫及帶有密碼登錄的屬性。 
postgres=# CREATE ROLE renee CREATEDB PASSWORD 'abc123' LOGIN; 
CREATE ROLE 
postgres=# /du 
List of roles 
Role name | Attributes | Member of 
-----------+------------------------------------------------+----------- 
bella | Create DB, Cannot login | {} 
david | | {} 
postgres | Superuser, Create role, Create DB, Replication | {} 
renee | Create DB | {} 
sandy | | {} 

postgres=# 

4.3 測試renee 角色 

a. 登錄 
postgres@CS-DEV:~> psql -U renee -d postgres 
psql (9.1.0) 
Type "help" for help. 

postgres=> 
用renee 用戶登錄數據庫,發現不需要輸入密碼既可登錄,不符合實際情況。 
b. 查找原因 
在角色屬性中關于password的說明,在登錄時要求指定密碼時才會起作用,比如md5或者password模式,跟客戶端的連接認證方式有關。

查看pg_hba.conf 文件,發現local 的METHOD 為trust,所以不需要輸入密碼。

PostgreSQL 角色與用戶管理介紹

將local 的METHOD 更改為password,然后保存重啟postgresql。

c. 再次驗證

PostgreSQL 角色與用戶管理介紹

提示輸入密碼,輸入正確密碼后進入到數據庫。

d. 測試創建數據庫

PostgreSQL 角色與用戶管理介紹

創建成功。

五、給已存在用戶賦予各種權限

使用ALTER ROLE 命令。
ALTER ROLE 語法:
ALTER ROLE name [ [ WITH ] option [ ... ] ]
where option can be:

      SUPERUSER | NOSUPERUSER
    | CREATEDB | NOCREATEDB
    | CREATEROLE | NOCREATEROLE
    | CREATEUSER | NOCREATEUSER
    | INHERIT | NOINHERIT
    | LOGIN | NOLOGIN
    | REPLICATION | NOREPLICATION
    | CONNECTION LIMIT connlimit
    | [ ENCRYPTED | UNENCRYPTED ] PASSWORD 'password'
    | VALID UNTIL 'timestamp'

ALTER ROLE name RENAME TO new_name

ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter { TO | = } { value | DEFAULT }
ALTER ROLE name [ IN DATABASE database_name ] SET configuration_parameter FROM CURRENT
ALTER ROLE name [ IN DATABASE database_name ] RESET configuration_parameter
ALTER ROLE name [ IN DATABASE database_name ] RESET ALL
5.1 賦予bella 登錄權限
a. 查看現在的角色屬性
postgres=# /du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 bella     | Create DB, Cannot login                        | {}
 david     |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 renee     | Create DB                                      | {}
 sandy     |                                                | {}

postgres=# 
b. 賦予登錄權限
postgres=# ALTER ROLE bella WITH LOGIN;
ALTER ROLE
postgres=# /du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 bella     | Create DB                                      | {}
 david     |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 renee     | Create DB                                      | {}
 sandy     |                                                | {}

postgres=# 
5.2 賦予renee 創建角色的權限
postgres=# ALTER ROLE renee WITH CREATEROLE;
ALTER ROLE
postgres=# /du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 bella     | Create DB                                      | {}
 david     |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 renee     | Create role, Create DB                         | {}
 sandy     |                                                | {}

postgres=# 
5.3 賦予david 帶密碼登錄權限
postgres=# ALTER ROLE david WITH PASSWORD 'ufo456';
ALTER ROLE
postgres=#
5.4 設置sandy 角色的有效期
postgres=# ALTER ROLE sandy VALID UNTIL '2014-04-24';
ALTER ROLE
postgres=# /du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 bella     | Create DB                                      | {}
 david     |                                                | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 renee     | Create role, Create DB                         | {}
 sandy     |                                                | {}

postgres=# SELECT * from pg_roles ;
 rolname  | rolsuper | rolinherit | rolcreaterole | rolcreatedb | rolcatupdate | rolcanlogin | rolreplication | rolconnlimit | rolpassword |     rolvaliduntil      | rolconfig |  oid  
----------+----------+------------+---------------+-------------+--------------+-------------+----------------+--------------+-------------+------------------------+-----------+-------
 postgres | t        | t          | t             | t           | t            | t           | t              |           -1 | ********    |                        |           |    10
 bella    | f        | t          | f             | t           | f            | t           | f              |           -1 | ********    |                        |           | 49440
 renee    | f        | t          | t             | t           | f            | t           | f              |           -1 | ********    |                        |           | 49442
 david    | f        | t          | f             | f           | f            | t           | f              |           -1 | ********    |                        |           | 49438
 sandy    | f        | t          | f             | f           | f            | t           | f              |           -1 | ********    | 2014-04-24 00:00:00+08 |           | 49439
(5 rows)

postgres=#

六、角色賦權/角色成員

在系統的角色管理中,通常會把多個角色賦予一個組,這樣在設置權限時只需給該組設置即可,撤銷權限時也是從該組撤銷。在PostgreSQL中,首先需要創建一個代表組的角色,之后再將該角色的membership 權限賦給獨立的角色即可。
6.1 創建組角色
postgres=# CREATE ROLE father login nosuperuser nocreatedb nocreaterole noinherit encrypted password 'abc123';
CREATE ROLE
postgres=# /du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 bella     | Create DB                                      | {}
 david     |                                                | {}
 father    | No inheritance                                 | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 renee     | Create role, Create DB                         | {}
 sandy     |                                                | {}

postgres=#
6.2 給father 角色賦予數據庫test 連接權限和相關表的查詢權限。
postgres=# GRANT CONNECT ON DATABASE test to father;
GRANT
postgres=# /c test renee
You are now connected to database "test" as user "renee".
test=> /dt
No relations found.
test=> CREATE TABLE emp (
test(> id serial,
test(> name text);
NOTICE:  CREATE TABLE will create implicit sequence "emp_id_seq" for serial column "emp.id"
CREATE TABLE
test=> INSERT INTO emp (name) VALUES ('david');  
INSERT 0 1
test=> INSERT INTO emp (name) VALUES ('sandy');
INSERT 0 1
test=> SELECT * from emp;
 id | name  
----+-------
  1 | david
  2 | sandy
(2 rows)

test=> /dt
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | emp  | table | renee
(1 row)

test=> GRANT USAGE ON SCHEMA public to father;
WARNING:  no privileges were granted for "public"
GRANT
test=> GRANT SELECT on public.emp to father;
GRANT
test=> 
6.3 創建成員角色
test=> /c postgres postgres
You are now connected to database "postgres" as user "postgres".
postgres=# CREATE ROLE son1 login nosuperuser nocreatedb nocreaterole inherit encrypted password 'abc123';
CREATE ROLE
postgres=# 
這里創建了son1 角色,并開啟inherit 屬性。PostgreSQL 里的角色賦權是通過角色繼承(INHERIT)的方式實現的。
6.4 將father 角色賦給son1
postgres=# GRANT father to son1;
GRANT ROLE
postgres=# 
還有另一種方法,就是在創建用戶的時候賦予角色權限。
postgres=# CREATE ROLE son2 login nosuperuser nocreatedb nocreaterole inherit encrypted password 'abc123' in role father;
CREATE ROLE
postgres=# 
6.5 測試son1 角色
postgres=# /c test son1
You are now connected to database "test" as user "son1".
test=> /dt
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | emp  | table | renee
(1 row)

test=> SELECT * from emp;
 id | name  
----+-------
  1 | david
  2 | sandy
(2 rows)

test=> 
用renee 角色新創建一張表,再次測試
test=> /c test renee
You are now connected to database "test" as user "renee".
test=> CREATE TABLE dept (
test(> deptid integer,
test(> deptname text);
CREATE TABLE
test=> INSERT INTO dept (deptid, deptname) values(1, 'ts');
INSERT 0 1
test=> /c test son1
You are now connected to database "test" as user "son1".
test=> SELECT * from dept ;
ERROR:  permission denied for relation dept
test=> 
son1 角色只能查詢emp 表的數據,而不能查詢dept 表的數據,測試成功。
6.6 查詢角色組信息
test=> /c postgres postgres
You are now connected to database "postgres" as user "postgres".
postgres=# 
postgres=# /du
                             List of roles
 Role name |                   Attributes                   | Member of 
-----------+------------------------------------------------+-----------
 bella     | Create DB                                      | {}
 david     |                                                | {}
 father    | No inheritance                                 | {}
 postgres  | Superuser, Create role, Create DB, Replication | {}
 renee     | Create role, Create DB                         | {}
 sandy     |                                                | {}
 son1      |                                                | {father}
 son2      |                                                | {father}

postgres=# 
“ Member of ” 項表示son1 和son2 角色屬于father 角色組。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97在线观看免费| 国产91精品久久久| 中文字幕少妇一区二区三区| 91精品国产综合久久香蕉922| 国产精品6699| 亚洲视频综合网| 精品视频偷偷看在线观看| 欧美激情奇米色| 欧美精品在线免费播放| 日韩精品视频免费在线观看| 一本色道久久88综合日韩精品| 欧美性猛交xxxx乱大交极品| 日韩在线欧美在线国产在线| 亚洲欧美日本另类| 一本一道久久a久久精品逆3p| 欧美在线免费视频| 欧美性受xxx| 欧美在线亚洲在线| 欧美激情亚洲另类| 狠狠久久亚洲欧美专区| 亚洲成人激情小说| 久久久国产精品一区| 97香蕉超级碰碰久久免费的优势| 国产日韩欧美日韩| 日韩精品在线影院| 欧美精品aaa| 欧美视频免费在线观看| 成人网在线免费观看| 91免费综合在线| 中文字幕国产精品| 中文字幕日韩欧美在线| 欧美性极品xxxx娇小| 88国产精品欧美一区二区三区| 不卡在线观看电视剧完整版| 欧美性猛交xxxx| 久久影院资源站| 国产精品jvid在线观看蜜臀| 国产xxx69麻豆国语对白| 欧美性生交xxxxx久久久| 亚洲综合一区二区不卡| 深夜福利亚洲导航| 中文字幕日韩综合av| 91精品国产91久久久久福利| 久久久噜噜噜久久久| 亚洲最大的免费| 精品国产91久久久久久| 国产精品爱久久久久久久| 成人国产亚洲精品a区天堂华泰| 欧洲永久精品大片ww免费漫画| 国产精品视频男人的天堂| 91精品国产综合久久久久久久久| 成人欧美一区二区三区黑人| 日韩免费观看在线观看| 成人黄色av免费在线观看| 亚洲电影在线看| 亚洲欧美中文字幕| 亚洲国产精品悠悠久久琪琪| 欧美性视频在线| 日韩电影免费观看中文字幕| 国产精品久久久久久亚洲调教| 亚洲男女自偷自拍图片另类| 色综合久久中文字幕综合网小说| 国产午夜精品视频免费不卡69堂| 日韩精品www| 91久久精品视频| 久久久国产一区| 亚洲精品免费网站| 国内精品在线一区| 日本精品久久电影| 成人网在线观看| 少妇激情综合网| 亚洲精品av在线| 欧美最猛性xxxxx(亚洲精品)| 亚洲一区av在线播放| 欧美又大又硬又粗bbbbb| 欧美有码在线视频| 久久精品人人爽| 欧美大奶子在线| 欧美成人免费在线视频| 日韩中文字幕在线播放| 精品国产福利在线| 中文字幕欧美日韩在线| 欧美影院成年免费版| 日韩福利视频在线观看| 欧美日韩中国免费专区在线看| 国产在线a不卡| 国产精品白丝av嫩草影院| 久久激情视频久久| 国产精品免费看久久久香蕉| 国产精品久久精品| 亚洲国产美女精品久久久久∴| 日韩av在线电影网| 国产精品成人aaaaa网站| 亚洲视频自拍偷拍| 精品视频久久久| 国产成人a亚洲精品| 日韩av综合中文字幕| 亚洲综合日韩中文字幕v在线| 国产精品免费一区二区三区都可以| 亚洲美女av电影| 欧美中文字幕在线视频| 国产精品视频一区二区三区四| 中日韩午夜理伦电影免费| 亚洲国产日韩精品在线| 精品在线欧美视频| 91精品国产自产在线老师啪| 久久亚洲精品中文字幕冲田杏梨| 97久久伊人激情网| 影音先锋欧美在线资源| 成人两性免费视频| 国产精品久久久久不卡| 久久久久久久91| 色噜噜亚洲精品中文字幕| 91在线视频一区| 国产成人精品日本亚洲| 91精品国产91久久久久久| 2023亚洲男人天堂| 在线观看久久久久久| 欧美特黄级在线| 另类视频在线观看| 国产a∨精品一区二区三区不卡| 中文字幕亚洲色图| 98精品在线视频| 国产精品美女主播| 精品亚洲一区二区三区| 91成人在线视频| 91国产美女视频| 欧美最顶级丰满的aⅴ艳星| 久久中文字幕视频| 91欧美精品成人综合在线观看| 亚洲国产欧美一区二区三区久久| 亚洲人成电影在线播放| 久久福利视频导航| 国产欧美中文字幕| 久久亚洲私人国产精品va| 亚洲欧美在线磁力| 一区二区三区美女xx视频| 国产亚洲一区二区精品| 一夜七次郎国产精品亚洲| 精品中文视频在线| 91免费看片网站| 国产精品亚发布| 国产午夜精品全部视频播放| 久久免费少妇高潮久久精品99| 久久天天躁狠狠躁夜夜躁| 亚洲精品乱码久久久久久按摩观| 国产精品aaaa| 狠狠综合久久av一区二区小说| 国产日韩欧美综合| 国产亚洲精品久久久久久牛牛| 91在线视频一区| 亚洲香蕉在线观看| 久久精品99国产精品酒店日本| 欧美成人免费大片| 亚洲一区二区中文| 中文字幕亚洲欧美一区二区三区| 精品国产欧美成人夜夜嗨| 亚洲福利小视频| 亚洲级视频在线观看免费1级| 欧美精品久久一区二区| 欧美与黑人午夜性猛交久久久| 日日摸夜夜添一区| 国产精品视频久久| 国产欧美一区二区三区在线看|