选择 打开 改范围 完整检索页

pgsql.cc 提供对 postgresql.org 官网内容的中文翻译,由 Pigsty 团队维护。

受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
测试与开发版本: 19 / devel
不受支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0
历史版本PostgreSQL 9.1 已于 2016 年 10 月结束社区维护,本页译文保留供仍在使用旧版本的读者参考。新系统请看当前版本

20.2. 角色属性 #

数据库角色可以具有若干定义其权限的属性,这些属性还会与客户端认证系统交互。

登录权限

只有具有LOGIN属性的角色才能用作数据库连接的初始角色名。具有LOGIN属性的角色可以被视为与数据库用户等同。要创建具有登录权限的角色,可以使用:

CREATE ROLE name LOGIN;
CREATE USER name;

CREATE USER等价于CREATE ROLE,只是CREATE USER默认假定LOGIN,而CREATE ROLE不是。)

超级用户状态

数据库超级用户会绕过除登录权和发起复制权限之外的所有权限检查。这是一种危险的权限,不应草率使用;最好以非超级用户角色完成大部分工作。要创建新的数据库超级用户,使用CREATE ROLE name SUPERUSER。这必须由已经是超级用户的角色来执行。默认情况下,创建超级用户还会授予发起流复制的权限。为了提高安全性,可以使用CREATE ROLE name SUPERUSER NOREPLICATION 来禁止该权限。

创建数据库

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

创建角色

必须显式授予角色创建更多角色的权限(超级用户除外)。要创建这样的角色,使用CREATE ROLE name CREATEROLE。具有CREATEROLE权限的角色还可以修改和删除其他角色,以及授予或撤销其中的成员资格。但是,要创建、修改、删除超级用户角色或更改其成员资格,需要超级用户身份;仅CREATEROLE是不够的。

发起复制

必须显式地给一个角色授予发起流复制的权限。用于流复制的角色还必须具有 LOGIN 权限。要创建这样的角色,可使用 CREATE ROLE name REPLICATION LOGIN

密码

只有当客户端认证方法要求用户在连接数据库时提供密码时,密码才有意义。passwordmd5认证方法使用密码。数据库密码与操作系统密码是分开的。在创建角色时用CREATE ROLE name PASSWORD 'string'指定密码。

角色创建后,可以使用以下命令修改其属性: ALTER ROLE 详情请参见 CREATE ROLEALTER ROLE 命令的参考页。

提示

一种良好做法是创建具有CREATEDBCREATEROLE权限但不是超级用户的角色,然后使用此角色执行数据库和角色的所有日常管理工作。这种方法可以避免在实际上并不需要超级用户权限的任务中以超级用户身份操作所带来的风险。

角色还可以为第 18 章中描述的许多运行时配置设置指定角色特定默认值。例如,如果出于某种原因你希望每次连接时都禁用索引扫描(提示:这不是个好主意),你可以使用:

ALTER ROLE myname SET enable_indexscan TO off;

这会保存该设置(但不会立即生效)。在该角色后续建立的连接中,它看起来就像在会话开始之前执行了SET enable_indexscan TO off一样。你仍然可以在会话期间更改该设置;它只会作为默认值。要移除角色特定默认设置,使用ALTER ROLE rolename RESET varname。注意,附加到没有LOGIN权限的角色上的角色特定默认值几乎没有用,因为它们永远不会生效。

提交更正

译文有误、术语不当或页面显示问题,请到译文仓库 pgsty/pgdoc 报告译文问题。 英文原文本身的问题,请在当前版本的对应页面向上游反馈;上游不再修订已结束维护的版本。