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

Postgresql Postgres创建仅授予模式访问权限的数据库用户,postgresql,Postgresql,我有一个具有模板架构的数据库。我克隆了此模板架构并创建了一个具有密码的数据库用户。我只需要为创建的用户提供对克隆模式的访问 SELECT clone_schema('my_template_schema','john_smith_gmail_com'); CREATE USER john_smith_gmail_com WITH PASSWORD 'mypassword'; 到此为止,好的。然后我只需要为这个克隆的模式(john_smith_gmail_com)授予这个用户访问权限 方法:1

我有一个具有模板架构的数据库。我克隆了此模板架构并创建了一个具有密码的数据库用户。我只需要为创建的用户提供对克隆模式的访问

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


哪种方法最好?

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

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

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

更改模式中的默认权限john_smith_gmail_com将表上的SELECT授予john_smith_gmail_com