Я просто изучаю 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, но это был точно такой же эффект.
Как создать пользователя, который имеет только права доступа к своей собственной базе данных? Или мне нужно специально аннулировать все разрешения после создания пользователя? «Потому что это отвлекает с точки зрения безопасности - легко случайно забыть (или просто не знать, что это необходимо), чтобы аннулировать разрешения для новых пользователей.
Все роли являются «членами» псевдослужбы '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). –
На самом деле я только что нашел этот дублированный вопрос (oops): http://stackoverflow.com/questions/6884020/why-new-user-in-postgresql-can-connect-to-all-databases –
@ MilenA.Radev вы знаете статью, которая могла бы мне помочь, установив мои роли и привилегии по умолчанию, чтобы при создании нового пользователя у вас был полный доступ к их собственной базе данных, но он даже не мог подключиться к кому-либо еще? –