【问题标题】:Postgres create database user with grant access to schema onlyPostgres 创建数据库用户,仅授予对模式的访问权限
【发布时间】:2013-10-01 20:58:09
【问题描述】:

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

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

哪种方法最好?

【问题讨论】:

    标签: postgresql


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-21
      • 1970-01-01
      • 2019-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-05
      • 2020-01-25
      相关资源
      最近更新 更多