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
角色并将其分配给自己,并且还明确地将该数据库添加到我的搜索路径中,无济于事。
答案 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';