21.2. 角色属性

数据库角色可以具有许多属性,这些属性定义其特权并与 Client 端身份验证系统进行交互。

  • login privilege

    • 只有具有LOGIN属性的角色才能用作数据库连接的初始角色名称。具有LOGIN属性的角色可以被视为与“数据库用户”相同。要创建具有登录特权的角色,请使用以下任一方法:
CREATE ROLE name LOGIN;
CREATE USER name;

(CREATE USER等效于CREATE ROLE,但CREATE USER默认包含LOGIN,而CREATE ROLE不包含.)

  • superuser status

    • 数据库超级用户会跳过所有权限检查(登录权除外)。这是一种危险的特权,不应粗心使用;否则,将被禁用。最好以不是超级用户的角色来完成大部分工作。要创建新的数据库超级用户,请使用CREATE ROLE name SUPERUSER。您必须以已经是超级用户的角色来执行此操作。
  • database creation

    • 必须明确授予角色创建数据库的权限(超级用户除外,因为超级用户会绕过所有权限检查)。要创建这样的角色,请使用CREATE ROLE name CREATEDB
  • role creation

    • 必须为角色明确授予创建更多角色的权限(超级用户除外,因为超级用户会绕过所有权限检查)。要创建这样的角色,请使用CREATE ROLE name CREATEROLE。具有CREATEROLE特权的角色也可以更改和删除其他角色,以及授予或撤消其中的成员资格。但是,要创建,更改,删除或更改超级用户角色的成员身份,则需要超级用户状态。 CREATEROLE还不够。
  • initiating replication

    • 必须明确授予角色启动流复制的权限(超级用户除外,因为超级用户会绕过所有权限检查)。用于流复制的角色也必须具有LOGIN权限。要创建这样的角色,请使用CREATE ROLE name REPLICATION LOGIN
  • password

    • 仅当 Client 端身份验证方法要求用户在连接数据库时提供密码时,密码才有意义。 passwordmd5身份验证方法使用密码。数据库密码与 os 密码是分开的。使用CREATE ROLE name PASSWORD 'string'创建角色时指定密码。

可以使用ALTER ROLE创建角色后修改其属性。 有关详细信息,请参见CREATE ROLEALTER ROLE命令的参考页。

Tip

优良作法是创建一个具有CREATEDBCREATEROLE特权但不是超级用户的角色,然后将此角色用于数据库和角色的所有常规 Management。这种方法避免了以超级用户身份执行不需要 true 执行任务的危险。

对于Chapter 19中描述的许多运行时配置设置,角色还可以具有特定于角色的默认设置。例如,如果由于某种原因您想在每次连接时禁用索引扫描(提示:不是一个好主意),则可以使用:

ALTER ROLE myname SET enable_indexscan TO off;

这将保存设置(但不会立即设置)。在通过此角色进行的后续 Connecting,将好像在会话开始之前已执行SET enable_indexscan TO off一样。您仍然可以在会话期间更改此设置;它只是默认值。要删除特定于角色的默认设置,请使用ALTER ROLE rolename RESET varname。请注意,附加到不具有LOGIN特权的角色的特定于角色的默认值是相当无用的,因为它们将永远不会被调用。