2024年9月26日:PostgreSQL 17 发布!
支持的版本:当前 (17) / 16 / 15 / 14 / 13 / 12
开发版本:开发版
不支持的版本:11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2

21.1. 数据库角色 #

数据库角色在概念上与操作系统用户完全分离。在实践中,维护两者之间的对应关系可能很方便,但这并不是必需的。数据库角色在整个数据库集群安装中是全局的(而不是针对单个数据库)。要创建角色,请使用 CREATE ROLE SQL 命令

CREATE ROLE name;

name 遵循 SQL 标识符的规则:要么不加修饰且不包含特殊字符,要么用双引号括起来。(在实践中,您通常会希望向命令中添加其他选项,例如 LOGIN。更多详细信息见下文。)要删除现有角色,请使用类似的 DROP ROLE 命令

DROP ROLE name;

为了方便起见,提供了程序 createuserdropuser 作为这些 SQL 命令的包装器,可以从 shell 命令行调用它们

createuser name
dropuser name

要确定现有角色的集合,请检查 pg_roles 系统目录,例如

SELECT rolname FROM pg_roles;

或者仅查看那些能够登录的角色

SELECT rolname FROM pg_roles WHERE rolcanlogin;

psql 程序的 \du 元命令也用于列出现有角色。

为了引导数据库系统,新初始化的系统始终包含一个预定义的能够登录的角色。此角色始终是“超级用户”,并且其名称将与使用 initdb 初始化数据库集群的操作系统用户相同,除非指定了其他名称。此角色通常命名为 postgres。要创建更多角色,您首先必须以该初始角色的身份连接。

每个数据库服务器连接都是使用某个特定角色的名称进行的,并且此角色决定该连接中发出的命令的初始访问权限。用于特定数据库连接的角色名称由以应用程序特定方式发起连接请求的客户端指示。例如,psql 程序使用 -U 命令行选项指示要连接到的角色。许多应用程序默认情况下假设当前操作系统用户的名称(包括 createuserpsql)。因此,维护角色和操作系统用户之间的命名对应关系通常很方便。

给定客户端连接可以连接到的数据库角色集由客户端身份验证设置决定,如 第 20 章 中所述。(因此,客户端并不局限于连接到与其操作系统用户匹配的角色,就像一个人的登录名不必与其真实姓名匹配一样。)由于角色标识决定了连接的客户端可用的权限集,因此在设置多用户环境时,仔细配置权限非常重要。

提交更正

如果您在文档中发现任何不正确的内容,与您对特定功能的体验不符,或者需要进一步说明,请使用 此表单 报告文档问题。