在所有上下文中都禁止 AWS RDS PostgreSQL 访问 pg_catalog.pg_authid?

AWS RDS PostgreSQL access to pg_catalog.pg_authid forbidden in all contexts?

PostgreSQL said: permission denied for relation pg_authid

由于 RDS 锁定了 super 角色,pg_authid 是否在所有上下文中都无法在 AWS RDS 上使用?我的角色创建了 table,所以如果我正确阅读 psql 文档,pg_catalog 应该默认出现(并且不需要添加到搜索路径)。只需要SELECT,不需要创造能力。

无法找到明确的 AWS RDS 文档页面,其中显示 pg_catalog.pg_authid 在任何情况下都是不允许的,但我继承了一个依赖于能够形成的文档项目查询并加入我刚创建的数据库中的 pg_authid table。我总是被拒绝上述权限。

尝试添加 postgres 角色并将其交给我自己,并明确将数据库添加到我的搜索路径,但无济于事。

目录 pg_authid 包含有关数据库授权标识符(角色)的信息。您可能已经知道,由于 RDS 作为服务的托管性质,不幸的是,在 RDS 中不可能拥有完整的超级用户角色。

不幸的是,由于上面提到的是 RDS 的限制,如果访问 'pg_authid' 是执行您的业务所必需的,我建议您寻找 EC2 托管的 Postgres(社区 Postgres)作为一个选项.查看 'pg_authid' 内容的解决方法是使用 'pg_roles',但密码被屏蔽并且不会告诉您它是否加密。

请注意,并非所有目录都限制在 RDS 上读取,下面的 SQL 查询显示了 rds_superuser/master 用户对每个目录的权限。

SELECT relname, has_table_privilege('rds_superuser',relname,'SELECT') as SELECT,has_table_privilege('rds_superuser',relname,'UPDATE') as UPDATE,has_table_privilege('rds_superuser',relname,'INSERT') as INSERT,has_table_privilege('rds_superuser',relname,'TRUNCATE') as TRUNCATE FROM pg_class c , pg_namespace n where n.oid = c.relnamespace  and n.nspname in ('pg_catalog')  and relkind='r';