2025年9月25日: PostgreSQL 18 发布!
支持的版本: 当前 (18) / 17 / 16 / 15 / 14 / 13
开发版本: devel
不支持的版本: 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;

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

为了引导数据库系统,一个 freshly initialized 的系统总是包含一个预定义的、具有登录能力的角色。这个角色始终是 超级用户,它将拥有与使用 initdb 初始化数据库集群的操作系统用户相同的名称,除非指定了不同的名称。这个角色通常命名为 postgres。要创建更多角色,您必须首先以这个初始角色登录。

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

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

提交更正

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