我只是在学习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创建用户,但效果完全相同。
如何创建仅具有访问其自己的数据库权限的用户?或者我必须在创建用户后专门撤消所有权限?从安全角度来看,这有点糟糕 - 很容易意外忘记(或者只是不知道有必要)撤销新用户的权限。
答案 0 :(得分:3)
所有角色都是伪角色PUBLIC
的“成员”。默认情况下,PUBLIC
具有许多权限。我的做法是撤销我需要的PUBLIC
的所有权限,并为特定角色授予各种组合。最近的添加有助于此 - ALTER DEFAULT PRIVILEGES
。另一种不那么灵活但更简单的方法是CONNECT
权限。