Доступ AWS RDS PostgreSQL к pg_catalog.pg_authid запрещен во всех контекстах?

#amazon-rds #postgresql-9.6

#amazon-rds #postgresql-9.6

Вопрос:

 PostgreSQL said: permission denied for relation pg_authid
  

pg_authid Просто недоступен на AWS RDS во всех контекстах из-за того, что RDS блокирует super роль? Моя роль создала таблицу, поэтому pg_catalog она должна отображаться по умолчанию (и ее не нужно добавлять в путь поиска), если я правильно читаю документы psql. Просто нужна SELECT , а не возможность создания.

Не удалось найти страницу документации AWS RDS, где говорится, что pg_catalog.pg_authid это запрещено ни в каком контексте, но я унаследовал проект документации, который полагается на возможность формировать запросы и объединения в таблице pg_authid в БД, которую я только что создал. Я всегда получаю отказ в вышеуказанном разрешении.

Пытался добавить postgres роль и присвоить ее себе, а также явно добавить базу данных в мой путь поиска, но безрезультатно.

Ответ №1:

Каталог pg_authid содержит информацию об идентификаторах авторизации в базе данных (ролях). Как вы, возможно, знаете, из-за управляемого характера RDS как сервиса, к сожалению, невозможно иметь полную роль суперпользователя в RDS.

К сожалению, поскольку вышеупомянутое является ограничением для RDS, если доступ к ‘pg_authid’ крайне необходим для выполнения вашего бизнеса, я бы посоветовал вам поискать Postgres, размещенный на EC2 (community Postgres), в качестве опции. Обходной путь для просмотра содержимого ‘pg_authid’ заключается в использовании ‘pg_roles’, но пароли замаскированы и не скажут вам, зашифрован он или нет.

Пожалуйста, обратите внимание, что не все каталоги ограничены для чтения на RDS, ниже приведен SQL-запрос, который показывает привилегии rds_superuser / главного пользователя в каждом каталоге.

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