Как запретить пользователю видеть другие базы данных и таблицы из других баз данных? - PullRequest
18 голосов
/ 28 июля 2010

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

В настоящее время мой поток:

create database database1;
create user user1 with password 'pass';
grant all privileges on database database1 to user1;

но user1 по-прежнему может видеть список БД, пользователей, таблиц и т. Д. Есть ли способ, чтобы этот пользователь не видел эту информацию? Пользователь должен иметь возможность писать и читать из этой базы данных.

Большое спасибо.

Ответы [ 4 ]

8 голосов
/ 29 июля 2010

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

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

Роли и имена баз данных являются глобальными и не могут быть легко заблокированы.Вы можете попробовать предложение Фрэнка Хайкенса о выборочных аннулировании системных таблиц, но вы рискуете сделать это.Разработчики PostgreSQL в списках рассылки usenet препятствуют доступу к системным каталогам.

Psql, среди прочих инструментов, предполагает, что они будут доступны и плохо работают без них.

Почему так плохо знать имена других баз данных и ролей?

2 голосов
/ 28 июля 2010

ОТМЕНИТЬ разрешения SELECT для information_schema и некоторых разделов системного каталога .

1 голос
/ 28 июля 2010

По умолчанию любые создаваемые вами объекты создаются в общедоступной схеме.Кроме того, все пользователи, которых вы создаете, имеют права CREATE и USAGE в общедоступной схеме.Вы должны отозвать CREATE и USAGE для общедоступной схемы для этого пользователя или изменить уровень доступа по умолчанию.Вам также необходимо переместить базу данных, к которой этот пользователь имеет доступ, в схему пользователя или в схему, доступную для пользователя.См. Схемы DDL в руководстве Postgres.

0 голосов
/ 13 апреля 2019

Вы можете легко запустить разные серверы PostgreSQL на одной машине (очевидно, на разных портах) - там не будет перекрестной видимости!

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