Redrock Postgres 搜索 英文
版本: 9.3 / 9.4 / 9.5 / 9.6 / 10 / 11 / 12 / 13 / 14 / 15 / 16

22.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)。因此,在角色和操作系统用户之间保持命名对应关系通常很方便。

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