2013-12-08 4 views
2

Я просто изучаю PostgreSQL. Каждый раз, когда я создаю пользователей, они, кажется, имеют полные права делать что-либо в какой-либо базе данных:Postgresql: Создать нового пользователя без привилегий?

$ sudo useradd fool # create the user "fool" in the system 
# And in postgresql, as restrictively as possible 
$ sudo -u postgres createuser fool --no-superuser --no-createdb --no-createrole --no-inherit 
$ sudo -u fool psql postgres # but it can still connect to the "postgres" db 
postgres=> drop table ids; # and delete tables 
DROP TABLE 

Я попытался создать пользователя через the create user PostgreSQL command, а не command-line tool, но это был точно такой же эффект.

Как создать пользователя, который имеет только права доступа к своей собственной базе данных? Или мне нужно специально аннулировать все разрешения после создания пользователя? «Потому что это отвлекает с точки зрения безопасности - легко случайно забыть (или просто не знать, что это необходимо), чтобы аннулировать разрешения для новых пользователей.

+3

Все роли являются «членами» псевдослужбы 'PUBLIC'. И по умолчанию у 'PUBLIC' есть много привилегий. Моя практика - отменить все привилегии из «PUBLIC», где мне нужно, и предоставить различные комбинации для определенных ролей. Недавнее дополнение помогает в этом - ['ALTER DEFAULT PRIVILEGES'] (http://www.postgresql.org/docs/current/static/sql-alterdefaultprivileges.html). Другой, не такой гибкий, но простой способ - это привилегия ['CONNECT'] (http://www.postgresql.org/docs/current/static/sql-grant.html). –

+0

На самом деле я только что нашел этот дублированный вопрос (oops): http://stackoverflow.com/questions/6884020/why-new-user-in-postgresql-can-connect-to-all-databases –

+0

@ MilenA.Radev вы знаете статью, которая могла бы мне помочь, установив мои роли и привилегии по умолчанию, чтобы при создании нового пользователя у вас был полный доступ к их собственной базе данных, но он даже не мог подключиться к кому-либо еще? –

ответ

3

Все роли являются «членами» псевдо-роли PUBLIC. И по умолчанию PUBLIC имеет много привилегий. Моя практика заключается в том, чтобы отменить все привилегии от PUBLIC, где мне нужно, и предоставить различные комбинации для определенных ролей. Недавнее добавление помогает с этим - ALTER DEFAULT PRIVILEGES. Другой, не такой гибкий, но простой способ - это привилегия CONNECT.

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