通過實驗理解PG邏輯結構:1 使用者(角色)

fjzcau發表於2022-03-04

       
在PostgreSQL中,角色與使用者是沒有區別的,一個使用者也是一個角色。
使用者和角色在整個資料庫例項中都是全域性的,在同一個例項中的不同資料庫中,看到的也是相同的。

## 使用pgAdmin工具 


## 展開



在初始化資料庫系統時,有一個預定義的超級使用者:postgres;一般來說,初始化資料庫使用的作業系統使用者:postgres

USER 與 ROLE 的區別:


   CREATE ROLE name [[with] option [...]]  建立的角色預設沒有 LOGIN 許可權
   CREATE USER name [[with] option [...]]  建立的使用者預設有 LOGIN 許可權,除了這點,與 CREATE ROLE 完全相同。

# 檢視 create user 語法幫助
postgres=# \h create user
Command:     CREATE USER
Description: define a new database role
Syntax:
CREATE USER name [ [ WITH ] option [ ... ] ]

where option can be:

     SUPERUSER | NOSUPERUSER
   | CREATEDB | NOCREATEDB
   | CREATEROLE | NOCREATEROLE
   | INHERIT | NOINHERIT
   | LOGIN | NOLOGIN
   | REPLICATION | NOREPLICATION
   | BYPASSRLS | NOBYPASSRLS
   | CONNECTION LIMIT connlimit
   | [ ENCRYPTED ] PASSWORD 'password' | PASSWORD NULL
   | VALID UNTIL 'timestamp'
   | IN ROLE role_name [, ...]
   | IN GROUP role_name [, ...]
   | ROLE role_name [, ...]
   | ADMIN role_name [, ...]
   | USER role_name [, ...]
   | SYSID uid

URL:


# 建立使用者 sys ,密碼為 sys ,且具有superuser、createdb、createrole 許可權
postgres=# create user sys with password 'sys' superuser createdb createrole;
CREATE ROLE

#建立普通使用者 scott ,密碼為 123
postgres=# create user scott with password '123';
CREATE ROLE

# 檢視使用者
postgres=# \du
                                  List of roles
Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
scott     |                                                            | {}
sys       | Superuser, Create role, Create DB                          | {}

# 檢視使用者:使用系統檢視 pg_user
postgres=# select usename,usesysid,usecreatedb,usesuper from pg_user order by 1;
usename  | usesysid | usecreatedb | usesuper
----------+----------+-------------+----------
postgres |       10 | t           | t
scott    |    16386 | f           | f
sys      |    16385 | t           | t
(3 rows)


# 修改密碼 with 可省略
postgres=# alter user scott with password 'tiger';
ALTER ROLE

postgres=# \password scott  
Enter new password:
Enter it again:

# 除了預設的超級使用者postgres,其他使用者連線庫,必須加 -d postgres
[postgres@pgdb1 ~]$ psql -h pgdb1 -p 5432  -U scott
Password for user scott:
psql: error: FATAL:  database "scott" does not exist
##
[postgres@pgdb1 ~]$ psql  -U sys
psql: error: FATAL:  database "sys" does not exist
##
[postgres@pgdb1 ~]$ psql -U postgres
psql (12.8)
Type "help" for help.


# 建立密碼有效期的使用者
postgres=# create user user_10day password '123' valid until '2022-03-05';
CREATE ROLE
postgres=# \du
                                   List of roles
Role name  |                         Attributes                         | Member of
------------+------------------------------------------------------------+-----------
hr         |                                                            | {}
postgres   | Superuser, Create role, Create DB, Replication, Bypass RLS | {}
scott      | Cannot login                                               | {}
sys        | Superuser, Create role, Create DB                          | {}
user_10day | Password valid until 2022-03-05 00:00:00+08                | {}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22661144/viewspace-2864648/,如需轉載,請註明出處,否則將追究法律責任。

相關文章