無論何時(shí)創(chuàng)建數(shù)據(jù)庫對(duì)象,都會(huì)為其分配一個(gè)所有者,所有者通常是執(zhí)行 create 語句的人。
對(duì)于大多數(shù)類型的對(duì)象,初始狀態(tài)是只有所有者(或超級(jí)用戶)才能修改或刪除對(duì)象。要允許其他角色或用戶使用它,必須為該用戶設(shè)置權(quán)限。
在 PostgreSQL 中,權(quán)限分為以下幾種:
SELECT
INSERT
UPDATE
DELETE
TRUNCATE
REFERENCES
TRIGGER
CREATE
CONNECT
TEMPORARY
EXECUTE
USAGE
根據(jù)對(duì)象的類型(表、函數(shù)等),將指定權(quán)限應(yīng)用于該對(duì)象。
要向用戶分配權(quán)限,可以使用 GRANT 命令。
GRANT 命令的基本語法如下:
GRANT privilege [, ...] ON object [, ...] TO { PUBLIC | GROUP group | username }
privilege ? 值可以為:SELECT,INSERT,UPDATE,DELETE, RULE,ALL。
object ? 要授予訪問權(quán)限的對(duì)象名稱。可能的對(duì)象有: table, view,sequence。
PUBLIC ? 表示所有用戶。
GROUP group ? 為用戶組授予權(quán)限。
username ? 要授予權(quán)限的用戶名。PUBLIC 是代表所有用戶的簡短形式。
另外,我們可以使用 REVOKE 命令取消權(quán)限,REVOKE 語法:
REVOKE privilege [, ...] ON object [, ...] FROM { PUBLIC | GROUP groupname | username }
為了理解權(quán)限,創(chuàng)建一個(gè)用戶:
nhooodb=# CREATE USER nhooo WITH PASSWORD 'password'; CREATE ROLE
信息 CREATE ROLE 表示創(chuàng)建了一個(gè)用戶 "nhooo"。
創(chuàng)建 COMPANY 表(下載 COMPANY SQL 文件 ),數(shù)據(jù)內(nèi)容如下:
nhooodb# 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)
現(xiàn)在給用戶 "nhooo" 分配權(quán)限:
nhooodb=# GRANT ALL ON COMPANY TO nhooo; GRANT
信息 GRANT 表示所有權(quán)限已經(jīng)分配給了 "nhooo"。
下面撤銷用戶 "nhooo" 的權(quán)限:
nhooodb=# REVOKE ALL ON COMPANY FROM nhooo; REVOKE
信息 REVOKE 表示已經(jīng)將用戶的權(quán)限撤銷。
你也可以刪除用戶:
nhooodb=# DROP USER nhooo; DROP ROLE
信息 DROP ROLE 表示用戶 "nhooo" 已經(jīng)從數(shù)據(jù)庫中刪除。