# 22.2.

角色属性

数据库角色可以有许多属性来定义其权限并与客户端身份验证系统交互。

登录权限只有具有登录属性可以用作数据库连接的初始角色名称。一个角色登录属性可以被认为与“数据库用户”相同。

CREATE ROLE name LOGIN;
CREATE USER name;

要创建具有登录权限的角色,请使用:(创建用户相当于创建角色除了那个创建用户包括登录默认情况下,而创建角色

才不是。)

超级用户状态数据库超级用户绕过所有权限检查,登录权限除外。这是一个危险的权限,不应随意使用;最好以非超级用户的身份完成大部分工作。要创建新的数据库超级用户,请使用创建角色 *姓名* 超级用户.您必须以已经是超级用户的角色执行此操作。

数据库创建

必须明确授予角色创建数据库的权限(超级用户除外,因为它们会绕过所有权限检查)。要创建这样的角色,请使用创建角色 *姓名* 创建数据库.

角色创建

必须明确授予角色创建更多角色的权限(超级用户除外,因为它们会绕过所有权限检查)。要创建这样的角色,请使用创建角色 *姓名* 创建者.一个角色创造者特权也可以更改和删除其他角色,以及授予或撤销其中的成员资格。但是,要创建、更改、删​​除或更改超级用户角色的成员资格,需要超级用户身份;创造者是不够的。

启动复制

必须明确授予角色启动流复制的权限(超级用户除外,因为它们绕过所有权限检查)。用于流式复制的角色必须具有登录许可也是如此。要创建这样的角色,请使用创建角色 *姓名* 复制登录.

密码

仅当客户端身份验证方法要求用户在连接到数据库时提供密码时,密码才有意义。这密码md5身份验证方法使用密码。数据库密码与操作系统密码是分开的。在创建角色时指定密码创建角色 *姓名* 密码 '*细绳*'.

角色的属性可以在创建后修改改变角色.请参阅参考页面创建角色改变角色有关详细信息的命令。

# 提示

创建一个具有创建数据库创造者权限,但不是超级用户,然后使用此角色对数据库和角色进行所有日常管理。这种方法避免了以超级用户身份操作并不真正需要它的任务的危险。

对于在第 20 章.例如,如果出于某种原因您想在连接时禁用索引扫描(提示:这不是一个好主意),您可以使用:

ALTER ROLE myname SET enable_indexscan TO off;

这将保存设置(但不会立即设置)。在此角色的后续连接中,它看起来好像将 enable_indexscan 设置为关闭已在会话开始前执行。您仍然可以在会话期间更改此设置;它只会是默认值。要删除特定于角色的默认设置,请使用改变角色 *角色名* 重置 *变量名*.请注意,附加到角色的特定于角色的默认值没有登录特权是相当无用的,因为它们永远不会被调用。