受支持版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发版本: devel

21.5. 预定义角色 #

PostgreSQL提供了一组预定义角色,这些角色提供对某些常见的、需要特权的能力和信息的访问。管理员(包括具有 CREATEROLE权限的角色)可以把这些角色GRANT给其环境中的用户和/或其他角色,从而让这些用户获得所指定的能力和信息。

预定义角色见Table 21.1。请注意,随着将来增加更多能力,各个角色的具体权限可能会发生变化。管理员应关注发行说明中的变更。

Table 21.1. 预定义角色

角色 允许的访问
pg_read_all_data 读取所有数据(表、视图、序列),其效果就像对这些对象拥有 SELECT 权限、并对所有模式拥有 USAGE 权限,即使并未显式授予这些权限。该角色没有设置 BYPASSRLS 角色属性。如果正在使用 RLS,管理员可能希望对被授予此角色的角色设置 BYPASSRLS
pg_write_all_data 写入所有数据(表、视图、序列),其效果就像对这些对象拥有 INSERTUPDATEDELETE 权限、并对所有模式拥有 USAGE 权限,即使并未显式授予这些权限。该角色没有设置 BYPASSRLS 角色属性。如果正在使用 RLS,管理员可能希望对被授予此角色的角色设置 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_monitorpg_read_all_settingspg_read_all_statspg_stat_scan_tables 这几个角色旨在让管理员更容易为监控数据库服务器配置一个角色。它们授予一组常见权限,使该角色能够读取各种有用的配置设置、统计信息以及其他通常仅限超级用户查看的系统信息。

pg_database_owner 角色有一个隐式的、依赖于具体场景的成员,也就是当前数据库的拥有者。和任何角色一样,它可以拥有对象,也可以接收访问权限授予。因此,一旦 pg_database_owner 在某个模板数据库中拥有权限,由该模板实例化出的每个数据库的拥有者都会行使这些权限。pg_database_owner 不能成为任何角色的成员,也不能拥有非隐式成员。最初,这个角色拥有 public 模式,因此每个数据库拥有者都管理该模式在本数据库中的使用。

pg_signal_backend 角色旨在允许管理员启用受信任但非超级用户的角色,以便向其他后端发送信号。当前,这个角色允许发送用于取消其他后端查询或终止其会话的信号。不过,被授予此角色的用户不能向超级用户拥有的后端发送信号。见 Section 9.27.2

pg_read_server_filespg_write_server_filespg_execute_server_program 角色旨在允许管理员使用受信任但非超级用户的角色,使其能够以数据库运行所用的操作系统用户身份访问文件并在数据库服务器上运行程序。由于这些角色能够访问服务器文件系统上的任意文件,因此在直接访问文件时会绕过所有数据库级权限检查,而且它们可能被用来获取超级用户级别的访问权限,所以向用户授予这些角色时必须非常谨慎。

授予这些角色时应当谨慎,确保它们只在需要的地方使用,并且明确理解这些角色会授予对特权信息的访问。

管理员可以使用 GRANT 命令把这些角色授予用户,例如:

GRANT pg_signal_backend TO admin_user;

提交更正

如果您发现文档中有不正确的内容、与您使用特定功能的经验不符或需要进一步说明,请使用此表单来报告文档问题。