用途:在规划 PostgreSQL 权限模型、决定授予哪些角色属性,或在安全审查前审计现有权限时使用。绝不用于行级过滤策略(见 postgres-core-rls-policies)、pg_hba.conf 与连接认证(见 postgres-errors-connection-auth)、静态加密与列级加密,或 password_encryption、ssl 等配置项。
核心概念:PostgreSQL 只有一种身份原语——角色,没有独立的 user 或 group。CREATE USER 除隐含 LOGIN 默认值外与 CREATE ROLE 相同。角色携带 LOGIN、SUPERUSER、CREATEDB、CREATEROLE、INHERIT、REPLICATION、BYPASSRLS、CONNECTION LIMIT、PASSWORD、VALID UNTIL 等属性,并可成为其他角色的成员,形成有向图。对象权限按对象类别通过 GRANT 授予:TABLE、SEQUENCE、DATABASE、SCHEMA、FUNCTION、TYPE、LANGUAGE、DOMAIN、FOREIGN SERVER、TABLESPACE、LARGE OBJECT、PARAMETER。两套授权体系并存:角色成员关系(GRANT app_reader TO alice)决定会话可通过 SET ROLE 扮演哪些角色及继承哪些权限;对象权限(GRANT SELECT ON TABLE orders TO app_reader)决定角色能对对象做什么。ALTER DEFAULT PRIVILEGES 是独立命令,只预登记尚不存在的对象权限,不会追溯授予已有对象。
主要能力:内置十五个预定义角色,可在不授予 SUPERUSER 的前提下委派运维权限,包括 pg_read_all_data、pg_write_all_data、pg_read_all_settings、pg_read_all_stats、pg_stat_scan_tables、pg_monitor、pg_database_owner、pg_signal_backend、pg_read_server_files、pg_write_server_files、pg_execute_server_program、pg_checkpoint、pg_maintain(v17+)、pg_use_reserved_connections(v16+)、pg_create_subscription(v16+)。v16 重写了角色成员语义:GRANT role TO member 支持显式 WITH ADMIN | INHERIT | SET { TRUE | FALSE } 选项,成员不再自动管理自身。
使用方式:资料给出最小权限应用用户(owner / app / reader 三角色分离)、撤销 public 模式写权限、用预定义角色替代 SUPERUSER、v16 显式成员选项、列级授权与视图等模式,并提示权限来源可通过 information_schema.role_table_grants、pg_auth_members、pg_tables、pg_roles 等目录查询。
限制:行级安全策略不在本技能范围内;pg_read_all_data 不设置 BYPASSRLS,如确实需要绕过策略须显式授予 BYPASSRLS。按模式设置的默认权限只能追加到全局默认之上,无法移除全局授予的默认值。