↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16
开发中的版本: 19 / 20devel

21.1. 数据库角色 #

数据库角色在概念上与操作系统用户完全独立。实践中保持两者的对应关系可能比较方便,但这并非必需。数据库角色在整个数据库集簇安装范围内都是全局的(而不是每个单独数据库各自独立)。要创建一个角色,可使用 CREATE ROLE SQL 命令:

CREATE ROLE name;

name 遵循 SQL 标识符的规则:要么是不带特殊字符的普通标识符,要么用双引号括起。(在实际使用中,你通常会给该命令增加额外选项,例如 LOGIN。更多细节见后文。)要移除一个现有角色,可使用对应的 DROP ROLE 命令:

DROP ROLE name;

为了方便,提供了 createuser 和 dropuser 程序,作为这些 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 命令行选项来指明要以哪个角色连接。很多应用默认假定使用当前操作系统用户的名字(包括 createuser 和 psql)。因此,在角色名和操作系统用户名之间维护对应关系通常很方便。

某个客户端连接能够以哪些数据库角色进行连接,由客户端认证设置决定,如第 20 章中所述。(因此,客户端并不限于只能以与其操作系统用户匹配的角色连接,正如一个人的登录名不必与其真实姓名一致。)由于角色身份决定了已连接客户端可用的权限集合,所以在设置多用户环境时,仔细配置权限非常重要。

报告文档问题

阅读 上游文档. 通过 PostgreSQL 文档反馈表单.