默认撤销对新数据库的 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
如您所见,someuser
对 mydb
具有 CONNECT
权限。
为什么会这样?如何防止用户连接到新创建的数据库?
数据库的权限不是在CREATE DATABASE
期间从模板数据库复制的。相反,所有新数据库都具有相同的默认权限:PUBLIC
的 CONNECT
和 TEMP
,以及所有者的所有权限。
除非修改 PostgreSQL 代码,否则无法更改该默认值。
这发生在 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
如您所见,someuser
对 mydb
具有 CONNECT
权限。
为什么会这样?如何防止用户连接到新创建的数据库?
数据库的权限不是在CREATE DATABASE
期间从模板数据库复制的。相反,所有新数据库都具有相同的默认权限:PUBLIC
的 CONNECT
和 TEMP
,以及所有者的所有权限。
除非修改 PostgreSQL 代码,否则无法更改该默认值。