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