PostgreSQL 提供了一组预定义的角色,这些角色提供对某些常用、特权和信息的访问。管理员(包括具有 CREATEROLE 权限的角色)可以在其环境中将这些角色 GRANT(授予)给用户和/或其他角色,从而为这些用户提供对指定能力和信息的访问权限。例如:
GRANT pg_signal_backend TO admin_user;
在授予这些角色时应谨慎,以确保它们仅在需要时使用,并了解这些角色授予对特权信息的访问权限。
下面将介绍预定义角色。请注意,随着附加功能的添加,每个角色的特定权限将来可能会发生变化。管理员应关注发行说明中的更改。
pg_checkpoint #pg_checkpoint 允许执行 CHECKPOINT 命令。
pg_create_subscription #pg_create_subscription 允许具有数据库 CREATE 权限的用户发出 CREATE SUBSCRIPTION。
pg_database_owner #pg_database_owner 始终只有一个隐式成员:当前数据库所有者。它不能被授予任何角色的成员资格,也没有任何角色可以被授予 pg_database_owner 的成员资格。但是,像任何其他角色一样,它可以拥有对象并接收访问权限的授予。因此,一旦 pg_database_owner 在模板数据库中拥有权限,则从该模板实例化的每个数据库的所有者都将拥有这些权限。最初,该角色拥有 public 模式,因此每个数据库所有者都负责本地使用该模式。
pg_maintain #pg_maintain 允许在所有关系上执行 VACUUM、ANALYZE、CLUSTER、REFRESH MATERIALIZED VIEW、REINDEX 和 LOCK TABLE,就好像对这些对象具有 MAINTAIN 权限一样。
pg_monitorpg_read_all_settingspg_read_all_statspg_stat_scan_tables #这些角色旨在让管理员能够轻松配置一个用于监控数据库服务器的角色。它们授予一组常用权限,允许角色读取各种有用的配置设置、统计信息以及通常只对超级用户可见的其他系统信息。
pg_monitor 允许读取/执行各种监控视图和函数。此角色是 pg_read_all_settings、pg_read_all_stats 和 pg_stat_scan_tables 的成员。
pg_read_all_settings 允许读取所有配置变量,即使是通常只对超级用户可见的变量。
pg_read_all_stats 允许读取所有 pg_stat_* 视图并使用各种统计信息相关扩展,即使是通常只对超级用户可见的。
pg_stat_scan_tables 允许执行监控函数,这些函数可能会对表持有 ACCESS SHARE 锁,可能持续很长时间(例如,pgrowlocks 扩展中的 pgrowlocks(text))。
pg_read_all_datapg_write_all_data #pg_read_all_data 允许读取所有数据(表、视图、序列),就好像对这些对象具有 SELECT 权限以及对所有模式都具有 USAGE 权限一样。此角色不会绕过行级安全 (RLS) 策略。如果正在使用 RLS,管理员可能希望为授予此角色的角色设置 BYPASSRLS。
pg_write_all_data 允许写入所有数据(表、视图、序列),就好像对这些对象具有 INSERT、UPDATE 和 DELETE 权限以及对所有模式都具有 USAGE 权限一样。此角色不会绕过行级安全 (RLS) 策略。如果正在使用 RLS,管理员可能希望为授予此角色的角色设置 BYPASSRLS。
pg_read_server_filespg_write_server_filespg_execute_server_program #这些角色旨在让管理员拥有受信任但非超级用户的角色,这些角色能够以数据库运行用户的身份访问服务器上的文件并运行程序。它们在直接访问文件时绕过所有数据库级别的权限检查,并且可能被用来获得超级用户级别的访问权限。因此,在将这些角色授予用户时应格外小心。
pg_read_server_files 允许使用 COPY 和其他文件访问函数从数据库可以访问的服务器上的任何位置读取文件。
pg_write_server_files 允许使用 COPY 和其他文件访问函数将数据写入数据库可以访问的服务器上的任何位置。
pg_execute_server_program 允许使用 COPY 和其他允许执行服务器端程序的函数,以数据库运行用户的身份在数据库服务器上执行程序。
pg_signal_autovacuum_worker #pg_signal_autovacuum_worker 允许向 autovacuum 工作进程发送信号,以取消当前表的 vacuum 或终止其会话。请参阅 9.28.2 节。
pg_signal_backend #pg_signal_backend 允许向另一个后端发送信号,以取消查询或终止其会话。请注意,此角色不允许向超级用户拥有的后端发送信号。请参阅 9.28.2 节。
pg_use_reserved_connections #pg_use_reserved_connections 允许使用通过 reserved_connections 保留的连接槽。