2013-09-26 68 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;