数据库角色在概念上与操作系统用户完全分离。在实践中,维护一个对应关系可能很方便,但这不是必需的。数据库角色在整个数据库集群安装中是全局的(而不是针对单独的数据库)。要创建一个角色,请使用 CREATE ROLE
SQL 命令
CREATE ROLE name
;
name
遵循 SQL 标识符的规则:要么不加修饰且不含特殊字符,要么使用双引号括起来。(在实践中,你通常会想要添加额外的选项,比如 LOGIN
,到该命令中。更多细节在下面给出。)要删除一个已存在的角色,请使用类似的 DROP ROLE
命令
DROP ROLE name
;
为了方便起见,提供了程序 createuser 和 dropuser 作为这些 SQL 命令的包装器,可以从 shell 命令行调用
createusername
dropusername
要确定现有角色的集合,请检查 pg_roles
系统目录,例如
SELECT rolname FROM pg_roles;
或者只查看那些可以登录的角色
SELECT rolname FROM pg_roles WHERE rolcanlogin;
psql 程序的 \du
元命令也对于列出已存在的角色非常有用。
为了引导数据库系统,一个新初始化的系统总是包含一个预定义的、可以登录的角色。这个角色始终是一个“超级用户”,并且它将具有与使用 initdb
初始化数据库集群的操作系统用户相同的名称,除非指定了不同的名称。这个角色通常名为 postgres
。为了创建更多角色,你必须首先以这个初始角色连接。
每个到数据库服务器的连接都是使用某个特定角色的名称进行的,并且这个角色决定了该连接中发出的命令的初始访问权限。用于特定数据库连接的角色名称由发起连接请求的客户端以应用程序特定的方式指示。例如,psql
程序使用 -U
命令行选项来指示连接时使用的角色。许多应用程序默认使用当前操作系统用户的名称(包括 createuser
和 psql
)。因此,维护角色和操作系统用户之间的命名对应关系通常很方便。
给定客户端连接可以连接为哪些数据库角色,这取决于客户端身份验证设置,如 第 20 章 中解释的那样。(因此,客户端不限于以与其操作系统用户匹配的角色连接,正如一个人的登录名不需要与其真实姓名匹配一样。)由于角色标识决定了连接的客户端可用的权限集,因此在设置多用户环境时仔细配置权限非常重要。
如果您在文档中发现任何不正确的内容,或者与您使用特定功能的体验不符,或者需要进一步澄清,请使用此表单报告文档问题。