動態資料遮罩

適用于:Azure SQL Database Azure SQL 受控執行個體 Azure Synapse Analytics

Azure SQL Database、Azure SQL 受控執行個體與 Azure Synapse Analytics 都支援動態資料遮罩。 動態資料遮罩會對不具權限的使用者遮罩機密資料,從而限制其曝光。

動態資料遮罩可讓客戶在應用程式層級受到最小影響的情況下指定要顯示多少機密資料,而協助防止未經授權者存取機密資料。 這項原則式安全性功能會將機密資料隱藏在指定資料庫欄位的查詢結果集內,而資料庫中的資料則不會變更。

例如,話務中心的服務代表可能會藉由確認來電者電子郵件地址的數個字元來識別該來電者,但系統不應該對服務代表顯示完整的電子郵件地址。 您可以定義遮罩規則,遮罩任何查詢結果集中的所有電子郵件地址。 在另一個範例中,可以定義適當的資料遮罩來保護個人資料,以便開發人員在生產環境中進行疑難排解用途的查詢,且不會違反法務規定。

動態資料遮罩基本概念

您可以在 Azure 入口網站中設定動態資料遮罩原則,方法為在 SQL Database 設定窗格的 [安全性] 下,選取 [動態資料遮罩] 刀鋒視窗。 針對 SQL 受控執行個體,無法使用入口網站來設定這項功能。 如需相關資訊,請參閱 Dynamic Data Masking

動態資料遮罩原則

  • 從遮罩處理中排除的 SQL 使用者 - 一組 SQL 使用者或 Azure AD 身分識別,可在 SQL 查詢結果中取得未經遮罩處理的資料。 具有系統管理員權限的使用者永遠會從遮罩處理中排除,而且會看到沒有任何遮罩的原始資料。
  • 遮罩規則 - 一組規則,定義會遮罩處理的指定欄位和所使用的遮罩函數。 指定的欄位可使用資料庫結構描述名稱、資料表名稱和資料行名稱來定義。
  • 遮罩函數 - 一組方法,可控制不同案例的資料顯示性。
遮罩函數 遮罩邏輯
預設值 根據指定欄位的資料類型進行完整遮罩

• 如果字串資料類型的欄位大小少於 4 個字元 (nchar、ntext、nvarchar),請使用 XXXX 或更少 X。
• 針對數值資料類型 (bigint、bit、decimal、int、money、numeric、smallint、smallmoney、tinyint、float、real),使用零值。
• 針對日期/時間資料類型 (date、datetime2、datetime、datetimeoffset、smalldatetime、time),使用 01-01-1900 時間。
• 對於 SQL 變數,會使用目前類型的預設值。
• 對於 XML,會使用文件 <masked/>。
• 針對特殊資料類型 (時間戳記、資料表、hierarchyid、GUID、二進位值、影像、varbinary spatial 類型),使用空值。
信用卡 遮罩方法會公開指定欄位的末四碼,並新增常數字串做為信用卡格式的前置詞。

XXXX-XXXX-XXXX-1234
電子郵件 遮罩方法會公開第一個字母並以 XXX.com 取代網域,使用的常數字串前置詞會以電子郵件地址為格式。

aXX@XXXX.com
隨機數字 遮罩方法會產生一個隨機數字,其根據為選取的界限與實際資料類型。 如果指定的邊界相等,則遮罩函數是常數。

顯示用來產生亂數之遮罩方法的螢幕擷取畫面。
自訂文字 遮罩方法會公開第一個和最後一個字元,並在中間新增自訂填補字串。 如果原始字串小於公開的前置詞和後置詞,則只會使用填補字串。
prefix[padding]suffix

瀏覽窗格

DDM 建議引擎會將您資料庫中的特定欄位標示為潛在敏感性欄位,而這類欄位可能適合進行遮罩處理。 在入口網站的 [動態資料遮罩] 刀鋒視窗中,您會看到您的資料庫的建議資料行。 您只需要對一或多個資料行按一下 [新增遮罩],然後按一下 [儲存],以對這些欄位套用遮罩。

使用 T-SQL 管理動態資料遮罩

使用 PowerShell Cmdlet 為您的資料庫設定動態資料遮罩

資料遮罩原則

資料遮罩規則

使用 REST API 為您的資料庫設定動態資料遮罩

您可以使用 REST API,以程式設計方式管理資料遮罩原則和規則。 已發佈的 REST API 支援下列作業:

資料遮罩原則

  • 建立或更新:建立或更新資料庫資料遮罩原則。
  • 取得:取得資料庫資料遮罩原則。

資料遮罩規則

權限

以下是設定動態資料遮罩的內建角色:

以下是使用動態資料遮罩的必要動作:

讀取/寫入:

  • Microsoft.Sql/servers/databases/dataMaskingPolicies/* 讀取:
  • Microsoft.Sql/servers/databases/dataMaskingPolicies/read 寫入:
  • Microsoft.Sql/servers/databases/dataMaskingPolicies/write

若要深入了解搭配使用動態資料遮罩與 T-SQL 命令時的權限,請參閱權限

細微權限範例

防止未經授權存取敏感性資料,並防止藉由將其遮罩至不同資料庫層級的未經授權使用者來取得控制。 您可以授與資料庫層級、結構描述層級、資料表層級或資料行層級的 UNMASK 權限給使用者或加以撤銷。 使用 UNMASK 權限可提供更細微的方式來控制及限制未經授權存取資料庫中所儲存的資料,並改善資料安全性管理。

  1. 建立結構描述以包含使用者資料表

    CREATE SCHEMA Data; 
    GO 
    
  2. 建立具有遮罩資料行的資料表

    CREATE TABLE Data.Membership (
      MemberID int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED,
      FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(1, "xxxxx", 1)') NULL,
      LastName varchar(100) NOT NULL,
      Phone varchar(12) MASKED WITH (FUNCTION = 'default()') NULL,
      Email varchar(100) MASKED WITH (FUNCTION = 'email()') NOT NULL,
      DiscountCode smallint MASKED WITH (FUNCTION = 'random(1, 100)') NULL,
      BirthDay datetime MASKED WITH (FUNCTION = 'default()') NULL
    ); 
    
  3. 插入範例資料

    INSERT INTO Data.Membership (FirstName, LastName, Phone, Email, DiscountCode, BirthDay) 
    VALUES    
    ('Roberto', 'Tamburello', '555.123.4567', 'RTamburello@contoso.com', 10, '1985-01-25 03:25:05'),   
    ('Janice', 'Galvin', '555.123.4568', 'JGalvin@contoso.com.co', 5,'1990-05-14 11:30:00'),   
    ('Shakti', 'Menon', '555.123.4570', 'SMenon@contoso.net', 50,'2004-02-29 14:20:10'),   
    ('Zheng', 'Mu', '555.123.4569', 'ZMu@contoso.net', 40,'1990-03-01 06:00:00'); 
    
  4. 建立結構描述以包含服務資料表

    CREATE SCHEMA Service; 
    GO 
    
  5. 建立具有遮罩資料行的服務資料表

    CREATE TABLE Service.Feedback ( 
        MemberID int IDENTITY(1,1) NOT NULL PRIMARY KEY CLUSTERED, 
        Feedback varchar(100) MASKED WITH (FUNCTION = 'default()') NULL, 
        Rating int MASKED WITH (FUNCTION='default()'), 
        Received_On datetime 
        );
    
  6. 插入範例資料

    INSERT INTO Service.Feedback(Feedback,Rating,Received_On)
    VALUES  
    ('Good',4,'2022-01-25 11:25:05'),   
    ('Excellent', 5, '2021-12-22 08:10:07'),   
    ('Average', 3, '2021-09-15 09:00:00'); 
    
  7. 在資料庫中建立不同的使用者

    CREATE USER ServiceAttendant WITHOUT LOGIN;  
    GO
    
    CREATE USER ServiceLead WITHOUT LOGIN;  
    GO
    
    CREATE USER ServiceManager WITHOUT LOGIN;  
    GO  
    
    CREATE USER ServiceHead WITHOUT LOGIN;  
    GO
    
  8. 授與讀取權限給資料庫的使用者

    ALTER ROLE db_datareader ADD MEMBER ServiceAttendant; 
    
    ALTER ROLE db_datareader ADD MEMBER ServiceLead; 
    
    ALTER ROLE db_datareader ADD MEMBER ServiceManager; 
    
    ALTER ROLE db_datareader ADD MEMBER ServiceHead; 
    
  9. 授與不同的 UNMASK 權限給使用者

    --Grant column level UNMASK permission to ServiceAttendant  
    GRANT UNMASK ON Data.Membership(FirstName) TO ServiceAttendant;  
    
    -- Grant table level UNMASK permission to ServiceLead  
    GRANT UNMASK ON Data.Membership TO ServiceLead;  
    
    -- Grant schema level UNMASK permission to ServiceManager  
    GRANT UNMASK ON SCHEMA::Data TO ServiceManager;  
    GRANT UNMASK ON SCHEMA::Service TO ServiceManager;  
    
    --Grant database level UNMASK permission to ServiceHead;  
    GRANT UNMASK TO ServiceHead;
    
  10. 在使用者 ServiceAttendant 的內容下查詢資料

    EXECUTE AS USER='ServiceAttendant';  
    SELECT MemberID,FirstName,LastName,Phone,Email,BirthDay FROM Data.   Membership;  
    SELECT MemberID,Feedback,Rating FROM Service.Feedback;  
    REVERT; 
    
  11. 在使用者 ServiceLead 的內容下查詢資料

    EXECUTE AS USER='ServiceLead';  
    SELECT MemberID,FirstName,LastName,Phone,Email,BirthDay FROM Data.   Membership;  
    SELECT MemberID,Feedback,Rating FROM Service.Feedback;  
    REVERT; 
    
  12. 在使用者 ServiceManager 的內容下查詢資料

    EXECUTE AS USER='ServiceManager';  
    SELECT MemberID,FirstName,LastName,Phone,Email FROM Data.Membership;  
    SELECT MemberID,Feedback,Rating FROM Service.Feedback;  
    REVERT; 
    
  13. 在使用者 ServiceHead 的內容下查詢資料

    EXECUTE AS USER='ServiceHead';  
    SELECT MemberID,FirstName,LastName,Phone,Email,BirthDay FROM Data.Membership;  
    SELECT MemberID,Feedback,Rating FROM Service.Feedback;  
    REVERT;  
    
  14. 若要撤銷 UNMASK 權限,請使用下列 T-SQL 陳述式:

    REVOKE UNMASK ON Data.Membership(FirstName) FROM ServiceAttendant; 
    
    REVOKE UNMASK ON Data.Membership FROM ServiceLead; 
    
    REVOKE UNMASK ON SCHEMA::Data FROM ServiceManager; 
    
    REVOKE UNMASK ON SCHEMA::Service FROM ServiceManager; 
    
    REVOKE UNMASK FROM ServiceHead; 
    

另請參閱