我在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的脚本?
答案 0 :(得分:3)
您可以使用Postgres“ALTER DEFAULT PRIVILEGES
为所有新创建的表格提供automatically assign the rights到 production 。
或者,您可以编写自定义Capistrano任务来设置通过after "deploy:migrate", "mycustomtaskname"
挂钩调用的权限。 This pastie可能会给你一些关于如何通过Capistrano与pgsql交互的好提示,例如如何以交互方式提供密码。