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

Google CloudSQL:如何移除Terraform创建用户的超级用户权限

问题解答

一、Terraform PostgreSQL Provider 是否可以实现权限撤销

可以通过 Terraform 的 PostgreSQL Provider 相关资源完成权限撤销操作,分两部分处理:

1. 从 cloudsqlsuperuser 角色中移除用户

cloudsqlsuperuser 是 CloudSQL PostgreSQL 的内置角色,要移除用户的角色成员身份,需使用 postgresql_role 资源,通过调整 members 参数排除目标用户:

resource "postgresql_role" "cloudsqlsuperuser" {
  name      = "cloudsqlsuperuser"
  members   = [for u in google_sql_user.all_users : u.name if u.name != "target_user"]
  skip_drop = true # 避免误删内置角色
}

2. 撤销 CREATE ROLE、CREATE DATABASE 权限

使用 postgresql_grant 资源撤销全局级权限:

resource "postgresql_grant" "revoke_create_role" {
  role              = "target_user"
  database          = "postgres"
  privilege         = ["CREATEROLE"]
  with_grant_option = false
  revoke            = true # 启用撤销模式
}

resource "postgresql_grant" "revoke_create_db" {
  role              = "target_user"
  database          = "postgres"
  privilege         = ["CREATEDB"]
  with_grant_option = false
  revoke            = true
}

执行前需确保 Terraform 连接 CloudSQL 的用户拥有足够权限(如本身是 cloudsqlsuperuser)。

二、Ansible community.postgresql.postgresql_privs 模块是否可行

完全可以用该模块完成权限撤销,同时配合 community.postgresql.postgresql_user 模块移除角色成员身份:

1. 移除用户的 cloudsqlsuperuser 角色

- name: 移除用户的 cloudsqlsuperuser 角色
  community.postgresql.postgresql_user:
    name: target_user
    role_attr_flags: NOSUPERUSER,NOCREATEDB,NOCREATEROLE
    groups: [] # 清空用户所属的额外角色组
    login_host: your_cloudsql_ip
    login_user: cloudsql_admin
    login_password: your_admin_password

2. 撤销 CREATE ROLE、CREATE DATABASE 权限

- name: 撤销 CREATE ROLE 权限
  community.postgresql.postgresql_privs:
    role: target_user
    type: database
    database: postgres
    privs: CREATEROLE
    state: absent
    login_host: your_cloudsql_ip
    login_user: cloudsql_admin
    login_password: your_admin_password

- name: 撤销 CREATE DATABASE 权限
  community.postgresql.postgresql_privs:
    role: target_user
    type: database
    database: postgres
    privs: CREATEDB
    state: absent
    login_host: your_cloudsql_ip
    login_user: cloudsql_admin
    login_password: your_admin_password

执行时需确保 Ansible 能连接到 CloudSQL 实例(如通过公网 IP 或 VPC 对等连接),且登录用户具备足够权限。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 10:40:40