2013-10-24 103 views
1

在CentOS 6(64位)上全新安裝PostgreSQL 9.3(根據PostgreSQL維基上的YUM安裝手冊)將不會授予任何用戶權限。爲什麼我不能設置PostgreSQL全新安裝的權限

我登錄到Postgres的用戶,開放的PSQL,然後我爲我的默認的用戶創建一個角色:

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

,然後嘗試授予其默認的Postgres數據庫的權限:

GRANT ALL ON DATABASE postgres TO <user>; 

它給出了預期的輸出,但用戶對postgres沒有任何權限。 \dp <user>的輸出也是quizically空。額外的測試顯示我無法給予任何用戶權限。然而,當我嘗試刪除已被授予這些不存在的權限的角色,它說

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

我很茫然。我也檢查過,以確保postgres Linux用戶在PostgreSQL數據目錄上具有適當的文件權限。

+0

之前使用REVOKE DROP角色 –

+1

問題是什麼? –

+0

「,但用戶對postgres沒有任何權限」 - 實際上該角色對相關數據庫具有權限(請查看['has_database_privilege()'](http://www.postgresql.org/docs/current/static /functions-info.html#FUNCTIONS-INFO-ACCESS-TABLE)。對於包含在數據庫中的各種對象來說並非如此。 –

回答

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