21.1. 数据库角色

数据库角色在概念上与 os 用户完全分开。实际上,维护对应关系可能很方便,但这不是必需的。数据库角色在数据库集群安装中是全局的(而不是每个数据库)。要创建角色,请使用CREATE ROLE SQL 命令:

CREATE ROLE name;
  • name *遵循 SQL 标识符的规则:不加修饰,不带特殊字符,或双引号。 (实际上,您通常希望向该命令添加其他选项,例如LOGIN.下面显示更多详细信息.)要删除现有角色,请使用类似的DROP ROLE命令:
DROP ROLE name;

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

createuser name
dropuser name

要确定一组现有角色,请检查pg_roles系统目录,例如

SELECT rolname FROM pg_roles;

psql程序的\du元命令对于列出现有角色也很有用。

为了引导数据库系统,新初始化的系统始终包含一个 sched 义角色。该角色始终是“超级用户”,默认情况下(除非在运行initdb时进行更改),它的名称与初始化数据库集群的 os 用户的名称相同。通常,此角色将命名为postgres。为了创建更多角色,您首先必须作为该初始角色进行连接。

到数据库服务器的每个连接都是使用某个特定角色的名称进行的,并且此角色确定在该 Connecting 发出的命令的初始访问特权。Client 端以特定于应用程序的方式启动连接请求,以指示用于特定数据库连接的角色名称。例如,psql程序使用-U命令行选项来指示要连接的角色。默认情况下,许多应用程序采用当前 os 用户的名称(包括createuserpsql)。因此,维护角色和 os 用户之间的命名对应关系通常很方便。

给定 Client 端连接可以连接的数据库角色集,具体取决于 Client 端身份验证设置,如Chapter 20中所述。 (因此,Client 端的连接角色不限于与 os 用户匹配的对象,就像人的登录名不需要与他或她的真实姓名匹配一样.)由于角色标识确定了连接的 Client 端可用的特权集,在设置多用户环境时,仔细配置特权很重要。