PostgreSQL - 只读 "SuperUser"

PostgreSQL - Readonly "SuperUser"

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

这通常是超级用户可以做的事情,但在我的例子中,该用户应该只对特定的 table 具有只读访问权限。

这可能吗?

或者每次添加新数据库时都必须更新角色吗?尽管 table 名称始终相同。

谢谢

PUBLIC默认可以connect to PostgreSQL databases

PostgreSQL grants default privileges on some types of objects to PUBLIC. No privileges are granted to PUBLIC by default on tables, columns, schemas or tablespaces. For other types, the default privileges granted to PUBLIC are as follows: CONNECT and CREATE TEMP TABLE for databases; EXECUTE privilege for functions; and USAGE privilege for languages.

如果您使用的是 pgAdminIII,并且您 select 对象浏览器中的数据库,您将在 SQL 窗格中看到它。

GRANT CONNECT, TEMPORARY ON DATABASE sandbox TO public;

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

alter default privileges 是一个 "per database" 语句;您无法更改尚未创建的数据库的默认权限。

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

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