我的Rails应用程序中有一个包含静态数据(用户角色)的小表。它不应该改变。我想知道是否可以锁定表格以防止任何人(即开发人员)在生产中意外更改它。
或者我应该没有将数据放入数据库中?它是否应该在某处进行硬编码以使编辑更加困难,至少可审计(git blame)?
答案 0 :(得分:1)
执行此操作的正确方法是使用权限。将表的所有权更改为另一个用户,并仅授予生产数据库用户SELECT。
我想说这些事情的正确位置可能就是数据库。这样,如果他们需要更改,您可以在数据库中更改它们,并且您不必重新部署应用程序(假设它会注意到更改)。
你没有问这个问题,但是你的措辞让我想起了所以我还是会说:你永远不需要用PostgreSQL显式地LOCK
表。如果您认为这是您需要做的事情,那么您应该确保您担心的事实在MVCC下实际发生并且交易不会为您做正确的事情。
答案 1 :(得分:1)
我可能会使用attr_accesible
如果您写的内容如下:
class Role < ActiveRecord::Base
attr_accessible #none
end
您至少可以阻止来自rails端的任何分配,但它不会阻止通过数据库访问的开发人员进行任何直接修改。
答案 2 :(得分:0)
您可以使用触发器来阻止对表的更新(假设您无法添加新的db用户)。
或者,使用视图并确保所有读取请求都通过它。 (可能通过删除与表对应的ActiveRecord类。