PostgreSQL資料庫使用者許可權管理

chenoracle發表於2023-01-18

啟動資料庫

[postgres@cjc-db-01 ~]$ pg_ctl -D /pg/data -l /pg/log/pg.log start
waiting for server to start.... done
server started

登入資料庫

[postgres@cjc-db-01 ~]$ psql

檢視pg_roles表欄位

postgres=# \d pg_roles
                         View "pg_catalog.pg_roles"
     Column     |           Type           | Collation | Nullable | Default 
----------------+--------------------------+-----------+----------+---------
 rolname        | name                     |           |          | 
 rolsuper       | boolean                  |           |          | 
 rolinherit     | boolean                  |           |          | 
 rolcreaterole  | boolean                  |           |          | 
 rolcreatedb    | boolean                  |           |          | 
 rolcanlogin    | boolean                  |           |          | 
 rolreplication | boolean                  |           |          | 
 rolconnlimit   | integer                  |           |          | 
 rolpassword    | text                     |           |          | 
 rolvaliduntil  | timestamp with time zone |           |          | 
 rolbypassrls   | boolean                  |           |          | 
 rolconfig      | text[]                   |           |          | 
 oid            | oid                      |           |          |

或者

postgres=#
SELECT
   table_name,
   column_name,
   data_type,
   column_default
FROM
   information_schema.columns
WHERE
   table_name = 'pg_roles';
 table_name |  column_name   |        data_type         | column_default 
------------+----------------+--------------------------+----------------
 pg_roles   | rolname        | name                     | 
 pg_roles   | rolsuper       | boolean                  | 
 pg_roles   | rolinherit     | boolean                  | 
 pg_roles   | rolcreaterole  | boolean                  | 
 pg_roles   | rolcreatedb    | boolean                  | 
 pg_roles   | rolcanlogin    | boolean                  | 
 pg_roles   | rolreplication | boolean                  | 
 pg_roles   | rolconnlimit   | integer                  | 
 pg_roles   | rolpassword    | text                     | 
 pg_roles   | rolvaliduntil  | timestamp with time zone | 
 pg_roles   | rolbypassrls   | boolean                  | 
 pg_roles   | rolconfig      | ARRAY                    | 
 pg_roles   | oid            | oid                      |

檢視角色資訊

postgres=# select rolname,rolsuper,rolcreatedb from pg_roles;
       rolname        | rolsuper | rolcreatedb 
----------------------+----------+-------------
 postgres             | t        | t
 pg_monitor           | f        | f
 pg_read_all_settings | f        | f
 pg_read_all_stats    | f        | f
 pg_stat_scan_tables  | f        | f
 pg_signal_backend    | f        | f
(6 rows)

在PostgreSQL資料庫中,角色和使用者沒有區別,一個角色就是一使用者,這塊和Oracle資料庫有一定差異。

相關描述如下:

CREATE USER is now an alias for CREATE ROLE. 
The only difference is that when the command is spelled CREATE USER, LOGIN is assumed by default,
whereas NOLOGIN is assumed when the command is spelled 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'
    | VALID UNTIL 'timestamp'
    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid

檢視create role幫助資訊,和create user完全一樣。

postgres=# \h create role;
Command:     CREATE ROLE
Description: define a new database role
Syntax:
CREATE ROLE 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'
    | VALID UNTIL 'timestamp'
    | IN ROLE role_name [, ...]
    | IN GROUP role_name [, ...]
    | ROLE role_name [, ...]
    | ADMIN role_name [, ...]
    | USER role_name [, ...]
    | SYSID uid

引數說明:

1.SUPERUSER |NOSUPERUSER
建立出來的使用者是否為超級使用者
2.CREATEDB |NOCREATEDB
指定建立出來的使用者是否有建立資料庫的許可權
3.CREATEROLE |NOCREATEROLE
指定建立出來的使用者是否有建立其他角色許可權
4.CREATEUSER |NOCREATEUSER
指定建立出來的使用者是否有建立其它使用者的許可權
5.INHERIT | NOINHERIT
建立的使用者擁有某個或幾個角色的許可權
6.LOGIN | NOLOGIN
建立出來的使用者是否有連線資料庫的許可權
7.CONNECTION LIMIT connlimit
戶可以使用的併發連線的數量,預設為 "-1",表示沒有限制
8.[ENCRYPTED | UNENCRYPTED] PASSWORD 'password'
儲存的使用者口令是否加密
9.VALID UNTIL 'timestamp'
密碼失效時間,不指定的話永久有效
10.IN ROLE role_name [...]
指定使用者成為哪些角色的成員
11.IN GROUP role_name [...]
等同於IN ROLE rome_name,不過已過時
12.ROLE role_name [...]role_name
將成為這個新建的角色的成員
13.ADMIN role_name [...]role_name
將有這個新建角色 WITH ADMIN OPTION許可權
14.USER role_name
與ROLE相同,不過已過時
15.SYSID uid
用於SQL相容

建立使用者

create user chen LOGIN;

建立角色

create role cjc SUPERUSER PASSWORD '1';

檢視使用者已經建立

postgres=# select rolname,rolsuper,rolcreatedb from pg_roles;
       rolname        | rolsuper | rolcreatedb 
----------------------+----------+-------------
 postgres             | t        | t
 pg_monitor           | f        | f
 pg_read_all_settings | f        | f
 pg_read_all_stats    | f        | f
 pg_stat_scan_tables  | f        | f
 pg_signal_backend    | f        | f
 chen                 | f        | f
 cjc                  | t        | f
(8 rows)

指定使用者登入

[postgres@cjc-db-01 ~]$ psql -h 172.16.6.137 -p 5678 -U chen -W postgres
Password for user chen: 
psql.bin (10.23)
Type "help" for help.
postgres=> select current_user;
 current_user 
--------------
 chen
(1 row)

注意:建立使用者方式建立出來的使用者預設有 LOGIN 許可權,而建立角色建立出來的使用者沒有 LOGIN 許可權。

[postgres@cjc-db-01 ~]$ psql -h 172.16.6.137 -p 5678 -U cjc -W postgres
Password for user cjc: 
psql.bin: FATAL:  role "cjc" is not permitted to log in

授予登入許可權

postgres=# grant connect on database postgres to cjc;
postgres=# \q

還是不能登入

[postgres@cjc-db-01 ~]$ psql -h 172.16.6.137 -p 5678 -U cjc -W postgres
Password for user cjc: 
psql.bin: FATAL:  role "cjc" is not permitted to log in

修改角色

postgres=# alter role cjc login superuser;

重新登入

[postgres@cjc-db-01 ~]$ psql -h 172.16.6.137 -p 5678 -U cjc -W postgres
Password for user cjc: 
psql.bin (10.23)
Type "help" for help.
postgres=# select current_user;
 current_user 
--------------
 cjc
(1 row)

為使用者指定表空間

檢視錶空間

postgres=# \db
       List of tablespaces
    Name    |  Owner   | Location 
------------+----------+----------
 pg_default | postgres | 
 pg_global  | postgres | 
(2 rows)

建立表空間

postgres=# \h create tablespace
Command:     CREATE TABLESPACE
Description: define a new tablespace
Syntax:
CREATE TABLESPACE tablespace_name
    [ OWNER { new_owner | CURRENT_USER | SESSION_USER } ]
    LOCATION 'directory'
    [ WITH ( tablespace_option = value [, ... ] ) ]

注意:

表空間的名稱不能以 'pg_' 開頭,它們是系統表空間的保留名稱;

LOCATION 引數必須指定絕對路徑名,

指定的目錄必須是一個已經存在的空目錄,

PostgreSQL 作業系統使用者(postgres)必須是該目錄的擁有者,以便能夠進行檔案的讀寫。

建立空目錄

[postgres@cjc-db-01 data]$ pwd
/pg/data
[postgres@cjc-db-01 data]$ mkdir cjctbs

建立表空間,有WARNING,新增的表空間不能在資料路徑裡面

postgres=# CREATE TABLESPACE cjctbs OWNER cjc LOCATION '/pg/data/cjctbs';
WARNING:  tablespace location should not be inside the data directory
CREATE TABLESPACE

自動生成的檔案

[postgres@cjc-db-01 PG_10_201707211]$ pwd
/pg/data/cjctbs/PG_10_201707211
[postgres@cjc-db-01 PG_10_201707211]$ ls

刪除表空間

postgres=# drop tablespace cjctbs;
DROP TABLESPACE

建立表空間,重新指定路徑,沒有WARNING

[postgres@cjc-db-01 pg]$ mkdir /pg/tbs/cjctbs -p
postgres=# CREATE TABLESPACE cjctbs OWNER cjc LOCATION '/pg/tbs/cjctbs';
CREATE TABLESPACE

自動生成目錄

[postgres@cjc-db-01 PG_10_201707211]$ pwd
/pg/tbs/cjctbs/PG_10_201707211

建立資料庫

指定使用者和表空間

postgres=# create database cjcdb owner cjc tablespace cjctbs;
CREATE DATABASE

檢視新生成的檔案

[postgres@cjc-db-01 16396]$ pwd
/pg/tbs/cjctbs/PG_10_201707211/16396
[postgres@cjc-db-01 16396]$ ls
112        13696_vm   13713      1417_vm   2601      2606_vm   2612_fsm  2619      2661  2681  2702      2834      2996      3350_vm   3456_vm   3576      3602_vm   3997     826_vm
113        13698      13715      1418      2601_fsm  2607      2612_vm   2619_fsm  2662  2682  2703      2834_vm   3079      3351      3466      3576_vm   3603      5002     827
1247       13700      13716      1418_vm   2601_vm   2607_fsm  2613      2619_vm   2663  2683  2704      2835      3079_fsm  3379      3466_vm   3596      3603_fsm  548      828
1247_fsm   13701      13716_fsm  174       2602      2607_vm   2613_vm   2620      2664  2684  2753      2836      3079_vm   3380      3467      3596_vm   3603_vm   549      pg_filenode.map
1247_vm    13701_fsm  13716_vm   175       2602_fsm  2608      2615      2620_vm   2665  2685  2753_fsm  2836_vm   3080      3381      3468      3597      3604      6102     PG_VERSION
1249       13701_vm   13718      2187      2602_vm   2608_fsm  2615_fsm  2650      2666  2686  2753_vm   2837      3081      3381_vm   3501      3598      3605      6102_vm
1249_fsm   13703      13720      2224      2603      2608_vm   2615_vm   2651      2667  2687  2754      2838      3085      3394      3501_vm   3598_vm   3606      6104
1249_vm    13705      13721      2224_vm   2603_fsm  2609      2616      2652      2668  2688  2755      2838_fsm  3118      3394_fsm  3502      3599      3607      6104_vm
1255       13706      13721_fsm  2328      2603_vm   2609_fsm  2616_fsm  2653      2669  2689  2756      2838_vm   3118_vm   3394_vm   3503      3600      3608      6106
1255_fsm   13706_fsm  13721_vm   2328_vm   2604      2609_vm   2616_vm   2654      2670  2690  2757      2839      3119      3395      3534      3600_fsm  3609      6106_vm
1255_vm    13706_vm   13723      2336      2604_vm   2610      2617      2655      2673  2691  2830      2840      3164      3439      3541      3600_vm   3712      6110
1259       13708      13725      2336_vm   2605      2610_fsm  2617_fsm  2656      2674  2692  2830_vm   2840_fsm  3256      3439_vm   3541_fsm  3601      3764      6111
1259_fsm   13710      13726      2337      2605_fsm  2610_vm   2617_vm   2657      2675  2693  2831      2840_vm   3256_vm   3440      3541_vm   3601_fsm  3764_fsm  6112
1259_vm    13711      13728      2600      2605_vm   2611      2618      2658      2678  2696  2832      2841      3257      3455      3542      3601_vm   3764_vm   6113
13696      13711_fsm  13730      2600_fsm  2606      2611_vm   2618_fsm  2659      2679  2699  2832_vm   2995      3258      3456      3574      3602      3766      6117
13696_fsm  13711_vm   1417       2600_vm   2606_fsm  2612      2618_vm   2660      2680  2701  2833      2995_vm   3350      3456_fsm  3575      3602_fsm  3767      826

查詢資料庫

postgres=# \l+
                                                                    List of databases
   Name    |  Owner   | Encoding |   Collate   |    Ctype    |   Access privileges   |  Size   | Tablespace |                Description                 
-----------+----------+----------+-------------+-------------+-----------------------+---------+------------+--------------------------------------------
 cjcdb     | cjc      | UTF8     | en_US.UTF-8 | en_US.UTF-8 |                       | 7745 kB | cjctbs     | 
 postgres  | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres         +| 7879 kB | pg_default | default administrative connection database
           |          |          |             |             | postgres=CTc/postgres+|         |            | 
           |          |          |             |             | cjc=c/postgres        |         |            | 
 template0 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 7745 kB | pg_default | unmodifiable empty database
           |          |          |             |             | postgres=CTc/postgres |         |            | 
 template1 | postgres | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres          +| 7745 kB | pg_default | default template for new databases

查詢資料庫物理儲存位置

cjcdb=# select oid,datname from pg_database where datname = 'cjcdb';
  oid  | datname 
-------+---------
 16396 | cjcdb
(1 row)

根據oid進行查詢

[postgres@cjc-db-01 16396]$ pwd
/pg/tbs/cjctbs/PG_10_201707211/16396
[postgres@cjc-db-01 16396]$ ls |wc -l
296

檢視指定資料庫的大小

postgres=# select pg_database_size('cjcdb');
 pg_database_size 
------------------
          8076423
(1 row)

檢視指定資料庫的大小

postgres=# select pg_size_pretty(pg_database_size('cjcdb'));
 pg_size_pretty 
----------------
 7887 kB
(1 row)

檢視資料庫的大小

postgres=# select pg_database.datname, pg_database_size(pg_database.datname) AS size from pg_database; 
  datname  |  size   
-----------+---------
 template1 | 7930371
 template0 | 7930371
 postgres  | 8068231
 cjcdb     | 8076423
(4 rows)

查詢資料庫預設表空間

cjcdb=# select datname,dattablespace from pg_database where datname='cjcdb'; 
 datname | dattablespace 
---------+---------------
 cjcdb   |         16395
(1 row)

登入資料庫

[postgres@cjc-db-01 ~]$ psql -h 172.16.6.137 -p 5678 -U cjc -W cjcdb

建表

cjcdb=# create table t1(id int,name char(10));

查詢表物理儲存位置

cjcdb=# select oid,relfilenode from pg_class where relname = 't1';
  oid  | relfilenode 
-------+-------------
 16397 |       16397
(1 row)

根據relfilenode進行查詢

[postgres@cjc-db-01 16396]$ pwd
/pg/tbs/cjctbs/PG_10_201707211/16396
[postgres@cjc-db-01 16396]$ ls -lrth 16397*
-rw------- 1 postgres postgres 8.0K Jan 17 17:23 16397

查詢表所在表空間

新增表

create table t2(id int,name char(10));
create table t3(id int,name char(10)) tablespace cjctbs;

沒表空間資訊?

cjcdb=# \d+ t3
                                        Table "public.t3"
 Column |     Type      | Collation | Nullable | Default | Storage  | Stats target | Description 
--------+---------------+-----------+----------+---------+----------+--------------+-------------
 id     | integer       |           |          |         | plain    |              | 
 name   | character(10) |           |          |         | extended |              | 
---
cjcdb=# select tableowner,schemaname,tablename,tablespace from pg_tables where tableowner='cjc';
 tableowner | schemaname | tablename | tablespace 
------------+------------+-----------+------------
 cjc        | public     | t1        | 
 cjc        | public     | t5        | 
 cjc        | public     | t6        | 
(3 rows)
---
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)), tb.spcname  
 from pg_class a, pg_tablespace tb  
where a.reltablespace = tb.oid  
 and a.relkind in ('r', 'i')  
order by a.relpages desc;
---
select relname, relkind, relpages,pg_size_pretty(pg_relation_size(a.oid)),reltablespace,relowner  
from pg_class a, pg_tablespace tb  
where a.relkind in ('r', 'i')  
and a.reltablespace=tb.oid  
and tb.spcname='cjctbs'  
order by a.relpages desc;

修改表所在表空間

alter table t1 set tablespace cjctbs;

查詢表結構

cjcdb=# \d t1
                    Table "public.t1"
 Column |     Type      | Collation | Nullable | Default 
--------+---------------+-----------+----------+---------
 id     | integer       |           |          | 
 name   | character(10) |           |          |

插入資料

cjcdb=# insert into t1 values(1,'a'),(2,'aaa');
INSERT 0 2
cjcdb=# select * from t1;
 id |    name    
----+------------
  1 | a         
  2 | aaa       
(2 rows)

檢視當前資料庫下所有表

postgres=# \c cjcdb
You are now connected to database "cjcdb" as user "postgres".
cjcdb=# \d
       List of relations
 Schema | Name | Type  | Owner 
--------+------+-------+-------
 public | t1   | table | cjc
(1 row)

檢視錶大小

cjcdb=# select pg_relation_size('t1'); 
 pg_relation_size 
------------------
             8192
(1 row)

檢視錶大小

cjcdb=# select pg_size_pretty(pg_relation_size('t1')); 
 pg_size_pretty 
----------------
 8192 bytes
(1 row)

建立索引

cjcdb=# create index i_t1_id on t1(id);

檢視錶的總大小,包括索引大小

cjcdb=# select pg_size_pretty(pg_total_relation_size('t1'));
 pg_size_pretty 
----------------
 24 kB
(1 row)

檢視當前資料庫下所有索引

cjcdb=# \di
            List of relations
 Schema |  Name   | Type  | Owner | Table 
--------+---------+-------+-------+-------
 public | i_t1_id | index | cjc   | t1
(1 row)

檢視單個索引大小

cjcdb=# select pg_size_pretty(pg_relation_size('i_t1_id'));
 pg_size_pretty 
----------------
 16 kB
(1 row)

查詢表空間大小

cjcdb=# select pg_size_pretty(pg_tablespace_size('cjctbs'));
 pg_size_pretty 
----------------
 7911 kB
(1 row)

當前chen只有登入許可權

[postgres@cjc-db-01 ~]$ psql -h 172.16.6.137 -p 5678 -U chen -W cjcdb
Password for user chen: 
psql.bin (10.23)
Type "help" for help.

沒有查詢許可權

cjcdb=> select * from t1;
ERROR:  permission denied for relation t1

檢視授權語句

postgres=# \h grant;
Command:     GRANT
Description: define access privileges
Syntax:
GRANT { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
         | ALL TABLES IN SCHEMA schema_name [, ...] }
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
    [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
    ON [ TABLE ] table_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { SEQUENCE sequence_name [, ...]
         | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE database_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON DOMAIN domain_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN DATA WRAPPER fdw_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN SERVER server_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { EXECUTE | ALL [ PRIVILEGES ] }
    ON { FUNCTION function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
         | ALL FUNCTIONS IN SCHEMA schema_name [, ...] }
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE lang_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECT loid [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE tablespace_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT { USAGE | ALL [ PRIVILEGES ] }
    ON TYPE type_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
GRANT role_name [, ...] TO role_specification [, ...]
    [ WITH ADMIN OPTION ]
    [ GRANTED BY role_specification ]
where role_specification can be:
    [ GROUP ] role_name
  | PUBLIC
  | CURRENT_USER
  | SESSION_USER

表級別授權

[postgres@cjc-db-01 ~]$ psql -h 172.16.6.137 -p 5678 -U cjc -W cjcdb
cjcdb=# GRANT SELECT ON TABLE t1  TO chen;

可以查詢

[postgres@cjc-db-01 ~]$ psql -h 172.16.6.137 -p 5678 -U chen -W cjcdb
Password for user chen: 
psql.bin (10.23)
Type "help" for help.
cjcdb=> select * from t1;
 id |    name    
----+------------
  1 | a         
  2 | aaa       
(2 rows)

不能執行其他操作

cjcdb=> insert into t1 values(3,'xxx');
ERROR:  permission denied for relation t1
cjcdb=> delete from t1;
ERROR:  permission denied for relation t1

回收許可權

[postgres@cjc-db-01 ~]$ psql -h 172.16.6.137 -p 5678 -U cjc -W cjcdb
cjcdb=# revoke select on t1 from chen;

庫級別授權

cjcdb=# GRANT ALL ON DATABASE cjcdb to chen;

查詢許可權

檢視使用者表許可權

cjcdb=# select * from information_schema.table_privileges where grantee='cjc';
 grantor | grantee | table_catalog | table_schema | table_name | privilege_type | is_grantable | with_hierarchy 
---------+---------+---------------+--------------+------------+----------------+--------------+----------------
 cjc     | cjc     | cjcdb         | public       | t1         | INSERT         | YES          | NO
 cjc     | cjc     | cjcdb         | public       | t1         | SELECT         | YES          | YES
 cjc     | cjc     | cjcdb         | public       | t1         | UPDATE         | YES          | NO
 cjc     | cjc     | cjcdb         | public       | t1         | DELETE         | YES          | NO
 cjc     | cjc     | cjcdb         | public       | t1         | TRUNCATE       | YES          | NO
 cjc     | cjc     | cjcdb         | public       | t1         | REFERENCES     | YES          | NO
 cjc     | cjc     | cjcdb         | public       | t1         | TRIGGER        | YES          | NO
(7 rows)

檢視usage許可權表

select * from information_schema.usage_privileges where grantee='cjc';

檢視儲存過程函式相關許可權表

select * from information_schema.routine_privileges where grantee='cjc';

###chenjuchao 20230118 10:20###

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

相關文章