You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GCP Cloud SQL Postgres 13 禁止用户连接新建数据库问题排查

问题原因与解决方案

原因

  1. GCP Cloud SQL 托管的 PostgreSQL 实例默认内置平台级权限逻辑:新建数据库完成后,系统会自动向 public 角色授予该数据库的 CONNECT 权限,该操作会覆盖从模板数据库 template1 继承来的权限配置,因此仅修改 template1 的权限无法生效。
  2. 若目标用户 someuser 被授予了 Cloud SQL 内置的 cloudsqlsuperuser 高权限角色,该角色默认拥有所有数据库的全量权限,普通权限回收语句对该类角色不生效。

解决方法

  • 第一步:先确认目标用户无多余高权限,执行以下语句核查:
    SELECT rolname FROM pg_roles 
    WHERE pg_has_role('someuser', rolname, 'member') 
    AND rolsuper IS TRUE;
    
    如果返回结果包含 cloudsqlsuperuser 等超级用户角色,先为用户移除该角色:
    REVOKE cloudsqlsuperuser FROM someuser;
    
  • 第二步(永久生效方案):关闭 Cloud SQL 自动授予 public 角色 CONNECT 权限的默认逻辑:
    1. 进入 GCP 控制台的 Cloud SQL 实例详情页,点击「编辑」
    2. 找到「标志」配置项,添加标志 cloudsql.disable_public_connect_grant,设置值为 on
    3. 保存配置,实例会自动重启生效
  • 第三步:重新配置模板数据库权限:
    REVOKE ALL ON DATABASE template1 FROM public;
    
    后续通过 template1 模板新建的数据库会自动继承该权限配置,public 角色默认不会拥有新库的 CONNECT 权限,你可以按需给指定用户单独授权:
    GRANT CONNECT ON DATABASE mydb TO allow_user;
    
  • 临时方案(不想修改实例标志):每次新建数据库后,手动执行权限回收语句即可:
    REVOKE ALL ON DATABASE mydb FROM public;
    

内容的提问来源于stack exchange,提问作者Jacek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 04:06:04