默认撤销对新数据库的 CONNECT 权限

Revoke CONNECT permission to new DB by default

这发生在 GCP 云 SQL 上新创建的 Postgres 13 实例上。

我想禁止用户连接到新创建的数据库。所以我正在修改模板数据库:

REVOKE ALL ON DATABASE template1 FROM public;

然后,我创建新的数据库:

CREATE DATABASE mydb TEMPLATE template1;

然后我正在检查现有用户的 CONNECT 权限:

SELECT datname
FROM pg_database
WHERE has_database_privilege('someuser', datname, 'CONNECT')

    datname
---------------
 cloudsqladmin
 postgres
 template0
 mydb

如您所见,someusermydb 具有 CONNECT 权限。

为什么会这样?如何防止用户连接到新创建的数据库?

数据库的权限不是CREATE DATABASE期间从模板数据库复制的。相反,所有新数据库都具有相同的默认权限:PUBLICCONNECTTEMP,以及所有者的所有权限。

除非修改 PostgreSQL 代码,否则无法更改该默认值。