Postgres仅创建具有模式授权访问权限的数据库用户

时间:2013-09-26 03:44:13

标签: postgresql

我有一个带有template_schema的数据库。我克隆了这个模板模式,并创建了一个带密码的数据库用户。我需要为创建的用户提供对克隆模式的访问。

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选择授予用户。但我的问题是,这个用户是否可以在其他模式表上获得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访问权限的角色,并将此角色分配或授予新创建的用户。如果我这样做,我授予访问权限的模式,因为我动态地克隆模式?

哪种方法最好?

1 个答案:

答案 0 :(得分:2)

从postgresql 9.0及更高版本开始,最好的方法是使用ALTER DEFAULT PRIVILEGES

  

...任何对象类型的默认权限通常都会向对象所有者授予所有可授予的权限,并且也可以向PUBLIC授予一些权限。但是,可以通过使用ALTER DEFAULT PRIVILEGES更改全局默认权限来更改此行为。

因此,如果所有像“john_smith_gmail_com”这样的用户只能对“自己的”架构中的表进行SELECT访问,那么在创建架构和用户之后,您可以运行:

SCHEMA中的ALTER DEFAULT PRIVILEGES john_smith_gmail_com在表格上选择john_smith_gmail_com;