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」。