为缺省角色定义和授予特权

DBA 还可以定义一个缺省角色以将该角色分配给特定数据库的单个用户或 PUBLIC 组。当用户与该数据库建立连接后,不需要用户发出 SET ROLE 语句,该角色将自动激活。在连接时,拥有缺省角色的每个用户都具有单独为该用户授予的访问特权以及缺省角色的特权。

对于给定用户,在给定时间内只有一个 CREATE ROLE 语句定义的角色可以生效。如果同时拥有缺省角色和一个或多个其它角色的用户使用 SET ROLE 语句使非缺省角色成为活动角色,那么仅授予缺省角色(不单独对用户,对 PUBLIC 或对新活动角色授予)的任何访问特权该用户将不再有效。同一用户可以发出 SET ROLE DEFAULT语句重新激活缺省角色,但该操作会禁用用户仅通过先前启用的非缺省角色而拥有的任何特权。

如果为用户和 PUBLIC 指定了不同的缺省角色,那么用户的缺省角色优先。

为缺省角色定义和授予特权:

  1. 使用 CREATE ROLE 语句在当前数据库中创建一个新角色。
  2. 使用 GRANT 语句将特权授予该角色。
  3. 使用以下语法将角色授予一个用户,并将该角色设置为缺省用户或 PUBLIC 角色:
    • GRANT DEFAULT ROLE rolename TO username;
    • GRANT DEFAULT ROLE rolename TO PUBLIC;
  4. 使用 REVOKE DEFAULT ROLE 语句取消缺省角色到用户的关联。
    限制: 只有 DBA 或数据库所有者才能移除该缺省角色。
  5. 使用 SET ROLE DEFAULT 语句将当前角色复位为缺省角色。