我有一個包含靜態數據(用戶角色)的Rails應用程序中的小表。它不應該改變。我想知道是否有可能鎖定表以防止任何人(即開發人員)在生產中意外更改它。我可以在Rails中鎖定表嗎? (我應該嗎?)
或者我應該沒有把這些數據放入數據庫嗎?是否應該在某處進行硬編碼,以便使編輯變得更加困難,並且至少可以審計(git blame)?
我有一個包含靜態數據(用戶角色)的Rails應用程序中的小表。它不應該改變。我想知道是否有可能鎖定表以防止任何人(即開發人員)在生產中意外更改它。我可以在Rails中鎖定表嗎? (我應該嗎?)
或者我應該沒有把這些數據放入數據庫嗎?是否應該在某處進行硬編碼,以便使編輯變得更加困難,並且至少可以審計(git blame)?
正確的做法是使用權限。將表的所有權更改爲另一個用戶,並僅授予生產數據庫用戶SELECT。
我會說這些類型的東西正確的地方可能是數據庫。這樣,如果他們需要更改,可以在數據庫中更改它們,並且不必重新部署應用程序(假設它會注意到更改)。
你沒有問這個問題,但是你的措辭讓我想起了,所以我會說:無論如何你永遠不需要明確LOCK
一個PostgreSQL表。如果你認爲這是你需要做的事情,你應該確保你擔心的事情可以在MVCC下實際發生,並且交易不會爲你做正確的事情。
您可以使用觸發器來防止更新表(假設您無法添加新的db用戶)。
或者,使用視圖並確保所有讀取請求都通過它。 (可能通過去除對應表中的ActiveRecord類
我可能會利用attr_accesible
,如果你寫的東西,如:
class Role < ActiveRecord::Base
attr_accessible #none
end
你至少可以防止從任何轉讓但它並不妨礙通過數據庫訪問的開發人員進行任何直接修改。
我使用Heroku,所以我認爲創建一個新的數據庫用戶可能是不可能的。我會檢查。而且我們確實有一種情況,那就是靜態表被意外更改,因此我希望避免再次出現這種情況。謝謝! – pcg79 2012-02-07 14:54:42