代码之家  ›  专栏  ›  技术社区  ›  Vamiris

PostgreSQL-只读“超级用户”

  •  2
  • Vamiris  · 技术社区  · 8 年前

    我正在寻找如何创建postgres角色的解决方案,该角色可以连接到所有数据库(也可以连接到角色之后创建的数据库)。

    这通常是超级用户可以做到的,但在我的情况下,该用户应该只对特定表具有只读访问权限。

    这可能吗?

    还是每次添加新数据库时都必须更新角色?尽管表格名称始终相同。

    谢谢

    1 回复  |  直到 8 年前
        1
  •  3
  •   Mike Sherrill 'Cat Recall'    8 年前

    公众可以 connect to PostgreSQL databases 默认情况下。

    PostgreSQL将某些类型的对象的默认权限授予 公众。默认情况下,在表上不向PUBLIC授予特权, 列、模式或表空间。对于其他类型,默认 授予PUBLIC的权限如下:CONNECT和CREATE TEMP 数据库表;函数的EXECUTE特权;和用法 语言特权。

    如果您使用的是pgAdminIII,并且在对象浏览器中选择了一个数据库,您将在SQL窗格中看到这一点。

    GRANT CONNECT, TEMPORARY ON DATABASE sandbox TO public;
    

    你可以 change default privileges 关于使用的几种数据库对象 alter default privileges 。这不会影响现有数据库对象。以常规方式授予现有对象的权限。

    更改默认权限 是“每个数据库”语句;您不能更改尚未创建的数据库的默认权限。

    可以 为存在的表授予权限。你 可以 改变 违约 所有尚未存在的表的权限。但是你 不能 更改具有尚未存在的特定名称的表的默认权限。

    您可以在中的对象上设置适当的权限和默认值 the template database 。然后,您创建的每个数据库都将包括这些对象、权限和默认值。