数据库角色在概念上完全独立于操作系统用户。在实践中,保持对应关系可能比较方便,但这并不是必需的。数据库角色在数据库集群(而不是每个单独的数据库)的整个范围内具有全局性。要创建角色,请使用 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
元命令对于列出现有角色也很有用。
为了引导数据库系统,一个新初始化的系统总是包含一个预定义的能够登录的角色。此角色始终是 “superuser”,并且它的名称与使用 initdb
初始化数据库集群的操作系统用户名称相同,除非另行指定了名称。此角色通常名为 postgres
。为了创建更多角色,您必须首先以该初始角色的身份连接。
到数据库服务器的每个连接都是使用某个特定角色的名称建立的,并且该角色确定在该连接中发出的命令的初始访问权限。用于特定数据库连接的角色名称由以应用程序特定方式发起连接请求的客户端指示。例如,psql
程序使用 -U
命令行选项来指示要以哪个角色身份进行连接。许多应用程序默认都认为当前操作系统的用户名称(包括 createuser
和 psql
)。因此,在角色和操作系统用户之间保持命名对应关系通常很方便。
特定客户端连接可连接的数据库角色集由客户端身份验证设置决定,如“第 20 章”所述。(因此,客户端不仅仅局限于以其操作系统用户匹配的角色进行连接,就像一个人的登录名不需要匹配他的或她的真实姓名一样。)由于角色身份确定了已连接客户端可用的权限集,因此在设置多用户环境时,仔细配置权限非常重要。