實作資料行層級安全性
資料行層級安全性 (CLS) 可讓您限制資料行存取,以便保護敏感性資料。 它提供對可存取特定資料片段人員的細微控制,增強資料倉儲的整體安全性。
保護敏感性資料
想像一下醫療保健產業中資料行層級安全性 (CLS) 的實際範例。 假設我們有一個名為 Patients 的資料表,其中包含下列資料行:PatientID、Name、Address、DateOfBirth 和 MedicalHistory。
MedicalHistory 資料行包含有關病患的敏感健康資訊。 根據醫療保健法規和隱私法,此資訊僅供醫生或護士等經授權醫療人員存取。
以下是在此案例中實作資料行層級安全性的方式:
識別敏感性資料行:在此情況下,
MedicalHistory資料行會識別為包含敏感性資料。定義存取角色:定義可存取
Doctor資料行的Nurse和MedicalHistory等角色。 其他角色,例如Receptionist或Patient,可能會無法存取此資料行。將角色指派給使用者:將適當的角色指派給倉儲中的每個使用者。 例如,使用者
DrSmith可能會獲指派Doctor角色,而使用者JohnDoe可能會獲指派Patient角色。實作存取控制:根據使用者的角色限制對
MedicalHistory資料行的存取。
資料行層級安全性可協助確保僅經授權的人員才能查看敏感性健康資訊,同時保護患者隱私權並遵守醫療保健法規。
設定資料行層級安全性
在最近探索的案例中,用於實作資料行層級安全性的語法可能如下所示:
-- Create roles
CREATE ROLE Doctor AUTHORIZATION dbo;
CREATE ROLE Nurse AUTHORIZATION dbo;
CREATE ROLE Receptionist AUTHORIZATION dbo;
CREATE ROLE Patient AUTHORIZATION dbo;
GO
-- Grant SELECT on all columns to all roles
GRANT SELECT ON dbo.Patients TO Doctor;
GRANT SELECT ON dbo.Patients TO Nurse;
GRANT SELECT ON dbo.Patients TO Receptionist;
GRANT SELECT ON dbo.Patients TO Patient;
GO
-- Deny SELECT on the MedicalHistory column to the Receptionist and Patient roles
DENY SELECT ON dbo.Patients (MedicalHistory) TO Receptionist;
DENY SELECT ON dbo.Patients (MedicalHistory) TO Patient;
GO
在此範例中,我們會先建立 Doctor、Nurse、Receptionist 和 Patient 角色。 然後,我們會將 SELECT 資料表中所有資料行的 Patients 權限授與所有角色。 最後,我們對 SELECT 拒絕 MedicalHistory 資料行上的 Receptionist 和 Patient 角色的授權。 這可確保只有具有 Doctor 或 Nurse 角色的使用者才能存取 MedicalHistory 資料行。
了解優點
在倉儲安全性領域中,兩種常用技術是資料行層級的安全性和檢視。 這兩種方法都可用來限制敏感性資料的存取,但它們會以不同的方式執行,並提供不同的優點。 下表提供了對這兩種技術在不同方面(如存取控制的細緻度、維護、效能、透明度和彈性)的比較分析。
此比較可協助您了解每個方法的優點和弱點,並引導您為特定應用程式需求選擇最適合的方法。
| 層面 | 資料行層級安全性 | 觀看次數 |
|---|---|---|
| 存取控制的細緻程度 | 允許更細微層級的控制。 可以為相同資料表內不同資料行上的不同使用者或角色指定不同的存取權限。 | 需要針對不同組權限建立不同檢視。 |
| 維護 | 權限會繫結至資料行本身,因此它們會自動配合資料表結構中的變更。 | 如果基礎資料表結構變更,可能需要更新檢視,以套用這些變更。 |
| 效能 | 這通常會更有效率,因為它會直接在資料表的資料上運作。 | 可能會造成效能額外負荷,特別是在結構很複雜,或基礎資料表容量很大時。 |
| 透明 | 對使用者而言,這些限制是透明的。 使用者會如同以往查詢資料表,而資料庫引擎會負責套用安全性規則。 | 使用者需要查詢不同的物件 (檢視而非資料表)。 |
| 彈性 | 相較於檢視較不具彈性。 | 非常有彈性,除了提供資料行層級安全性之外,還可以在檢視定義中包含 WHERE 子句,以提供資料列層級安全性。 這些功能也可以轉換數據(例如,透過計算衍生欄位),這在使用欄位層級安全性時是無法實現的。 |
是否使用資料行層級安全性或檢視將取決於應用程式的特定需求。 在將安全性變更套用至生產倉儲之前,一律務必先測試安全環境中的任何安全性變更。