GCP创建的Postgres用户默认特权及指定库管理员权限配置问题
GCP Cloud SQL Postgres用户权限调整操作步骤
默认GCP Cloud SQL创建的Postgres用户会自动加入cloudsqlsuperuser角色组,该角色自带实例级的创建角色、创建数据库权限,因此你看到的myuser确实属于高权限账号,你可以按照以下步骤调整为仅针对mydatabase的管理员权限:
步骤1:回收实例级高权限
使用实例默认的postgres高权限账号登录psql,执行以下命令移除myuser的超额权限:
-- 移除cloudsqlsuperuser角色归属 REVOKE cloudsqlsuperuser FROM myuser; -- 移除实例级的创建角色、创建数据库权限 ALTER ROLE myuser NOCREATEROLE NOCREATEDB;
步骤2:授予mydatabase专属管理员权限
保持高权限账号登录状态,切换到mydatabase执行以下授权命令:
-- 切换到目标数据库 \c mydatabase -- 可选:将数据库所有者改为myuser,获得最高库级控制权 ALTER DATABASE mydatabase OWNER TO myuser; -- 授予数据库全量操作权限 GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser; -- 授予public schema全量权限 GRANT ALL PRIVILEGES ON SCHEMA public TO myuser; -- 授予schema下现有所有对象的全量权限 GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO myuser; GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO myuser; GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public TO myuser; -- 配置默认权限,后续新建对象自动给myuser授权 ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON TABLES TO myuser; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON SEQUENCES TO myuser; ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL PRIVILEGES ON FUNCTIONS TO myuser;
步骤3:权限验证
切换为myuser登录psql,验证权限符合预期:
- 执行
CREATE DATABASE test_db会报权限不足错误,确认无实例级建库权限 - 执行
\c other_database会报权限不足错误,确认无法访问其他数据库 - 在mydatabase中执行建表、删表、数据增删改查、权限分配操作均正常,确认库级管理员权限生效
补充说明(Terraform配置优化)
如果要避免后续Terraform执行apply时恢复myuser的高权限,可在google_sql_user资源中添加roles = []参数,显式指定不给用户绑定默认的cloudsqlsuperuser角色。
内容的提问来源于stack exchange,提问作者user389955
相关产品推荐
相关产品推荐

