PostgreSQL:許可權管理

Ryan_Bai發表於2020-12-14

許可權說明

  • SELECT:允許從指定表,檢視或序列的任何列或列出的特定列進行SELECT。也允許使用COPY TO。在UPDATE或DELETE中引用現有列值也需要此許可權。對於序列,此許可權還允許使用currval函式。對於大物件,此許可權允許讀取物件。

  • INSERT:允許將新行INSERT到指定的表中。如果列出了特定列,則只能在INSERT命令中為這些列分配(因此其他列將接收預設值)。也允許COPY FROM。

  • UPDATE:允許更新指定表的任何列或列出的特定列,需要SELECT許可權。

  • DELETE:允許刪除指定表中的行,需要SELECT許可權。

  • TRUNCATE:允許在指定的表上建立觸發器。

  • REFERENCES:允許建立引用指定表或表的指定列的外來鍵約束。

  • TRIGGER:允許在指定的表上建立觸發器。 

  • CREATE:對於資料庫,允許在資料庫中建立新的schema、table、index。

  • CONNECT:允許使用者連線到指定的資料庫。在連線啟動時檢查此許可權。

  • TEMPORARY、TEMP:允許在使用指定資料庫時建立臨時表。

  • EXECUTE:允許使用指定的函式或過程以及在函式。

  • USAGE:對於schema,允許訪問指定模式中包含的物件;對於sequence,允許使用currval和nextval函式。對於型別和域,允許在建立表,函式和其他模式物件時使用型別或域。

  • ALL PRIVILEGES:一次授予所有可用許可權。

授權

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 ]
    
-- 單表授權:授權zjy賬號可以訪問schema為zjy的zjy表
grant select,insert,update,delete on zjy.zjy to zjy;
-- 所有表授權:
grant select,insert,update,delete on all tables in schema zjy to zjy;
 
 
GRANT { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
    [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
    ON [ TABLE ] table_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
    
-- 列授權,授權指定列(zjy schema下的zjy表的name列)的更新許可權給zjy使用者
grant update (name) on zjy.zjy to zjy;
-- 指定列授不同許可權,zjy schema下的zjy表,檢視更新name、age欄位,插入name欄位
grant select (name,age),update (name,age),insert(name) on zjy.xxx to zjy;
 
 
GRANT { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { SEQUENCE sequence_name [, ...]
         | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
    TO role_specification [, ...] [ WITH GRANT OPTION ]
    
-- 序列(自增鍵)屬性授權,指定zjy schema下的seq_id_seq 給zjy使用者
grant select,update on sequence zjy.seq_id_seq to zjy;
-- 序列(自增鍵)屬性授權,給使用者zjy授權zjy schema下的所有序列
grant select,update on all sequences in schema zjy to zjy;
 
 
GRANT { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE database_name [, ...]
    TO role_specification [, ...] [ WITH GRANT OPTION ]
    
-- 連線資料庫許可權,授權cc使用者連線資料庫zjy
grant connect on database zjy to cc;
 
 
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 | PROCEDURE | ROUTINE } routine_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
         | ALL { FUNCTIONS | PROCEDURES | ROUTINES } 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 ]
    
-- 連線schema許可權,授權cc訪問zjy schema許可權
grant usage on schema zjy to cc;
 
 
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 ]
    
where role_specification can be:
    [ GROUP ] role_name
  | PUBLIC
  | CURRENT_USER
  | SESSION_USER
  
  
GRANT role_name [, ...] TO role_name [, ...] [ WITH ADMIN OPTION ]
 
-- 把zjy使用者的許可權授予使用者cc。
grant zjy to cc;

撤銷許可權

REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | DELETE | TRUNCATE | REFERENCES | TRIGGER }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { [ TABLE ] table_name [, ...]
         | ALL TABLES IN SCHEMA schema_name [, ...] }
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
    
-- 移除使用者zjy在schema zjy上所有表的select許可權
revoke select on all tables in schema zjy from zjy;
 
 
REVOKE [ GRANT OPTION FOR ]
    { { SELECT | INSERT | UPDATE | REFERENCES } ( column_name [, ...] )
    [, ...] | ALL [ PRIVILEGES ] ( column_name [, ...] ) }
    ON [ TABLE ] table_name [, ...]
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
    
-- 移除使用者zjy在zjy schema的zjy表的age列的查詢許可權
revoke select (age) on zjy.zjy from zjy;
 
 
-- 序列
REVOKE [ GRANT OPTION FOR ]
    { { USAGE | SELECT | UPDATE }
    [, ...] | ALL [ PRIVILEGES ] }
    ON { SEQUENCE sequence_name [, ...]
         | ALL SEQUENCES IN SCHEMA schema_name [, ...] }
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
    
    
-- 庫
REVOKE [ GRANT OPTION FOR ]
    { { CREATE | CONNECT | TEMPORARY | TEMP } [, ...] | ALL [ PRIVILEGES ] }
    ON DATABASE database_name [, ...]
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
    
    
REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON DOMAIN domain_name [, ...]
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT]
    
    
REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN DATA WRAPPER fdw_name [, ...]
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT]
    
    
REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON FOREIGN SERVER server_name [, ...]
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT]
    
    
REVOKE [ GRANT OPTION FOR ]
    { EXECUTE | ALL [ PRIVILEGES ] }
    ON { { FUNCTION | PROCEDURE | ROUTINE } function_name [ ( [ [ argmode ] [ arg_name ] arg_type [, ...] ] ) ] [, ...]
         | ALL { FUNCTIONS | PROCEDURES | ROUTINES } IN SCHEMA schema_name [, ...] }
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
    
    
REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON LANGUAGE lang_name [, ...]
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
    
    
REVOKE [ GRANT OPTION FOR ]
    { { SELECT | UPDATE } [, ...] | ALL [ PRIVILEGES ] }
    ON LARGE OBJECT loid [, ...]
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
    
    
-- schema許可權
REVOKE [ GRANT OPTION FOR ]
    { { CREATE | USAGE } [, ...] | ALL [ PRIVILEGES ] }
    ON SCHEMA schema_name [, ...]
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
    
    
REVOKE [ GRANT OPTION FOR ]
    { CREATE | ALL [ PRIVILEGES ] }
    ON TABLESPACE tablespace_name [, ...]
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
    
    
REVOKE [ GRANT OPTION FOR ]
    { USAGE | ALL [ PRIVILEGES ] }
    ON TYPE type_name [, ...]
    FROM { [ GROUP ] role_name | PUBLIC } [, ...]
    [ CASCADE | RESTRICT ]
    
    
REVOKE [ ADMIN OPTION FOR ]
    role_name [, ...] FROM role_name [, ...]
    [ CASCADE | RESTRICT ]

注意:任何使用者對public的schema都有all的許可權,為了安全可以禁止使用者對public schema

-- 移除所有使用者(public),superuser 除外,對指定 DB 下的 public schema 的 create 許可權。
zjy=# revoke create on schema public from public;
REVOKE

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

相關文章