2012-06-13 122 views
2

的PostgreSQL 9.1版,PostgreSQL的特定數據庫

我正在登錄到數據庫,默認用戶爲用戶權限:「Postgres的」和我的數據庫中包含默認角色「公共」

數據庫的名單上有,

1.database1

2.database2

3.database3

現在,我需要創建一個只有「database2」權限的用戶「newuser」,它不應該登錄到其他數據庫。

我試圖用這個語法

create role newuser with login nosuperuser nocreatedb nocreaterole noinherit password 'newpassword'; 
revoke all privileges on database database1, database3 from newuser; 

,但仍然是「NEWUSER」可以登錄到其他數據庫(數據庫1 /數據庫3),它可以選擇其他模式的表。 (公共架構中的表未列出)

請任何人都解釋我創建用戶並授予他們權限的正確過程。

我需要誰可以有一個特定的數據庫上的所有權限的用戶而已,他不應該登錄到其他數據庫:)

回答

0

好方式我總是這樣做,這是通過pg_hba.conf,但我懷疑它應該是儘可能以你想要的方式。

人們會期望撤消所有權限以拒絕任何與列出的實體。所以沒有關係,更不用說實際選擇。可能有些事情顯而易見,我們在這裏忘記了。

無論如何,這應該很容易使用配置文件來解決。添加newuser並只列出您想要在那裏允許的數據庫。它將有效地拒絕任何來自該用戶的連接到任何其他數據庫。顯然,除了您已有的權限設置之外,還可以使用它。

+0

感謝您的回覆,這是唯一這樣做的選項,這將是難以配置爲每個新用戶..... – MAHI

+0

我做不知道,我不會指望它是唯一的選擇。今晚有空閒時,我會在本地的Postgres服務器上建立一個測試狀態。如果我得到它的工作瓦特/ pg_hba.conf改變,我會讓你知道:) – pyrocumulus

+0

好的謝謝,我也會搜索一些選項 – MAHI

4

您是否試圖將privilege to connect吊銷到數據庫?這應該不允許對數據庫進行任何進一步的操作。

REVOKE CONNECT ON DATABASE your_db FROM user; 

一個小挖之後,很明顯,爲什麼上面是行不通的。也許一個nswer by Tom Lane會給你一個更好的解決方案。

+0

是的,我做了,沒有用,仍然我能夠連接到數據庫.. – MAHI

+0

@MAHI做了一些研究,查看郵件列表中的答案鏈接。 – DrColossos

+0

我認爲這是一個合理的解釋@DrColossos。無論如何,這是值得一試的。 – pyrocumulus

3

您可以通過運行刪除數據庫用戶的權限。

REVOKE ALL PRIVILEGES ON DATABASE "database_name" from username;

+0

這是一個超級方便的命令 – bonitzenator

1

默認情況下,所有public scemas將可用於常規(非超級用戶)用戶。爲了防止這種超級用戶身份登錄,併發出命令:

REVOKE ALL ON DATABASE somedatabase FROM PUBLIC;