【问题标题】:Rails migrations & PostgreSQL: separate user for migration and setting privileges for production userRails 迁移和 PostgreSQL:用于迁移的单独用户和为生产用户设置权限
【发布时间】:2012-05-23 08:32:53
【问题描述】:

我在 postgresql 中有两个用户,其中一个名为 migration,在 Rails 在生产服务器上运行迁移时使用。该用户拥有生产数据库。我还有production 用户,该用户应该只有以下权限:生产数据库上的SELECT, INSERT, UPDATE, DELETE

问题是,每次创建新表时,我都必须在 psql 中手动运行:

GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO production;

-- next line is needed for each new table which has an auto incrementing field, in this case - table `users`
GRANT USAGE, SELECT ON SEQUENCE users_id_seq TO production;

因为production 用户对新创建的表的权限不会自动设置。运行迁移时自动执行此操作的最佳方法是什么?任何可用于 Rails/Capistrano 的脚本?

【问题讨论】:

  • 默认权限对您有用吗?我有一个非常相似的问题,除了它与我的备份软件有关。每次创建新表时,备份用户都无法读取它...但是我正在使用默认权限,从 \ddp 可以清楚地看到。

标签: ruby-on-rails postgresql privileges rails-migrations


【解决方案1】:

您可以使用 Postgres 的 ALTER DEFAULT PRIVILEGES 将其 automatically assign the rights 用于生产所有新创建的表。

或者,您可以编写自定义 Capistrano 任务来设置通过 after "deploy:migrate", "mycustomtaskname" 挂钩调用的权限。 This pastie 可能会给你一些关于如何通过 Capistrano 与 pgsql 交互的好提示,例如如何以交互方式提供密码。

【讨论】:

  • 谢谢,看起来ALTER DEFAULT PRIVILIGES 可以让我免于编写自定义 Capistrano 任务,并且可以很好地替换我的问题中的两个 GRANT 语句。我会在测试第一个解决方案的效果后立即将答案标记为正确。
猜你喜欢
  • 1970-01-01
  • 2015-05-02
  • 1970-01-01
  • 2010-12-30
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
  • 2019-01-29
  • 2014-08-09
相关资源
最近更新 更多