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";
验证操作
- 通过GitHub Actions以迁移服务账户身份执行数据库迁移,创建目标表。
- 在Cloud Studio中用你的IAM用户或postgres用户登录,执行
SELECT * FROM "myTable",确认可正常读写。 - 尝试修改表数据,验证权限生效。
原配置失败原因
你之前的ALTER DEFAULT PRIVILEGES未指定FOR ROLE,默认仅对postgres用户创建的对象生效。而迁移服务账户创建的对象,其默认权限归属于该服务账户本身,因此需要显式指定FOR ROLE "迁移服务账户邮箱",让它创建的所有新对象自动继承给共享角色。
内容的提问来源于stack exchange,提问作者Ant
相关产品推荐
相关产品推荐

