1

在 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 数据目录具有适当的文件权限。

4

1 回答 1

1

估计你期待太多GRANT ALL ON DATABASE postgres TO <user>;

ALL在这种情况下意味着该命令相当于:

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

而且您创建角色的方式,它无论如何都无法登录到任何数据库(您可以使用 进行检查\du)。如果它是通过以下方式创建的,则可以:

CREATE ROLE name WITH LOGIN PASSWORD 'pass';

ALTER ROLE name WITH LOGIN稍后使用。

从这里开始,要授予用户在数据库中创建对象的权限,GRANT应该使用其他形式。

于 2013-10-24T15:43:10.817 回答