# 22.5.预定义角色

PostgreSQL提供了一组预定义的角色,可以访问特定的、通常需要的特权功能和信息。管理员(包括具有创建角色特权)可以授予将这些角色分配给用户和/或其环境中的其他角色,为这些用户提供对指定功能和信息的访问。

中介绍了预定义的角色表22.1。请注意,未来随着附加功能的增加,每个角色的特定权限可能会发生变化。管理员应监控发行说明中的更改。

表22.1.预定义角色

角色 允许访问
pg_阅读_全部的_数据 读取所有数据(表、视图、序列),就像选择对这些对象的权限,以及对所有模式的使用权限,即使没有明确的权限。此角色没有角色属性绕过RLS设置如果正在使用RLS,管理员可能希望设置绕过RLS在授予此角色的角色上。
皮克_写_全部_数据 写入所有数据(表、视图、序列),就好像拥有插入,更新, 和删除这些对象的权限,以及所有模式的 USAGE 权限,即使没有明确地拥有它。此角色没有角色属性旁路放。如果正在使用 RLS,管理员可能希望设置旁路授予此角色的角色。
皮克_读_全部_设置 读取所有配置变量,甚至那些通常只对超级用户可见的变量。
皮克_读_全部_统计数据 阅读所有 pg_统计_*查看和使用各种统计相关的扩展,即使是那些通常只对超级用户可见的扩展。
皮克_统计_扫描_表 执行可能需要的监控功能访问共享锁定表,可能会持续很长时间。
皮克_监视器 读取/执行各种监控视图和功能。该角色是pg_read_all_settings,pg_read_all_statspg_stat_scan_tables.
皮克_数据库_所有者 没有。成员资格隐含地由当前数据库所有者组成。
皮克_信号_后端 向另一个后端发出信号以取消查询或终止其会话。
皮克_读_服务器_文件 允许从数据库可以使用 COPY 和其他文件访问功能在服务器上访问的任何位置读取文件。
皮克_写_服务器_文件 允许写入数据库可以使用 COPY 和其他文件访问功能在服务器上访问的任何位置的文件。
皮克_执行_服务器_程序 允许以用户身份在数据库服务器上执行程序,数据库以 COPY 和其他允许执行服务器端程序的功能运行。

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

这个pg_数据库_所有者角色有一个隐式的、依赖于情况的成员,即当前数据库的所有者。这个角色一开始没有权利。与任何角色一样,它可以拥有对象或获得访问权限。因此,一次pg_数据库_所有者在模板数据库中拥有权限,则从该模板实例化的数据库的每个所有者都将行使这些权限。pg_数据库_所有者不能是任何角色的成员,也不能有非隐式成员。

这个pg_信号_后端角色旨在允许管理员允许受信任但非超级用户的角色向其他后端发送信号。目前,该角色允许发送信号,以取消另一个后端上的查询或终止其会话。但是,被授予此角色的用户不能向超级用户拥有的后端发送信号。看见第9.27.2节.

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

授予这些角色时应注意确保它们仅在需要时使用,并理解这些角色授予访问特权信息的权限。

管理员可以使用授予命令,例如:

GRANT pg_signal_backend TO admin_user;