2010-07-28 46 views
14

我想創建一個只能訪問postgres服務器上的一個數據庫的postgres用戶。如何防止用戶能夠查看其他數據庫和其他數據庫中的表?

目前我的流程是:

create database database1; 
create user user1 with password 'pass'; 
grant all privileges on database database1 to user1; 

但USER1仍然可以看到的星展銀行,用戶,表等的列表是否有辦法防止用戶看到這些信息?用戶需要能夠寫入和讀取該數據庫。

非常感謝。

回答

7

每個用戶都可以看到列出的其他數據庫和角色,但不應該能夠在其他數據庫中看到表。

如果您撤銷除分配的數據庫之外的所有數據庫的CONNECT權限,用戶將無法訪問其他數據庫的內容。

角色和數據庫名稱是全局的,不容易阻止。你可以嘗試Frank Heikens關於系統表選擇性撤銷的建議,但你冒這樣的風險。 PostgreSQL開發人員在usenet郵件列表中不鼓勵篡改訪問系統目錄。

Psql和其他工具一樣,假設沒有它們,它們將可用並且功能很差。

爲什麼知道其他數據庫和角色的名稱名稱如此糟糕?

+3

用戶將在我們身邊創建dbs。我們不希望用戶能夠看到每個其他數據庫,表名稱等作爲數據隱私/安全措施。 – Dan 2010-07-29 19:14:56

+2

當用戶可以列出數據庫中的表時,這是一件壞事,而這些數據庫不是他們的。 – harmv 2013-07-15 14:58:04

+1

它給出了不確定需要的數據。例如,名爲*「cicallc」*的數據庫可能表明「Cica Llc」是您的客戶。以下名爲「cicaalfresco」的數據庫可能會指出他們在做什麼。您的系統可能會顯示數據庫的數量,其中有多少用戶(=客戶)。等等。這是postgresql開發人員的概念錯誤。一個普通用戶應該發現自己處於一個環境中,在這個環境中,他只能訪問*任何他必須訪問的東西,而不能訪問它。 – peterh 2017-04-19 14:02:23

1

默認情況下,您創建的任何對象都是在公共架構中創建的。另外,您創建的任何用戶都在公共架構上具有CREATE和USAGE權限。您應該爲該用戶撤銷CREATE和USAGE到公共模式,或者您應該更改默認訪問級別。您還需要將該用戶有權訪問的數據庫移動到用戶的架構或用戶可訪問的架構中。請參閱Postgres手冊中的DDL Schemas

相關問題