【问题标题】:postgres table privileges do not allow user to create/select viewpostgres 表权限不允许用户创建/选择视图
【发布时间】:2015-02-08 19:34:13
【问题描述】:

我正在管理一个具有多个模式的数据库。我在设置权限时遇到了一些困难,想请求一些帮助。

我有一个名为 schemaA 的架构和一个 group_role db_writer

我使用下面的sql:

GRANT USAGE ON SCHEMA schemaA TO db_writer;
GRANT UPDATE, INSERT, SELECT, DELETE ON ALL TABLES IN SCHEMA schemaA TO db_writer;

但是,db_writer 无法创建视图。它们返回一个权限被拒绝错误。此外,当我创建视图时,她无法选择它们......我必须再次为该视图设置权​​限。

据我了解,视图在特权方面被视为表......如果一个人被授予对架构中所有表的某些权限,这也适用于视图。

我错过了什么?任何建议表示赞赏。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    问题是USAGE不允许用户在数据库中创建对象。

    试试

    GRANT USAGE, CREATE ON SCHEMA schemaA TO db_writer 
    

    编辑:

    新对象将获得默认权限,让用户对将来创建的对象拥有这些权限,您可以这样做:

    ALTER DEFAULT PRIVILEGES IN SCHEMA schemaA GRANT UPDATE, INSERT, SELECT, DELETE ON TABLES TO db_writer;
    ALTER DEFAULT PRIVILEGES IN SCHEMA schemaA GRANT SELECT ON TABLES TO db_reader;
    

    Check this answer for more info

    【讨论】:

    • Miguel,您的回答提供了一个允许用户创建视图的解决方案。但是,如果我想允许另一个用户 db_reader 从我的视图中“选择”...但不允许他们创建视图,该怎么办。这可行吗?还是我必须授予用户“创建”才能从视图中进行选择?
    • 当然可行。在这种情况下,对于 db_reader,您只授予该架构上的“USAGE”
    • 啊,是的——这就是我所做的。 ...但是当我创建一个新视图时,db_reader 无法访问它...直到我再次重做权限。在创建视图后,我必须授予他们对视图的选择权限——我希望这会自动完成,因为已经在架构上为他们授予了使用/选择权限。 ?
    • @user3770062 没有注意到您的评论抱歉。刚刚更新了我的答案。
    猜你喜欢
    • 2016-02-27
    • 1970-01-01
    • 2016-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多