2016-03-26 1 views
4

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

Зашли как «newrole» Я по-прежнему иметь доступ к базе данных Postgres, как это:

SELECT * FROM pg_user 

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

REVOKE ALL ON DATABASE postgres FROM newrole 

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

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

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

ТИА,

+0

Какой пользователь вы хотите удалить? Все пользователи? –

+0

Только «новорожденный». Обычные пользователи напрямую не обращаются к базе данных и иногда нуждаются в доступе к базе данных postgres по другим причинам. – sibert

+0

Я считаю, что нужно установить привилегию подключения, попробуйте REVOKE connect ON DATABASE [dbname] FROM public – Lucas

ответ

2

вы должны быть в состоянии выполнить это:

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

, чтобы отобразить все привилегии для newrole. С этой информацией вы сможете явно отменить все, кроме доступа к 'newschema'

+0

@sibert Я удалил свой ответ, потому что не знаю, что я делаю ... Извините Если вы выполнили мою команду, и это вызвало проблемы. Удачи вам в вашем проекте –

+0

По какой-то причине нет информации о «newrole» в table_privileges. Так что я все еще ищу ... – sibert

3

Эта проблема не имеет ничего общего с базой данных 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; 

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

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

+0

Спасибо за объяснение. Но «новорожденный» может по-прежнему получать доступ к pg_users и т. Д. Не существует способа скрывать конфиденциальную информацию (i e multi-tenant environment)? – sibert