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

Cloud SQL PostgreSQL IAM权限配置求助:多用户共享表读写权限

Cloud SQL PostgreSQL IAM权限配置:跨用户共享迁移创建的表

核心问题

迁移服务账户通过IAM认证创建表后,其他IAM用户/postgres用户无读写权限,原因是默认权限未针对迁移服务账户配置,导致新创建的对象仅归创建者所有。

最小可行配置步骤

以下操作均通过postgres超级用户(密码认证)执行:

1. 创建统一共享角色

创建一个角色用于集中管理所有需要数据库读写权限的用户:

CREATE ROLE app_db_access;

-- 授予角色对public schema的使用和创建权限
GRANT USAGE, CREATE ON SCHEMA public TO app_db_access;

-- 授予角色对现有表、序列的全权限
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO app_db_access;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO app_db_access;

2. 配置迁移服务账户的权限与默认授权

假设迁移服务账户的IAM邮箱为migrations-sa@your-project.iam.gserviceaccount.com(Cloud SQL IAM用户的用户名即IAM邮箱):

-- 授予迁移服务账户创建数据库权限(按需开启)
ALTER USER "migrations-sa@your-project.iam.gserviceaccount.com" CREATEDB;

-- 授予迁移服务账户对public schema的操作权限
GRANT USAGE, CREATE ON SCHEMA public TO "migrations-sa@your-project.iam.gserviceaccount.com";

-- 关键:让迁移服务账户创建的新表/序列自动授权给共享角色
ALTER DEFAULT PRIVILEGES FOR ROLE "migrations-sa@your-project.iam.gserviceaccount.com"
IN SCHEMA public
GRANT ALL PRIVILEGES ON TABLES TO app_db_access;

ALTER DEFAULT PRIVILEGES FOR ROLE "migrations-sa@your-project.iam.gserviceaccount.com"
IN SCHEMA public
GRANT ALL PRIVILEGES ON SEQUENCES TO app_db_access;

3. 将所有需要访问的用户加入共享角色

包括你的IAM用户、postgres用户、其他服务账户:

-- 授权postgres用户
GRANT app_db_access TO postgres;

-- 授权你的个人IAM用户(替换为实际邮箱)
GRANT app_db_access TO "your-iam-email@example.com";

-- 授权迁移服务账户自身
GRANT app_db_access TO "migrations-sa@your-project.iam.gserviceaccount.com";

验证操作

  1. 通过GitHub Actions以迁移服务账户身份执行数据库迁移,创建目标表。
  2. 在Cloud Studio中用你的IAM用户或postgres用户登录,执行SELECT * FROM "myTable",确认可正常读写。
  3. 尝试修改表数据,验证权限生效。

原配置失败原因

你之前的ALTER DEFAULT PRIVILEGES未指定FOR ROLE,默认仅对postgres用户创建的对象生效。而迁移服务账户创建的对象,其默认权限归属于该服务账户本身,因此需要显式指定FOR ROLE "迁移服务账户邮箱",让它创建的所有新对象自动继承给共享角色。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 17:26:02