Подтвердить что ты не робот

Как запретить пользователю просматривать другие базы данных и таблицы из других баз данных?

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

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

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

но user1 все еще может видеть список dbs, пользователей, таблиц и т.д. Есть ли способ предотвратить просмотр этого пользователя? Пользователь должен иметь возможность писать и читать с этого db.

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

4b9b3361

Ответ 1

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

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

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

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

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

Ответ 3

По умолчанию любые созданные вами объекты создаются в общедоступной схеме. Кроме того, у всех пользователей, которые вы создали, есть привилегии CREATE и USGE в общедоступной схеме. Вы должны отменить CREATE и ИСПОЛЬЗОВАНИЕ для общедоступной схемы для этого пользователя или изменить уровень доступа по умолчанию. Вам также потребуется переместить базу данных, к которой этот пользователь имеет доступ к пользовательской схеме, или схему, доступную для пользователя. См. Схемы DDL в руководстве Postgres.

Ответ 4

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