开发者社区 问答 正文

RDS for PostgreSQL无法建只读用户的问题讨论

在阿里云RDS中的PostgreSQL数据库中,超级用户是没有给到最终用户的,而是给了一个比较大权限的用户,这个用户可以创建数据库,可以创建用户,在通常情况下都是够用的。最近业务方给我提了一个需求,需要建一个只读用户,这个只读用户不能有DDL的权限。目前发现在阿里云RDS提供的PostgreSQL数据库中,无法满足此需要,原因是,任何用户都能创建表,无法禁止用户创建表的权限,更深层次的原因为:


1. 原因是模板数据库template1中的有一个名称为“public”的schema,这个“public”的schema的属主是超级用户,而这个超级用户阿里云没有给到最终用户。而用户自己创建出来的数据库都是从template1拷贝的,所以用户创建出来的数据库中也有一个名称为“public”的schema,而这个“public”的schema的属主仍然是原先的超级用户,而任何人都有在这个“public”的schema中创建表的权限,而因为我们这些RDS使用用户没有超级用户的权限,所以无法用“revoke create on schema public from public”的方法取消任何用户在此schema建表的权限。而又因为这个“public”的schema的属主是超级用户,我们也无法删除掉这个schema。


目前我们自己是无法解决此问题,只能由阿里云来解决,解决的建议方法如下:


1. 建议阿里云默认创建出来的实例把在schema “public”中创建表的权限回收。
2.  再创建一个的模板数据,如名称为template2,)然把这个模板数据库中的public schema删除掉。
   create database template2;
  UPDATE pg_database SET datistemplate='true' WHERE datname='template2';
  drop schema public;
  这样用户可以从template2复制出一个数据库:
  create database userdb01 template template2;
这样建出来的数据库userdb01中是没有“public”这个schema的,用户如果想使用“public”这个schema,可以自己建,因为是用户自己建的“public”的这个schema,这个“public”的属主是用户自己,而不是阿里云的超级用户,这样用户想让谁能在这个“public”的schema中创建表或其它权限,他都可以直接赋权了。

展开
收起
yxdev 2016-11-11 18:55:08 3364 分享 版权
阿里云 AI 助理回答

您提出的需求和建议非常合理,但需要注意的是,直接修改阿里云RDS PostgreSQL服务的默认设置或模板数据库通常是不可行的,因为这些改动涉及到所有用户的通用配置和安全性。不过,针对您的需求,有几种变通的方法可以在现有的权限体系下实现只读用户的创建:

方法1:使用自定义Schema

  1. 创建自定义Schema:作为DBA或者拥有较高权限的用户,您可以创建一个新的Schema(非public),例如readonly_schema
  2. 转移对象:将需要只读访问的表和视图等对象从public Schema移动到新的readonly_schema中。
  3. 分配权限:为需要只读访问的用户授予在readonly_schema中的SELECT权限,而不给予CREATE权限。

方法2:细粒度权限控制

虽然不能直接禁止在public Schema中创建表,但可以通过以下方式间接实现限制:

  1. 撤销公共权限:尝试撤销public角色在public Schema上的CREATE权限,尽管这可能因超级用户权限问题而受限,但在某些特定版本或配置下可能可行。

    REVOKE CREATE ON SCHEMA public FROM PUBLIC;
    
  2. 创建角色与权限管理:为每个用户或一组用户创建特定的角色,并仅向这些角色授予所需的最小权限集,避免直接给用户赋予过多权限。

方法3:请求阿里云支持

如果上述方法均无法满足您的需求,最直接的方式是通过阿里云官方渠道(如工单系统)提交技术支持请求,详细说明您的场景和需求。虽然直接修改模板数据库如您所建议的操作可能不在客户可控范围内,但可以询问是否有其他高级配置选项、定制服务或是未来产品更新计划能够解决这一问题。

注意事项

  • 在进行任何权限调整前,请确保充分测试,以免影响现有业务运行。
  • 考虑数据安全性和合规性,遵循最小权限原则进行权限分配。
  • 阿里云RDS服务可能会随着用户反馈和技术进步不断优化,定期查看官方文档获取最新功能信息。

希望这些建议能对您有所帮助!

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答