PostgreSQL許可權


在資料庫中建立物件時,都會為其分配所有者。 所有者通常是執行建立語句的使用者。 對於大多數型別的物件,初始狀態是只有所有者(或超級使用者)可以修改或刪除物件。 要允許其他角色或使用者使用它,必須授予許可權或許可權。

PostgreSQL中的不同型別的許可權是:

  • SELECT,INSERT,UPDATE,DELETE,TRUNCATE,REFERENCES,TRIGGER,CREATE,CONNECT,TEMPORARY,EXECUTEUSAGE

根據物件的型別(表,函式等),許可權將應用於物件。 要為使用者分配許可權,使用GRANT命令。

GRANT的語法

GRANT命令的基本語法如下:

GRANT privilege [, ...]
ON object [, ...]
TO { PUBLIC | GROUP group | username }
  • privilege值可以是:SELECTINSERTUPDATEDELETERULEALL
  • object:要向其授予存取許可權的物件的名稱。 可能的物件是:表,檢視,序列
  • PUBLIC:表示所有使用者的簡短形式。
  • GROUP group:授予許可權的組。
  • username:授予許可權的使用者的名稱。 PUBLIC是表示所有使用者的簡短形式。

REVOKE的語法

REVOKE命令的基本語法如下:

REVOKE privilege [, ...]
ON object [, ...]
FROM { PUBLIC | GROUP groupname | username }
  • privilege值可以是:SELECTINSERTUPDATEDELETERULEALL
  • object: 授予存取許可權的物件的名稱。 可能的物件是:表,檢視,序列。
  • PUBLIC:表示所有使用者的簡短形式。
  • GROUP group:授予許可權的組。
  • username:授予許可權的使用者的名稱。 PUBLIC是表示所有使用者的簡短形式。

範例

如要理解許可權,我們先建立一個USER,如下所示:

yiibai_db=# CREATE USER manisha WITH PASSWORD 'password';
CREATE ROLE

語句CREATE ROLE 表示建立了一個使用者名為manisha

考慮 COMPANY 表有以下記錄:

yiibai_db# select * from COMPANY;
 id | name  | age | address   | salary
----+-------+-----+-----------+--------
  1 | Paul  |  32 | California|  20000
  2 | Allen |  25 | Texas     |  15000
  3 | Teddy |  23 | Norway    |  20000
  4 | Mark  |  25 | Rich-Mond |  65000
  5 | David |  27 | Texas     |  85000
  6 | Kim   |  22 | South-Hall|  45000
  7 | James |  24 | Houston   |  10000
(7 rows)

接下來,讓我們給予使用者「manisha」在表COMPANY上授予所有許可權,如下所示:

yiibai_db=# GRANT ALL ON COMPANY TO manisha;
GRANT

語句GRANT指示所有在COMPANY表上的許可權都分配給使用者「manisha」。

接下來,讓我們從使用者「manisha」中復原許可權,如下所示:

yiibai_db=# REVOKE ALL ON COMPANY FROM manisha;
REVOKE

REVOKE表示從使用者「manisha」撤消所有許可權。甚至可以刪除使用者,如下所示:

yiibai_db=# DROP USER manisha;
DROP ROLE

DROP ROLE表示從資料庫中刪除使用者「manisha」。