Отменить доступ к базе данных postgres для роли

Я создал отдельную роль «newrole» и новую схему «newschema» для определенного пользователя, который должен выполнять только некоторые сохраненные функции. Мне удалось отозвать доступ к схеме "public" для текущей базы данных.

Войдя в систему как "newrole", у меня все еще есть доступ к базе данных postgres, например:

SELECT * FROM pg_user

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

REVOKE ALL ON DATABASE postgres FROM newrole

После входа в систему как newrole я все еще могу читать базу данных postgres.

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

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

TIA,


person sibert    schedule 26.03.2016    source источник
comment
Какого пользователя вы хотите удалить? Все пользователи?   -  person Trevor Clarke    schedule 26.03.2016
comment
Только новая роль. Обычные пользователи не имеют прямого доступа к базе данных и иногда нуждаются в доступе к базе данных postgres по другим причинам.   -  person sibert    schedule 26.03.2016
comment
Я считаю, что необходимо указать привилегию подключения, попробуйте REVOKE connect ON DATABASE [dbname] FROM public   -  person Lucas    schedule 26.03.2016


Ответы (2)


Эта проблема не имеет ничего общего с базой данных postgres. Вместо этого вы хотите управлять каталогом текущей базы данных. Каждая база данных имеет каталог информации обо всех объектах в схеме pg_catalog и в форме, соответствующей стандартам, в схеме information_schema, поэтому вам следует ограничить доступ только для той роли, о которой идет речь, а также для роли public, потому что каждая роль также является ее членом. роль:

REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM newrole;
REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM public;
REVOKE ALL PRIVILEGES ON SCHEMA information_schema FROM newrole;
REVOKE ALL PRIVILEGES ON SCHEMA information_schema FROM public;

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

В общем, вы не хотите возиться с каталогами, если вы действительно не знаете, что делаете.

person Patrick    schedule 26.03.2016
comment
Спасибо за ваше объяснение. Но новая роль по-прежнему может получить доступ к pg_users и т. Д. Нет ли способа скрыть конфиденциальную информацию (например, многопользовательская среда)? - person sibert; 26.03.2016

вы должны иметь возможность запустить это:

select *  FROM information_schema.table_privileges where grantee = 'newrole';

чтобы отобразить все привилегии для новой роли. Имея эту информацию, вы должны иметь возможность явно отозвать все, кроме доступа к «новостной схеме».

person scottjustin5000    schedule 26.03.2016
comment
@sibert Я удалил свой ответ, потому что не знаю, что делаю ... Извините, если вы выполнили мою команду, и это вызвало какие-либо проблемы. Удачи тебе с твоим проектом - person Trevor Clarke; 26.03.2016
comment
Почему-то в table_privileges нет информации о newrole. Так что я все еще ищу ... - person sibert; 26.03.2016