# 22.1.数据库角色

数据库角色在概念上与操作系统用户完全分离。实际上,保持通信可能很方便,但这不是必需的。数据库角色在数据库集群安装中是全局的(而不是每个数据库)。要创建角色,请使用创建角色SQL命令:

CREATE ROLE name;

*名称*遵循SQL标识符的规则:要么不带特殊字符,要么带双引号。(在实践中,通常需要添加其他选项,例如登录,服从命令。更多细节见下文。)要删除现有角色,请使用类似的放弃角色命令:

DROP ROLE name;

为了方便起见,这些程序createuserdropuser是围绕以下SQL命令提供的包装,这些命令可以从shell命令行调用:

createuser name
dropuser name

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

SELECT rolname FROM pg_roles;

这个psql节目\杜meta命令还可用于列出现有角色。

为了引导数据库系统,新初始化的系统总是包含一个预定义的角色。此角色始终是“超级用户”,默认情况下(除非在运行时更改)initdb)它将与初始化数据库集群的操作系统用户同名。按照惯例,这个角色将被命名为博士后.为了创建更多角色,您首先必须作为初始角色进行连接。

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

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