Как запретить пользователю просматривать другие базы данных и таблицы из других баз данных?
Я хочу создать пользователя postgres, который может иметь доступ только к одной базе данных на сервере postgres.
В настоящее время мой поток:
create database database1;
create user user1 with password 'pass';
grant all privileges on database database1 to user1;
но user1 все еще может видеть список dbs, пользователей, таблиц и т.д. Есть ли способ предотвратить просмотр этого пользователя? Пользователь должен иметь возможность писать и читать с этого db.
Большое спасибо.
Ответы
Ответ 1
Каждый пользователь может видеть другие перечисленные базы данных и роли, но не должен видеть таблицы в других базах данных.
Если вы отмените привилегию CONNECT для всех баз данных, кроме выделенного, пользователь не сможет получить доступ к содержимому других баз данных.
Роли и имена баз данных глобальны и не могут быть легко блокируемыми. Вы можете попробовать предложение Фрэнка Хейкенса о выборочных отзывах на системных таблицах, но вы рискуете сделать это. Разработчики PostgreSQL в списках рассылки usenet не поощряют доступ к системным каталогам.
Psql, среди других инструментов, предполагает, что они будут доступны и плохо работают без них.
Почему знание имен других баз данных и ролей так плохо?
Ответ 2
ЗАВЕРШИТЕ разрешения SELECT information_schema и некоторые разделы в системный каталог.
Ответ 3
По умолчанию любые созданные вами объекты создаются в общедоступной схеме. Кроме того, у всех пользователей, которые вы создали, есть привилегии CREATE и USGE в общедоступной схеме. Вы должны отменить CREATE и ИСПОЛЬЗОВАНИЕ для общедоступной схемы для этого пользователя или изменить уровень доступа по умолчанию. Вам также потребуется переместить базу данных, к которой этот пользователь имеет доступ к пользовательской схеме, или схему, доступную для пользователя. См. Схемы DDL в руководстве Postgres.
Ответ 4
Вы можете легко запустить разные серверы PostgreSQL на одной машине (очевидно, на разных портах) - там не будет перекрестной видимости!