Sql-Server
我應該明確拒絕更新不應更新的列嗎?
我習慣於在非常安全的環境中工作,因此我將權限設計得非常精細。我通常做的一件事是明確地讓
DENY
使用者能夠訪問UPDATE
不應該更新的列。例如:
create table dbo.something ( created_by varchar(50) not null, created_on datetimeoffset not null );
一旦設置了值,就不應更改這兩列。
DENY
因此,我會明確UPDATE
許可他們。最近,在一次團隊會議上,一位開發人員提出了確保欄位永不更新的邏輯應該包含在應用程序層而不是數據庫層中,以防“他們出於某種原因需要更新值”。對我來說,這聽起來像是典型的開發者心態(我知道,我曾經是其中的一員!)
我是我公司的高級架構師,我一直遵循使應用程序執行所需的最少權限的原則。所有權限都會定期審核。
在這種情況下,最佳做法是什麼?
爭論沒有意義。我總是希望控制項和約束盡可能接近數據。將其放在應用層意味著它只影響使用應用層的人,並且還假設程式碼沒有錯誤,並且這些程式碼路徑的安全性將是無懈可擊的。這些都是很大的假設。
如果他們絕對需要更新,那麼可以由不受顯式影響的人來完成
DENY
,或者可以暫時將人移到不受影響的角色中,或者DENY
可以暫時刪除。作為 DBA,這些對於您來說很容易設置審計。在應用程序中?沒那麼多。