PostgreSQL 提供了一组预定义角色,这些角色提供对某些常用的特权功能和信息的访问权限。管理员(包括具有 CREATEROLE
权限的角色)可以向其环境中的用户和/或其他角色 GRANT
这些角色,从而为这些用户提供对指定功能和信息的访问权限。
预定义角色在表 21.1中描述。请注意,随着添加其他功能,每个角色的具体权限可能会在未来发生变化。管理员应监视发行说明以了解更改。
表 21.1. 预定义角色
角色 | 允许的访问 |
---|---|
pg_read_all_data | 读取所有数据(表、视图、序列),就像拥有这些对象的 SELECT 权限和所有模式的 USAGE 权限一样,即使没有显式声明。此角色没有设置 BYPASSRLS 角色属性。如果正在使用 RLS,则管理员可能希望在授予此角色的角色上设置 BYPASSRLS 。 |
pg_write_all_data | 写入所有数据(表、视图、序列),就像拥有这些对象的 INSERT 、UPDATE 和 DELETE 权限以及所有模式的 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_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 。 |
pg_monitor
、pg_read_all_settings
、pg_read_all_stats
和 pg_stat_scan_tables
角色旨在允许管理员轻松配置用于监视数据库服务器的角色。它们授予一组常见的特权,允许该角色读取通常仅限于超级用户的各种有用的配置设置、统计信息和其他系统信息。
pg_database_owner
角色有一个隐式的、取决于情况的成员,即当前数据库的所有者。与任何角色一样,它可以拥有对象或接收访问权限的授权。因此,一旦 pg_database_owner
在模板数据库中具有权限,从该模板实例化的每个数据库的所有者都将行使这些权限。pg_database_owner
不能是任何角色的成员,并且不能具有非隐式成员。最初,此角色拥有 public
模式,因此每个数据库所有者都管理该模式的本地使用。
pg_signal_backend
角色旨在允许管理员启用受信任但非超级用户的角色,以便向其他后端发送信号。目前,此角色允许发送信号以取消另一个后端上的查询或终止其会话。但是,被授予此角色的用户不能向超级用户拥有的后端发送信号。请参阅第 9.28.2 节。
pg_read_server_files
、pg_write_server_files
和 pg_execute_server_program
角色旨在允许管理员拥有受信任但非超级用户的角色,这些角色能够以数据库运行的用户身份访问文件并在数据库服务器上运行程序。由于这些角色能够访问服务器文件系统上的任何文件,因此它们在直接访问文件时绕过所有数据库级别的权限检查,并且可以用于获得超级用户级别的访问权限,因此在授予用户这些角色时应格外小心。
在授予这些角色时应谨慎,以确保它们仅在需要时使用,并且要理解这些角色授予对特权信息的访问权限。
管理员可以使用 GRANT
命令向用户授予对这些角色的访问权限,例如
GRANT pg_signal_backend TO admin_user;
如果您在文档中发现任何不正确、与您特定功能的体验不符或需要进一步说明的内容,请使用此表单报告文档问题。