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

如何为AWS RDS Postgres新用户角色添加超级用户权限以安装扩展?

解决AWS RDS Postgres中普通用户无法创建扩展的问题

首先得明确:AWS RDS Postgres作为托管服务,不允许将普通用户直接提升为超级用户(这是安全限制),但我们有两种更合理的方式让prod和dev用户使用目标扩展:

方法1:先创建扩展,再授予使用权限(推荐,遵循最小权限原则)

这种方式是用拥有rds_superuser权限的用户(比如你提到的test用户)提前创建好扩展,然后把扩展的使用权限开放给prod/dev用户。

具体步骤:

  1. 用test用户连接到RDS实例:
psql -h blabla.us-east-1.rds.amazonaws.com -p 5432 -U test -d prod
  1. 在test用户的会话中创建需要的扩展:
CREATE EXTENSION IF NOT EXISTS fuzzystrmatch;
CREATE EXTENSION IF NOT EXISTS pg_trgm;
CREATE EXTENSION IF NOT EXISTS unaccent;
  1. 将这些扩展的使用权限授予prod用户(同理执行给dev用户即可):
GRANT USAGE ON EXTENSION fuzzystrmatch TO prod;
GRANT USAGE ON EXTENSION pg_trgm TO prod;
GRANT USAGE ON EXTENSION unaccent TO prod;

完成后,你的Rails应用用prod用户连接时,就能正常使用这些扩展提供的函数(比如levenshtein、similarity等)了。迁移里的enable_extension语句可以保留,因为当扩展已存在时,这条语句不会报错,只是确认扩展可用。

方法2:授予rds_superuser角色(不推荐,权限过大)

如果你确实需要让prod/dev用户拥有创建扩展的权限(以及其他高级操作权限),可以将AWS提供的rds_superuser角色授予这些用户:

  1. 同样用test用户连接RDS实例,执行:
GRANT rds_superuser TO prod;
GRANT rds_superuser TO dev;

⚠️ 注意:这个角色拥有很多敏感权限(比如创建/删除角色、修改数据库配置等),所以只在绝对必要时使用,尽量遵循最小权限原则。

为什么之前的尝试失败?

  • 你的Rails迁移用prod用户执行,而prod默认没有创建扩展的权限(RDS对普通用户做了权限限制),所以enable_extension或CREATE EXTENSION语句会抛出权限错误。
  • SSH连接后用prod用户执行创建扩展,同样因为缺少超级权限级别的权限而失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:17:32