你可以在PostgreSQL的側頗有幾分:
如果你想role2
到有role1
擁有所有權限,你可以:
GRANT role1 TO role2;
和/或在PostgreSQL 9.0或後,您可以指示PostgreSQL的設置default privileges新的對象:
ALTER DEFAULT PRIVILEGES allows you to set the privileges that will be applied to objects created in the future. (It does not affect privileges assigned to already-existing objects.) Currently, only the privileges for tables (including views and foreign tables), sequences, and functions can be altered.
你能做到這一點的角色或模式。對於你的情況,你可以:
ALTER DEFAULT PRIVILEGES FOR ROLE role1 GRANT SELECT ON TABLES TO role2;
如果你想多個不同的角色來分享一組特權,我將授予對象的所有權限,以一個非登錄角色(以前被稱爲GROUP
) - role0
在我的例子下面。爲此,請使用DEFAULT PRIVILEGES
,並且不要忘記預先存在的對象,包括序列(我傾向於忘記這些對象)。
然後GRANT role0
到那些其他角色。
沿着這些路線:
ALTER DEFAULT PRIVILEGES FOR ROLE role1 GRANT SELECT ON TABLES TO role0;
ALTER DEFAULT PRIVILEGES FOR ROLE role2 GRANT SELECT ON TABLES TO role0;
...
GRANT role0 TO role1;
GRANT role0 TO role2;
這樣你就可以很容易地GRANT
額外的權限,只是一個角色,如果需要應。 您可以根據需要爲此設置添加任意數量的角色。
許多DML語句需要的對象的所有權。我引用the manual on ALTER TABLE
:
You must own the table to use ALTER TABLE.
作爲擁有表工作的角色的成員。所以,在上面的例子中,如果你製作role0
自己的表格,role1
和role2
可以使用ALTER TABLE
。執行:
ALTER TABLE tbl OWNER TO user0;
對於您創建的每個表。
或者你潛入你的角色運行CREATE
命令之前:
SET ROLE user0;
CREATE ...;
CREATE ...;
RESET ROLE;
如果你記不清你是誰:
SELECT current_user, session_user;
感謝您的快速回復。因此,看看第一種選擇:與兩個用戶共同擁有一個「主人」角色,我將有兩個用戶分別授予另一個用戶?例如'GRANT user1 TO user2;授予user2 TO user1'?這必須在每次「切換」之前手動執行?如果我使用'DEFAULT PRIVILEGES',但我只能做一次。對? – gingerlime 2012-04-18 16:40:16
['GRANT'](http://www.postgresql.org/docs/current/interactive/sql-grant.html)意味着永久授予權限並僅需要一次。 – 2012-04-18 17:13:24
很抱歉,但我不明白這是如何工作的。看起來授權是分層的,例如, 'GRANT user1 TO user2',所以user2將擁有與user1相同的權限,但不會以相反的方式。無論哪個用戶創建表,我都需要兩個用戶具有完全相同的權限。也許我錯過了一些東西。 – gingerlime 2012-04-18 20:30:03