2011-07-30 49 views
6

我安裝了PostgreSQL 9數據庫(從Oracle10g遷移),我真的被用戶/角色管理困惑。當我使用SQL命令如CREATE USERCREATE ROLE或Navicat工具創建新用戶時,創建的用戶可以看到所有數據庫!他真的可以連接他們!儘管他不能從表中選擇任何數據,但他可以查看錶格對象和序列等。我試圖撤銷連接特權,但沒有效果。我預計新用戶沒有特權,也看不到任何東西。我真的不知道他爲什麼可以。爲什麼PostgreSQL中的新用戶可以連接到所有數據庫?

+2

你是如何撤銷CONNECT權限的? –

+0

如果您使用的是pgAdmin,您可以查看用戶的登錄角色和權限。在您的服務器中,展開登錄角色,右鍵單擊有問題的登錄角色,然後選中角色權限和角色成員身份。然後將這些特權和成員與所討論的數據庫和數據庫對象進行匹配。如果數據庫或對象具有授予的角色,並且您的用戶的登錄名具有該角色,則說明訪問權限。如果用戶在「角色權限」選項卡上單擊了複選框,則說明其他權限。 – atrain

+0

所以我啓動了pgAdmin並觀看了我的數據庫上的角色選項卡(右鍵單擊數據庫,然後使用permissionsI)。我的所有數據庫都加入了「公共」角色。所以我刪除它。而現在它的作品!非常感謝你,因爲我有點害怕:-) – veselej

回答

0

您必須使用GRANT和/或REVOKE來定義用戶或角色的權限。您還可以使用以下link函數來查看用戶是否對錶,數據庫等具有特定權限...

+0

是的,我做過。 U使用PostgreSQL手冊中的SQL命令 - REVOKE CONNECT ON DATABASE dbname FROM username;並且它沒有效果 - >請參閱Aaron Sheffey的評論主題。但是,謝謝。 – veselej

1

您可能還需要修改pg_hba.conf文件。默認情況下,本地安裝不會執行授權檢查。

11

http://www.postgresql.org/docs/9.2/static/sql-grant.html#SQL-GRANT-DESCRIPTION-OBJECTS(重點煤礦):

PostgreSQL的授予缺省權限對某些類型的對象PUBLIC。默認情況下,在表,列,模式或表空間中沒有授予PUBLIC的權限。對於其他類型,授予PUBLIC的默認權限如下:CONNECTCREATE TEMP TABLE對於數據庫; EXECUTE功能特權;和USAGE語言的特權。對象所有者當然可以使用默認的和明確授予的權限REVOKE。 (爲了獲得最大的安全性,請在創建對象的同一事務中發出REVOKE;然後不存在其他用戶可以使用該對象的窗口。)另外,可以使用ALTER DEFAULT PRIVILEGES命令更改這些初始默認特權設置。

爲了消除對數據庫上的所有非指定用戶的所有權限(包括CONNECT),使用方法:

REVOKE ALL PRIVILEGES ON DATABASE <database> FROM public; 

參見:

+0

非常感謝,除了「爲了最大限度的安全性,在創建對象的相同事務中發出REVOKE;那麼沒有其他用戶可以使用該對象的窗口「 - 這聽起來像很好的建議,但不適用於數據庫,因爲(引用錯誤消息)」CREATE DATABASE無法在事務塊內運行「。所以沒有辦法關閉窗口讓別人使用新的數據庫? – njlarsson

相關問題