2024 年 9 月 26 日: PostgreSQL 17 发布!
支持版本:当前 (17) / 16 / 15 / 14
开发版本:devel

21.5. 预定义角色 #

PostgreSQL 提供了一组预定义角色,这些角色提供了对某些常用的特权功能和信息的访问权限。 管理员(包括拥有 CREATEROLE 权限的角色)可以 GRANT 这些角色给用户或环境中的其他角色,从而为这些用户提供访问指定功能和信息的权限。

预定义角色在 表 21.1 中描述。 请注意,每个角色的具体权限可能会在将来随着功能的添加而更改。 管理员应监控发行说明以了解更改。

表 21.1. 预定义角色

角色 允许访问
pg_read_all_data 读取所有数据(表、视图、序列),就像拥有对这些对象的 SELECT 权限和对所有模式的 USAGE 权限一样,即使没有明确拥有它。 此角色没有设置角色属性 BYPASSRLS。 如果使用 RLS,管理员可能希望在 GRANT 此角色的角色上设置 BYPASSRLS
pg_write_all_data 写入所有数据(表、视图、序列),就像拥有对这些对象的 INSERTUPDATEDELETE 权限和对所有模式的 USAGE 权限一样,即使没有明确拥有它。 此角色没有设置角色属性 BYPASSRLS。 如果使用 RLS,管理员可能希望在 GRANT 此角色的角色上设置 BYPASSRLS
pg_read_all_settings 读取所有配置变量,即使那些通常仅对超级用户可见的变量。
pg_read_all_stats 读取所有 pg_stat_* 视图并使用各种与统计相关的扩展,即使那些通常仅对超级用户可见的扩展。
pg_stat_scan_tables 执行可能在表上获取 ACCESS SHARE 锁的监视函数,这些锁可能持续很长时间。
pg_monitor 读取/执行各种监视视图和函数。 此角色是 pg_read_all_settingspg_read_all_statspg_stat_scan_tables 的成员。
pg_database_owner 无。 成员资格隐含地包含当前数据库所有者。
pg_signal_backend 向另一个后端发送信号以取消查询或终止其会话。
pg_read_server_files 允许使用 COPY 和其他文件访问函数从数据库可以在服务器上访问的任何位置读取文件。
pg_write_server_files 允许使用 COPY 和其他文件访问函数将文件写入数据库可以在服务器上访问的任何位置。
pg_execute_server_program 允许使用 COPY 和其他允许执行服务器端程序的函数,以数据库运行的用户身份在数据库服务器上执行程序。
pg_checkpoint 允许执行 CHECKPOINT 命令。
pg_maintain 允许执行 VACUUMANALYZECLUSTERREFRESH MATERIALIZED VIEWREINDEXLOCK TABLE 对所有关系,就像拥有对这些对象的 MAINTAIN 权限一样,即使没有明确拥有它。
pg_use_reserved_connections 允许使用通过 reserved_connections 保留的连接插槽。
pg_create_subscription 允许对数据库拥有 CREATE 权限的用户发出 CREATE SUBSCRIPTION

The pg_monitorpg_read_all_settingspg_read_all_statspg_stat_scan_tables 角色旨在允许管理员轻松配置一个角色,以用于监视数据库服务器。 它们授予一组通用权限,允许该角色读取通常仅限超级用户访问的各种有用的配置设置、统计信息和其他系统信息。

The pg_database_owner 角色有一个隐含的、情况依赖的成员,即当前数据库的所有者。 与任何角色一样,它可以拥有对象或接收访问权限的授予。 因此,一旦 pg_database_owner 在模板数据库中具有权限,从该模板实例化的每个数据库的所有者都将行使这些权限。 pg_database_owner 不能是任何角色的成员,也不能具有非隐式成员。 最初,此角色拥有 public 模式,因此每个数据库所有者都管理对模式的本地使用。

The pg_signal_backend 角色旨在允许管理员使受信任但非超级用户的角色能够向其他后端发送信号。 目前,此角色允许发送信号以取消另一个后端的查询或终止其会话。 但是,被授予此角色的用户无法向超级用户拥有的后端发送信号。 请参见 第 9.28.2 节

The pg_read_server_filespg_write_server_filespg_execute_server_program 角色旨在允许管理员拥有受信任但非超级用户的角色,这些角色能够以数据库运行用户的身份访问服务器上的文件并运行程序。 由于这些角色能够访问服务器文件系统上的任何文件,因此它们在直接访问文件时绕过了所有数据库级权限检查,并且可以用于获取超级用户级访问权限,因此在将这些角色授予用户时应格外小心。

在授予这些角色时应格外小心,以确保它们仅在需要的地方使用,并了解这些角色授予对特权信息的访问权限。

管理员可以使用 GRANT 命令将对这些角色的访问权限授予用户,例如

GRANT pg_signal_backend TO admin_user;

提交更正

如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符或需要进一步澄清,请使用 此表格 报告文档问题。