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

Bri*_*ian 4 amazon-rds postgresql-9.6

PostgreSQL said: permission denied for relation pg_authid
Run Code Online (Sandbox Code Playgroud)

pg_authid刚刚在锁定下来,因为RDS的所有情况对AWS RDS不可用super的角色?我的角色创建了表,所以pg_catalog如果我正确阅读 psql 文档,默认情况下应该会出现(并且不需要添加到搜索路径)。只是需要SELECT,而不是创造能力。

无法找到明确的 AWS RDS 文档页面,其中说pg_catalog.pg_authid在任何上下文中都不允许,但我继承了一个文档项目,该项目依赖于能够在数据库中的 pg_authid 表上形成查询和连接我刚刚创建。我总是得到上述许可被拒绝。

尝试添加一个postgres角色并将其提供给我自己,并将数据库显式添加到我的搜索路径中,但无济于事。

小智 7

目录 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';
Run Code Online (Sandbox Code Playgroud)