Postgresql:创建一个没有权限的新用户?

时间:2013-12-08 21:43:20

标签: postgresql roles privileges

我只是在学习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创建用户,但效果完全相同。

如何创建仅具有访问其自己的数据库权限的用户?或者我必须在创建用户后专门撤消所有权限?从安全角度来看,这有点糟糕 - 很容易意外忘记(或者只是不知道有必要)撤销新用户的权限。

1 个答案:

答案 0 :(得分:3)

所有角色都是伪角色PUBLIC的“成员”。默认情况下,PUBLIC具有许多权限。我的做法是撤销我需要的PUBLIC的所有权限,并为特定角色授予各种组合。最近的添加有助于此 - ALTER DEFAULT PRIVILEGES。另一种不那么灵活但更简单的方法是CONNECT权限。