預設情況下,普通使用者沒有任何許可權。高許可權使用者(包括初始帳號)可以為普通使用者授予資料庫物件的操作許可權。
給使用者授權,可採用以下兩種方式:
為使用者授予資料庫物件的操作許可權。
基於角色為使用者授權。
此授權方式可簡化多個使用者的許可權管理操作。例如,當您需要將某個表的讀許可權授予多個使用者時,只要將表的讀許可權授予角色,再將角色授予多個使用者。
授予資料庫物件的操作許可權
當資料庫物件(庫,模式,表,視圖,序列,函數等)被建立時,所有許可權歸屬於該對象的建立者(Owner)。預設只有對象Owner和RDS_SUPERUSER有許可權操作該對象。當其他使用者需要相應許可權來操作該對象時,需要授權。
下表列出了每種對象的相應許可權。
資料庫物件 | 許可權 |
Tables,Views,Sequences | SELECT INSERT UPDATE DELETE RULE ALL |
Table Column | SELECT INSERT UPDATE |
External Tables | SELECT RULE ALL |
Databases | CONNECT CREATE TEMPORARY | TEMP ALL |
Functions | EXECUTE |
Procedural Languages | USAGE |
Schemas | CREATE USAGE ALL |
每種對象需要單獨授權。例如,對Database授予ALL許可權(GRANT ALL)並不代表可以訪問該Database內部的所有表,只是授予了對該Database的CONNECT、CREATE和TEMP許可權。
將表mytable的INSERT許可權授權給jsmith。樣本如下:
GRANT INSERT ON mytable TO jsmith;將myschema中所有表的SELECT、TRUNCATE許可權授權給jsmith。樣本如下:
GRANT SELECT,TRUNCATE ON ALL TABLES IN SCHEMA myschema TO jsmith;將表mytable col1列的SELECT許可權授權給jsmith。樣本如下:
GRANT SELECT (col1) on TABLE mytable TO jsmith;從jsmith回收表mytable的所有許可權。樣本如下:
REVOKE ALL PRIVILEGES ON mytable FROM jsmith;
基於角色的授權
基於角色為使用者授權,具體指建立角色,為角色授權,再將角色授予一個或多個使用者。完成後,使用者將繼承角色的所有許可權。下文以一個樣本介紹基於角色授權的完整過程。
建立一個擁有CREATEROLE和CREATEDB許可權的角色,名稱為admin。
CREATE ROLE admin CREATEROLE CREATEDB;將角色admin的成員資格授予使用者john、sally和bob。
GRANT admin TO john, sally, bob;移除使用者bob的角色admin成員資格。
REVOKE admin FROM bob;對角色admin授予資料庫物件的許可權。具有角色admin的使用者都將繼承該許可權。
GRANT ALL ON TABLE mytable TO admin;
GRANT ALL ON SCHEMA myschema TO admin;
GRANT ALL ON DATABASE mydb TO admin;常見問題
如何授予DROP TABLE許可權
刪除表的許可權無法通過GRANT命令授予使用者。但表或Schema的所有者(Owner)可以刪除表。
高許可權使用者、表或Schema的所有者,可以將表或Schema的所有者(Owner)變更為目標使用者,使目標使用者能夠刪除表。
-- 將表mytable的所有者變更為new_owner。new_owner可以刪除表mytable。
ALTER Table mytable OWNER TO new_owner;
-- 將myschema的所有者變更為new_owner。new_owner不僅可以刪除表mytable,還可以刪除myschema中的所有表。
ALTER SCHEMA myschema OWNER TO new_owner; 如果多個使用者都需要刪除同一張表的許可權,您可以利用角色許可權繼承的特性,將表或Schema的所有者(Owner)變更某個角色,再將這個角色授予多個使用者。
-- 建立一個角色new_role,用於下文的所有者變更。
CREATE ROLE new_role;
-- 將表mytable的所有者變更為new_role。new_role可以刪除表mytable。
ALTER Table mytable OWNER TO new_role;
-- 將myschema的所有者變更為new_role。new_role不僅可以刪除表mytable,還可以刪除myschema中的所有表。
ALTER SCHEMA myschema OWNER TO new_role;
-- 將使用者myuser添加為new_role的成員,繼承new_role的許可權。
GRANT new_role To myuser; 相關文檔
建立高許可權使用者和普通使用者,請參見建立和系統管理使用者。