2016-03-26 28 views
4

我爲某個只應執行一些存儲函數的用戶創建了一個單獨的角色「newrole」和新的模式「newschema」。我已設法撤銷對當前數據庫的「public」模式訪問。撤消對postgres數據庫角色的訪問

被當作「newrole」我仍然有這樣的訪問Postgres數據庫:

SELECT * FROM pg_user 

我想撤銷所有訪問Postgres數據庫,並試圖下面是不行的:

REVOKE ALL ON DATABASE postgres FROM newrole 

當以newrole登錄時,我仍然可以讀取postgres數據庫。

如何撤消對postgres管理數據庫的任何訪問?

我已經搜索了很長時間,但沒有發現任何有關訪問postgres管理數據庫的信息。

TIA,

+0

你想刪除哪個用戶?全部用戶? –

+0

只有「newrole」。普通用戶不直接訪問數據庫,有時因其他原因需要訪問postgres數據庫。 – sibert

+0

我相信連接權限需要指定,請嘗試REVOKE連接ON DATABASE [dbname] FROM public – Lucas

回答

2

,你應該能夠運行這個命令:

select * FROM information_schema.table_privileges where grantee = 'newrole'; 

以顯示newrole一切特權。有了這些信息,您應該能夠明確撤消除'accesscheck'之外的所有內容。

+0

@sibert我已經刪除了我的答案,因爲我不知道我在做什麼...抱歉如果您運行我的命令,並且它導致任何問題。祝您的項目順利 –

+0

出於某種原因,table_privileges中沒有關於「newrole」的信息。所以我仍在搜索... – sibert

3

此問題與數據庫postgres無關。相反,您想要操作當前數據庫的目錄。每個數據庫都有關於模式pg_catalog中的所有對象的信息目錄,以及模式information_schema中的符合標準的形式的信息目錄,因此您應限制對有關角色以及public角色的訪問權限,因爲每個角色也是該角色的成員作用:

REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM newrole; 
REVOKE ALL PRIVILEGES ON SCHEMA pg_catalog FROM public; 
REVOKE ALL PRIVILEGES ON SCHEMA information_schema FROM newrole; 
REVOKE ALL PRIVILEGES ON SCHEMA information_schema FROM public; 

然而,該系統並不總是兌現這個防空火炮,該板限制,該目錄是有原因的,並在數據庫中提供重要的功能。特別是功能可能仍然執行。

一般來說,你不想擺弄目錄,除非你真的知道你在做什麼

+0

謝謝你的解釋。但「newrole」仍然可以訪問pg_users等。是否無法隱藏敏感信息(即多租戶環境)? – sibert