为什么我不能在全新安装的PostgreSQL上设置权限

时间:2013-10-24 14:16:06

标签: postgresql centos

在CentOS 6(64位)上全新安装PostgreSQL 9.3(根据PostgreSQL wiki上的YUM安装手册)不会向任何用户授予权限。

我登录postgres用户并打开psql,然后我为默认用户创建了一个角色:

CREATE ROLE <name> WITH PASSWORD '<password>';

然后尝试在默认的postgres数据库上授予它特权:

GRANT ALL ON DATABASE postgres TO <user>;

给出了预期的输出,但用户对postgres没有任何权限。 \dp <user>的输出也是空的。其他测试显示我无法授予任何用户权限。但是,当我尝试删除已授予这些不存在的权限的角色时,它会显示

ERROR: role "<user>" cannot be dropped because some objects depend on it
DETAIL: privileges for database postgres

我不知所措。我还检查了以确保postgres Linux用户在PostgreSQL数据目录中具有相应的文件权限。

1 个答案:

答案 0 :(得分:1)

据推测,你期待GRANT ALL ON DATABASE postgres TO <user>;

过多 在此上下文中,

ALL表示该命令等同于:

GRANT CREATE,CONNECT,TEMPORARY ON DATABASE postgres TO <user>;

您创建ROLE的方式无论如何都无法登录任何数据库(您可以使用\du进行检查)。 如果它是用:

创建的话
CREATE ROLE name WITH LOGIN PASSWORD 'pass';

或稍后使用ALTER ROLE name WITH LOGIN

从此开始,为了赋予用户在数据库中创建对象的权限,应使用其他形式的GRANT