PostgreSQL - Readonly“SuperUser”

时间:2016-01-03 11:09:42

标签: postgresql privileges

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

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

这可能吗?

或者每次添加新数据库时是否必须更新角色?虽然表名总是一样的。

感谢

1 个答案:

答案 0 :(得分:2)

默认情况下PUBLIC可以connect to PostgreSQL databases

  

PostgreSQL为某些类型的对象授予默认权限   上市。默认情况下,表上没有为PUBLIC授予任何权限,   列,模式或表空间。对于其他类型,默认值   授予PUBLIC的权限如下:CONNECT和CREATE TEMP   数据库表;函数的EXECUTE特权;和用法   语言特权。

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

GRANT CONNECT, TEMPORARY ON DATABASE sandbox TO public;

您可以alter default privileges使用alter default privileges对某些类型的数据库对象进行change default privileges。这不会影响现有的数据库对象。以通常的方式为现有对象授予权限。

{{1}}是"每个数据库"声明;您无法更改尚未创建的数据库的默认权限。

可以为存在的表授予权限。您可以更改所有尚不存在的表的默认权限。但是无法更改具有特定名称但尚不存在的表的默认权限。

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