在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数据目录中具有相应的文件权限。
答案 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
。