View
當視圖可以限制一個人對行和/或列的訪問時,為什麼需要行級訪問?
所以我一直對vew的安全性和行級安全性之間的區別感到困惑。
所以我想我的一般問題是
當視圖可以限制一個人對行和/或列的訪問時,為什麼需要行級訪問?
我假設您是在 Microsoft SQL Server 的上下文中提出這個問題的,因為行級安全性是他們提供的一項功能。雖然使用視圖實現模擬行級安全性和使用 SQL Server 的行級安全性功能之間存在相似之處,但也有一些區別:
- 關注點分離-行級安全性從您的實體中抽像出安全部分,以允許更清潔和更簡單的程式碼。
- 可管理性- 使用Row-Level Security,您可以創建一個可以添加使用者的****策略實體。該策略利用一個功能,您可以在其中定義安全策略的邏輯。這消除了使用自定義表來儲存您的使用者及其訪問角色的需要。
- 可重用性- 您可以對多個表使用相同的策略,而無需編寫重複的邏輯。
- 靈活性- 您可以通過設置策略輕鬆打開和關閉任何表
STATE
的策略。- 性能- 通常,如果謂詞過於復雜,用於在視圖中模擬行級別安全性的自定義邏輯會對性能產生負面影響。通過從視圖的謂詞中刪除此邏輯並使用與Policy for Row-Level Security中使用的完全相同的邏輯創建一個內聯表值函式,我已經看到了巨大的性能改進。(我不完全知道為什麼,但是通過查看這兩種情況下的執行計劃,肯定存在差異,我認為這與安全邏輯被抽像出來並與****View中的謂詞分開應用有關。)
有關更多資訊,您可以閱讀 Microsoft 的行級安全文件。