2012-11-02 53 views
1

在服務器上,我有兩個數據庫(比如db1和db2)。我有一個名爲user1的超級用戶。如何禁用postgres中的超級用戶

我的要求是禁用數據庫db1的user1(超級用戶)。 因此,使用user1我只能連接到db2而不是db1。

這是怎麼做到的。

注意:postgres版本是8.0,兩個數據庫都在同一個數據庫集羣上。

+2

呃,嚴重的是8.0?這是令人難以置信的過時。它於2005年1月發佈,其最終報廢發佈時間爲2010年10月。急需升級*。請參閱http://www.postgresql.org/support/versioning/ –

回答

4

完全刪除其超級用戶權限。讓它們成爲所有者db2ALTER DATABASE db2 OWNER TO whatever_user),這樣他們就可以對db2執行任何操作,除了有限的超級用戶操作(例如加載C擴展名)。

您不能限制超級用戶。這纔是重點。超級用戶操作是突破常規訪問控制規則的操作。例如,加載用戶自定義的C函數可以讓您編寫和加載一個函數,該函數打開pg_hba.conf並重寫它,或者直接操作系統目錄。同樣,adminpack函數可讓您直接訪問文件系統,因此它們僅限超級用戶。

如果他們是一個超級用戶,他們可以閱讀pg_hba.conf,看到你的用戶ID已經登錄到db1權,然後改變那麼你的密碼登錄,你

要求將超級用戶限制爲一個數據庫就像詢問您是否可以創建用戶root,但僅限於一個子目錄。 (好的,所以用SELinux你可以這樣做,但它的複雜度爲)。

如果您確實需要這樣做,唯一的方法是將db1db2分爲不同的非空閒系統用戶ID下運行的不同PostgreSQL服務器。每個人都有自己獨立的shared_buffers,數據目錄,監聽(ip-address, port)組合,WAL,用戶ID,數據庫列表等。由於他們在不同的系統用戶下運行,他們無權讀取或寫入彼此的數據目錄,所以他們是孤立的。他們必須監聽不同的端口和/或不同的IP地址,儘管您可以使用PgBouncer使它們看起來與外部客戶端是同一臺服務器。

+0

@ArunPadule回答更多信息 –

相關問題