PostgreSQL 提供了一组预定义角色,这些角色提供了对某些常用的特权功能和信息的访问权限。 管理员(包括拥有 CREATEROLE
权限的角色)可以 GRANT
这些角色给用户或环境中的其他角色,从而为这些用户提供访问指定功能和信息的权限。
预定义角色在 表 21.1 中描述。 请注意,每个角色的具体权限可能会在将来随着功能的添加而更改。 管理员应监控发行说明以了解更改。
表 21.1. 预定义角色
角色 | 允许访问 |
---|---|
pg_read_all_data | 读取所有数据(表、视图、序列),就像拥有对这些对象的 SELECT 权限和对所有模式的 USAGE 权限一样,即使没有明确拥有它。 此角色没有设置角色属性 BYPASSRLS 。 如果使用 RLS,管理员可能希望在 GRANT 此角色的角色上设置 BYPASSRLS 。 |
pg_write_all_data | 写入所有数据(表、视图、序列),就像拥有对这些对象的 INSERT 、UPDATE 和 DELETE 权限和对所有模式的 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_settings 、pg_read_all_stats 和 pg_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 | 允许执行 VACUUM 、ANALYZE 、CLUSTER 、REFRESH MATERIALIZED VIEW 、REINDEX 和 LOCK TABLE 对所有关系,就像拥有对这些对象的 MAINTAIN 权限一样,即使没有明确拥有它。 |
pg_use_reserved_connections | 允许使用通过 reserved_connections 保留的连接插槽。 |
pg_create_subscription | 允许对数据库拥有 CREATE 权限的用户发出 CREATE SUBSCRIPTION 。 |
The pg_monitor
、pg_read_all_settings
、pg_read_all_stats
和 pg_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_files
、pg_write_server_files
和 pg_execute_server_program
角色旨在允许管理员拥有受信任但非超级用户的角色,这些角色能够以数据库运行用户的身份访问服务器上的文件并运行程序。 由于这些角色能够访问服务器文件系统上的任何文件,因此它们在直接访问文件时绕过了所有数据库级权限检查,并且可以用于获取超级用户级访问权限,因此在将这些角色授予用户时应格外小心。
在授予这些角色时应格外小心,以确保它们仅在需要的地方使用,并了解这些角色授予对特权信息的访问权限。
管理员可以使用 GRANT
命令将对这些角色的访问权限授予用户,例如
GRANT pg_signal_backend TO admin_user;
如果您在文档中看到任何不正确的内容,与您对特定功能的体验不符或需要进一步澄清,请使用 此表格 报告文档问题。