2012-06-13 3 views
2

PostgreSQL версии 9.1,PostgreSQL - привилегии пользователя для конкретной базы данных

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

списка базы данных у меня есть,

1.database1

2.database2

3.database3

Теперь мне нужно создать пользователя «newuser», который будет иметь только привилегию «database2», он не должен входить в другие базы данных.

я попытался использовать этот синтаксис

create role newuser with login nosuperuser nocreatedb nocreaterole noinherit password 'newpassword'; 
revoke all privileges on database database1, database3 from newuser; 

, но до сих пор в «NEWUSER» могут войти в другую базу данных (Database1/database3), и он может выбрать таблицы из другой схемы. (таблицы в общедоступной схеме не указаны)

, пожалуйста, всем объясните мне правильную процедуру создания пользователя и предоставления им привилегий.

мне нужно пользователю, который может иметь все привилегии на определенной базе данных только он не должен войти в другую базу данных :)

ответ

0

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

Можно было бы отменить все привилегии, чтобы отрицать что-либо с перечисленными объектами. Таким образом, никакие связи не позволяют фактически выбирать. Там может быть что-то очевидное, что мы забываем здесь.

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

+0

спасибо за ответ, это только возможность сделать это, будет трудно настроить для каждого нового пользователя ..... – MAHI

+0

я делаю не знаю, я бы не ожидал, что это единственный вариант.Когда у меня будет свободное время сегодня, я создам тестовую ситуацию на моем локальном сервере Postgres. Если я получу его, чтобы работать без изменения pg_hba.conf, я дам вам знать :) – pyrocumulus

+0

ok спасибо, я тоже буду искать какой-то вариант – MAHI

4

Вы пытались отозвать privilege to connect в базу данных? Это должно также запретить дальнейшие операции с базой данных.

REVOKE CONNECT ON DATABASE your_db FROM user; 

После небольшого копания, стало очевидно, почему выше не работает. Возможно, a nswer by Tom Lane даст вам лучшее решение.

+0

да, я сделал, бесполезно, но я могу подключиться к база данных .. – MAHI

+0

@MAHI сделал небольшое исследование, проверьте связь с ответом в списке рассылки. – DrColossos

+0

Я думаю, что это логическое объяснение действительно @DrColossos. В любом случае стоит попробовать. – pyrocumulus

3

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

REVOKE ALL PRIVILEGES ON DATABASE "database_name" from username;

+0

, что было супер удобной командой – bonitzenator

1

По умолчанию все public scemas будут доступны для обычных (не суперпользователя) пользователей. Для предотвращения этого входа в привилегированном и выдает команду:

REVOKE ALL ON DATABASE somedatabase FROM PUBLIC; 

 Смежные вопросы

  • Нет связанных вопросов^_^