On this page
21.2. 角色属性
数据库角色可以具有许多属性,这些属性定义其特权并与 Client 端身份验证系统进行交互。
CREATE ROLE name LOGIN;
CREATE USER name;
(CREATE USER
等效于CREATE ROLE
,但CREATE USER
默认为LOGIN
,而CREATE ROLE
则不.)
-
- 数据库超级用户会跳过所有权限检查(登录权除外)。这是一种危险的特权,不应粗心使用;否则,将被禁用。最好以不是超级用户的角色来完成大部分工作。要创建新的数据库超级用户,请使用
CREATE ROLE name SUPERUSER
。您必须以已经是超级用户的角色来执行此操作。
- 数据库超级用户会跳过所有权限检查(登录权除外)。这是一种危险的特权,不应粗心使用;否则,将被禁用。最好以不是超级用户的角色来完成大部分工作。要创建新的数据库超级用户,请使用
-
- 必须明确授予角色创建数据库的权限(超级用户除外,因为超级用户会绕过所有权限检查)。要创建这样的角色,请使用
CREATE ROLE name CREATEDB
。
- 必须明确授予角色创建数据库的权限(超级用户除外,因为超级用户会绕过所有权限检查)。要创建这样的角色,请使用
-
- 必须为角色明确授予创建更多角色的权限(超级用户除外,因为超级用户会绕过所有权限检查)。要创建这样的角色,请使用
CREATE ROLE name CREATEROLE
。具有CREATEROLE
特权的角色也可以更改和删除其他角色,以及授予或撤消其中的成员资格。但是,要创建,更改,删除或更改超级用户角色的成员身份,则需要超级用户状态。CREATEROLE
还不够。
- 必须为角色明确授予创建更多角色的权限(超级用户除外,因为超级用户会绕过所有权限检查)。要创建这样的角色,请使用
-
- 必须明确授予角色启动流复制的权限(超级用户除外,因为超级用户会绕过所有权限检查)。用于流复制的角色也必须具有
LOGIN
权限。要创建这样的角色,请使用CREATE ROLE name REPLICATION LOGIN
。
- 必须明确授予角色启动流复制的权限(超级用户除外,因为超级用户会绕过所有权限检查)。用于流复制的角色也必须具有
-
- 仅当 Client 端身份验证方法要求用户在连接数据库时提供密码时,密码才有意义。
password
和md5
身份验证方法使用密码。数据库密码与 os 密码是分开的。使用CREATE ROLE name PASSWORD 'string'
创建角色时指定密码。
- 仅当 Client 端身份验证方法要求用户在连接数据库时提供密码时,密码才有意义。
可以使用ALTER ROLE
创建角色后修改其属性。 有关详细信息,请参见CREATE ROLE和ALTER ROLE命令的参考页。
Tip
优良作法是创建一个具有CREATEDB
和CREATEROLE
特权但不是超级用户的角色,然后将此角色用于数据库和角色的所有常规 Management。这种方法避免了以超级用户身份执行不需要 true 执行任务的危险。
对于Chapter 19中描述的许多运行时配置设置,角色还可以具有特定于角色的默认设置。例如,如果由于某种原因您想在每次连接时禁用索引扫描(提示:不是一个好主意),则可以使用:
ALTER ROLE myname SET enable_indexscan TO off;
这将保存设置(但不会立即设置)。在通过此角色进行的后续 Connecting,将好像在会话开始之前已执行SET enable_indexscan TO off
一样。您仍然可以在会话期间更改此设置;它只是默认值。要删除特定于角色的默认设置,请使用ALTER ROLE rolename RESET varname
。请注意,附加到不具有LOGIN
特权的角色的特定于角色的默认值是相当无用的,因为它们将永远不会被调用。