2013-09-26 70 views
0

我有一個數據庫與template_schema.I克隆這個模板模式並創建一個數據庫用戶的密碼。我只需要爲創建的用戶提供對克隆模式的訪問。Postgres創建數據庫用戶只有授權訪問模式

SELECT clone_schema('my_template_schema','john_smith_gmail_com'); 
CREATE USER john_smith_gmail_com WITH PASSWORD 'mypassword'; 

高興這個好吧。然後,我需要授予訪問該用戶的這種克隆模式(john_smith_gmail_com)僅

方法:1 我試圖取消對用戶克隆模式的所有表(john_smith_gmail_com)所有權限,並授予選擇到用戶。但我的問題是,該用戶可以在其他架構表上獲得SELECT訪問權限嗎?

REVOKE ALL ON ALL TABLES IN SCHEMA john_smith_gmail_com FROM john_smith_gmail_com; 
GRANT SELECT ON ALL TABLES IN SCHEMA john_smith_gmail_com TO john_smith_gmail_com; 

方法:2

只有SELECT進入創建角色並分配或授予該角色到新創建的用戶。如果我這樣做,我授予訪問哪個模式,因爲我動態克隆模式?

哪種方法最好?

回答

2

從postgresql版本9.0開始,最好的方法是使用ALTER DEFAULT PRIVILEGES

...任何對象類型的默認權限通常會將所有可授予的權限授予對象所有者,並且也可能授予一些特權給PUBLIC。但是,可以通過使用ALTER DEFAULT PRIVILEGES更改全局默認權限來更改此行爲。

所以,如果像「john_smith_gmail_com」所有用戶應該只需要在「自己的」模式表的SELECT訪問權限,創建模式和用戶後,你可以運行:

ALTER缺省權限架構中john_smith_gmail_com GRANT選擇表格至john_smith_gmail_com;