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

时间:2019-03-13 13:51:55

标签: amazon-rds postgresql-9.6

PostgreSQL said: permission denied for relation pg_authid

由于RDS锁定了pg_authid角色,super在所有上下文中是否仅在AWS RDS上不可用?我的角色创建了该表,因此,如果我正确地阅读了psql docs,那么pg_catalog应该默认出现(并且不需要添加到搜索路径中)。只需要SELECT,而不是创造能力。

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

试图添加一个postgres角色并将其分配给自己,并且还明确地将该数据库添加到我的搜索路径中,无济于事。

1 个答案:

答案 0 :(得分:0)

目录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';