使用此命令,可以增加權限或限制其權限。如果連線使用者角色具有 INHERITS 屬性,則它自動擁有它可以設定為 ROLE 的每個角色所有權限;在這種情況下,SET ROLE 有效地刪除了直接分配給連線使用者以及它所屬的其他角色的所有權限,只留下指定角色可用的權限。另一方面,如果連線使用者角色具有 NOINHERITS 屬性,則 SET ROLE 將刪除直接分配給連線使用者的權限,而是獲取指定角色可用的權限。
特別是,當超級使用者選擇將 SET ROLE 設定為非超級使用者角色時,他們將失去超級使用者權限。
SET ROLE 具有與 SET SESSION AUTHORIZATION 相當的效果,但涉及的權限檢查完全不同。此外,SET SESSION AUTHORIZATION 決定哪些角色可用於以後的 SET ROLE命令,而使用 SET ROLE 變更角色不會更改允許用於以後的 SET ROLE 的角色集合。
SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
peter | peter
SET ROLE 'paul';
SELECT SESSION_USER, CURRENT_USER;
session_user | current_user
--------------+--------------
peter | paul