0

我有一个带有 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 访问权限?

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 访问权限的角色,并将此角色分配或授予新创建的用户。如果我这样做,我授予访问哪个模式,因为我动态克隆模式?

哪种方法最好?

4

1 回答 1

2

从 postgresql 9.0 版开始,最好的方法可能是使用ALTER DEFAULT PRIVILEGES

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

因此,如果像“john_smith_gmail_com”这样的所有用户都应该只对“他们自己”模式中的表具有 SELECT 访问权限,那么在创建模式和用户之后,您可以运行:

更改架构中的默认权限 john_smith_gmail_com 将表上的选择授予 john_smith_gmail_com;

于 2013-09-26T11:49:47.473 回答