将用户归拢为群组能够极大精简权限管理:只需将相关权限授予群组角色本身,群组内部的所有成员用户即可自动继承对应权限。在 PostgreSQL 中,通过创建一个代表群组的角色,随后将该群组的成员资格授予具体用户角色来实现这一机制。
创建组角色(通常不具备登录权限):
CREATE ROLE admin_staff;
随后将该组的成员资格授予具体用户:
GRANT admin_staff TO alice, bob;
也可以使用 REVOKE 撤销成员资格:
REVOKE admin_staff FROM bob;
如果一个成员角色具有 INHERIT 属性,它在执行普通查询时会自动直接行使群组角色的全部对象权限。此外,无论是否继承权限,成员角色都可以通过执行 SET ROLE 命令,在当前会话中将自身运行身份就地临时切换为群组角色身份:
SET ROLE admin_staff; SELECT current_user; RESET ROLE;