【问题标题】:How do I grant certain privileges to all tables in a database?如何为数据库中的所有表授予某些权限?
【发布时间】:2011-09-03 14:32:10
【问题描述】:

我需要类似于 mysql 在 postgresql 8.4 中的 GRANT SELECT ON db.* TO user 的东西。我在网上找到的解决方案使用 for 循环一次选择表并授予它们的权限。但这意味着每次将新表添加到数据库时,我都必须重新运行该命令。

有没有更直接的解决方案?

【问题讨论】:

    标签: database postgresql permissions


    【解决方案1】:

    假设您没有定义任何特定架构,那么您的所有表都将位于“公共”架构中,因此您可以说:

    GRANT <permissions> ON ALL TABLES IN SCHEMA public TO <roles>;
    

    这仅适用于 9.0 或更高版本,因此您在 8.4 中不走运。

    另请参阅:http://www.postgresql.org/docs/8.4/static/ddl-schemas.html

    【讨论】:

    • 这真的无济于事,因为无论您在哪个数据库中,它都会授予public 架构中所有表的权限,这不太可能是意图......
    【解决方案2】:

    请注意,通常将某个用户的权限授予另一个用户同样或更有意义,并且更容易跟踪。

    create user dbuser9;
    create database test9 with owner dbuser9;
    \c test9 dbuser9
    create a bunch of stuff...
    \c postgres postgres
    grant dbuser9 to stan;
    

    【讨论】:

      【解决方案3】:

      Default privileges 附带 9.0 版,旧版本中不可用。

      您可以创建一个循环遍历所有表并设置权限的存储过程。

      【讨论】:

        猜你喜欢
        • 2014-08-16
        • 2021-06-20
        • 2015-06-26
        • 1970-01-01
        • 2011-06-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多