почему pg_restore работает с любым пользователем? - PullRequest
0 голосов
/ 10 мая 2018

Я создал пользователя в локальном экземпляре PostgreSQL, используя приведенную ниже команду

create role testuser with login password 'test' 

Затем я создал пустую базу данных и использовал pg_restore для восстановления резервной копии во вновь созданной базе данных, используя следующую команду

pg_restore -c -h 172.27.211.11 -U testuser -d abcd_test1  "E:\testbackup_20180509_2330.backup"

удивительно, резервная копия восстановлена. Означает ли это, что все пользователи имеют права на восстановление базы данных?

Есть ли способ предотвратить восстановление базы данных пользователем?

1 Ответ

0 голосов
/ 11 мая 2018

Если вы не дали testuser разрешение CREATE для abcd_test1, это может работать, только если все объекты в дампе находятся в схеме public.В противном случае вы получите ошибки, как только pg_restore попытается создать схемы.

То, что вы наблюдаете, вызвано двумя причинами:

  1. Каждая база данных имеет CONNECT разрешения для PUBLIC по умолчанию.

  2. схема public имеет CREATE разрешения для PUBLIC по умолчанию.

Поскольку PUBLIC - это псевдороль, к которой принадлежит каждый, testuser может подключаться и создавать объекты в схеме public.

Хорошей идеей является ограничение разрешений для каждой новой базы данных PostgreSQL:

REVOKE ALL ON DATABASE abcd_test1 FROM PUBLIC;
REVOKE CREATE ON SCHEMA public FROM PUBLIC;

Тогда вы можете раздавать разрешения более ограничительным образом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...