วางแผนและใช้หน้ากากแบบไดนามิก

เสร็จสมบูรณ์เมื่อ

Azure SQL Database, Azure SQL Managed Instance และ Azure Synapse Analytics รองรับการมาสก์ข้อมูลแบบไดนามิก การมาสก์ข้อมูลแบบไดนามิกจํากัดการเปิดเผยข้อมูลที่ละเอียดอ่อนโดยการซ่อนไว้กับผู้ใช้ที่ไม่แสวงหาสิทธิ์

การมาสก์ข้อมูลแบบไดนามิกช่วยป้องกันการเข้าถึงข้อมูลที่ละเอียดอ่อนโดยไม่ได้รับอนุญาตโดยเปิดให้ลูกค้ากําหนดปริมาณข้อมูลที่สําคัญที่จะเปิดเผยโดยมีผลน้อยที่สุดในเลเยอร์ของแอปพลิเคชัน ซึ่งเป็นคุณลักษณะการรักษาความปลอดภัยตามนโยบายที่ซ่อนข้อมูลที่ละเอียดอ่อนในชุดผลลัพธ์ของคิวรีผ่านเขตข้อมูลฐานข้อมูลที่กําหนด ในขณะที่ข้อมูลในฐานข้อมูลไม่เปลี่ยนแปลง

ตัวอย่างเช่น ตัวแทนบริการที่ศูนย์บริการอาจระบุผู้โทรโดยยืนยันอักขระต่างๆ ของที่อยู่อีเมลของพวกเขา แต่ไม่ควรเปิดเผยที่อยู่อีเมลที่สมบูรณ์แก่ตัวแทนบริการ คุณสามารถกําหนดกฎการมาสก์ซึ่งจะซ่อนที่อยู่อีเมลทั้งหมดในชุดผลลัพธ์ของคิวรีต่าง ๆ อีกตัวอย่างหนึ่งคือ มาสก์ข้อมูลที่เหมาะสมสามารถกําหนดเพื่อปกป้องข้อมูลส่วนบุคคลเพื่อให้นักพัฒนาสามารถคิวรีสภาพแวดล้อมการผลิตเพื่อวัตถุประสงค์ในการแก้ไขปัญหาโดยไม่ละเมิดกฎระเบียบ

ข้อมูลพื้นฐานเกี่ยวกับการมาสก์ข้อมูลแบบไดนามิก

คุณตั้งค่านโยบายการมาสก์ข้อมูลแบบไดนามิกในพอร์ทัล Azure โดยการเลือก Blade มาสก์ข้อมูลแบบไดนามิกภายใต้การรักษาความปลอดภัยในบานหน้าต่างการกําหนดค่าฐานข้อมูล SQL ของคุณ

นโยบายการปกปิดข้อมูลแบบไดนามิก

  • ผู้ใช้ SQL ที่แยกออกจากการมาสก์ - ชุดผู้ใช้ SQL หรือข้อมูลประจําตัวของ Microsoft Entra ที่ได้รับข้อมูลที่ไม่ถูกวางในผลลัพธ์คิวรี SQL ผู้ใช้ที่มีสิทธิ์พิเศษของผู้ดูแลระบบจะถูกแยกออกจากการมาสก์และดูข้อมูลต้นฉบับโดยไม่ต้องใช้รูปแบบใด ๆ
  • กฎการมาสก์ - ชุดของกฎที่กําหนดเขตข้อมูลที่กําหนดที่จะมาสก์และฟังก์ชันการมาสก์ที่ใช้ เขตข้อมูลที่กําหนดสามารถกําหนดได้โดยใช้ชื่อโครงสร้างฐานข้อมูล ชื่อตาราง และชื่อคอลัมน์
  • ฟังก์ชันการมาสก์ - ชุดของวิธีการที่ควบคุมการเปิดเผยข้อมูลสําหรับสถานการณ์ที่แตกต่างกัน
ฟังก์ชัน คําอธิบาย ตัวอย่าง
เริ่ม ต้น การมาสก์เต็มรูปแบบตามชนิดข้อมูลของเขตข้อมูลที่กําหนด

สําหรับชนิดข้อมูลสตริง ให้ใช้ XXXX (หรือน้อยกว่า) ถ้าขนาดของเขตข้อมูลน้อยกว่า 4 อักขระ (char, nchar, varchar, nvarchar, text, ntext)

สําหรับชนิดข้อมูลตัวเลข ให้ใช้ค่าศูนย์ (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real)

สําหรับชนิดข้อมูลวันที่และเวลา ให้ใช้ 1900-01-01 00:00:00.000000 (วันที่, datetime2, datetime, datetimeoffset, smalldatetime, time)

สําหรับชนิดข้อมูลไบนารี ใช้ไบต์เดียวของค่า ASCII 0 (ไบนารี varbinary รูปภาพ)
ไวยากรณ์ข้อกําหนดคอลัมน์ตัวอย่าง: Phone# varchar(12) MASKED WITH (FUNCTION = 'default()') NULL

ตัวอย่างของไวยากรณ์แสดงแทน: ALTER COLUMN Gender ADD MASKED WITH (FUNCTION = 'default()')
อีเมล วิธีการมาสก์ที่แสดงตัวอักษรแรกของที่อยู่อีเมลและคําต่อท้ายคงที่ ".com" ในรูปแบบที่อยู่อีเมล aXXX@XXXX.com ไวยากรณ์ข้อกําหนดตัวอย่าง: EMAIL varchar(100) MASKED WITH (FUNCTION = 'email()') NULL

ตัวอย่างของไวยากรณ์แสดงแทน: ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()')
สุ่ม ฟังก์ชันมาสก์แบบสุ่มสําหรับใช้กับชนิดตัวเลขใด ๆ เพื่อมาสก์ค่าเดิมด้วยค่าสุ่มภายในช่วงที่ระบุ ไวยากรณ์ข้อกําหนดตัวอย่าง: Account_Number bigint MASKED WITH (FUNCTION = 'random([start range], [end range])')

ตัวอย่างของไวยากรณ์แสดงแทน: ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)')
สตริงแบบกําหนดเอง วิธีการมาสก์ที่แสดงตัวอักษรตัวแรกและตัวสุดท้าย และเพิ่มสตริงช่องว่างภายในแบบกําหนดเองตรงกลาง คํานําหน้า[padding], suffix

ถ้าค่าเดิมสั้นเกินไปเพื่อทําให้รูปแบบทั้งหมดเสร็จสมบูรณ์ ส่วนหนึ่งของคํานําหน้าหรือคําต่อท้ายจะไม่แสดงขึ้น
ไวยากรณ์ข้อกําหนดตัวอย่าง: FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)') NULL

ตัวอย่างของไวยากรณ์แสดงแทน: คอลัมน์ ALTER [หมายเลขโทรศัพท์] เพิ่ม MASKED WITH (ฟังก์ชัน = 'บางส่วน(1,"XXXXXXX",0)')

ซึ่งจะเปลี่ยนหมายเลขโทรศัพท์เช่น 555.123.1234 เป็น 5XXXXXX

ตัวอย่างเพิ่มเติม:

คอลัมน์ ALTER [หมายเลขโทรศัพท์] เพิ่ม MASKED ด้วย (ฟังก์ชัน = 'บางส่วน(5,"XXXXXXX",0)')

ซึ่งจะเปลี่ยนหมายเลขโทรศัพท์เช่น 555.123.1234 เป็น 555.1XXXXXX
วันที่เวลา นําไปใช้กับ: SQL Server 2022 (16.x)

วิธีการมาสก์สําหรับคอลัมน์ที่กําหนดด้วยชนิดข้อมูล datetime, datetime2, date, time, datetimeoffset, smalldatetime ซึ่งช่วยมาสก์ปี => datetime("Y"), month=> datetime("M"), day=>datetime("D"), hour=>datetime("h"), minute=>datetime("m"), หรือ seconds=>datetime("s") ของวัน
ตัวอย่างของวิธีการมาสก์ปีของค่าวันที่เวลา:

ALTER COLUMN BirthDay เพิ่ม MASKED ด้วย (ฟังก์ชัน = 'datetime("Y")')

ตัวอย่างของวิธีการมาสก์เดือนของค่าวันที่เวลา:

ALTER COLUMN BirthDay เพิ่ม MASKED ด้วย (ฟังก์ชัน = 'datetime("M")')

ตัวอย่างของวิธีการมาสก์นาทีของค่าวันที่เวลา:

ALTER COLUMN BirthDay ADD MASKED WITH (ฟังก์ชัน = 'datetime("m")')
ฟังก์ชันการมาสก์ ตรรกะการมาสก์
เริ่ม ต้น การมาสก์เต็มรูปแบบตามชนิดข้อมูลของเขตข้อมูลที่กําหนด

* ใช้ XXXX (หรือน้อยกว่า) ถ้าขนาดของเขตข้อมูลน้อยกว่า 4 อักขระสําหรับชนิดข้อมูลสตริง (nchar, ntext, nvarchar)
* ใช้ค่าศูนย์สําหรับชนิดข้อมูลตัวเลข (bigint, bit, decimal, int, money, numeric, smallint, smallmoney, tinyint, float, real)
* ใช้ 1900-01-01 สําหรับชนิดข้อมูลวันที่/เวลา (วันที่, วันที่เวลา 2, วันที่เวลา, datetimeoffset, smalldatetime, time)
* สําหรับ sql_variant จะใช้ค่าเริ่มต้นของชนิดปัจจุบัน
* สําหรับ XML เอกสาร <ที่มาสก์ /> ถูกใช้
* ใช้ค่าว่างสําหรับชนิดข้อมูลพิเศษ (ประทับเวลา ตาราง HierarchyID ตัวระบุที่ไม่ซ้ํากัน ไบนารี รูปภาพ varbinary และชนิดเชิงพื้นที่)
บัตรเครดิต วิธีการมาสก์ ซึ่งแสดงสี่หลักสุดท้ายของเขตข้อมูลที่กําหนดและเพิ่มสตริงคงที่เป็นคํานําหน้าในรูปแบบของบัตรเครดิต

XXXX-XXXX-XXXX-1234
อีเมล วิธีการมาสก์ซึ่งแสดงตัวอักษรแรกและแทนที่โดเมนด้วย XXX.com โดยใช้คํานําหน้าสตริงคงที่ในรูปแบบของที่อยู่อีเมล

aXX@XXXX.com
ตัวเลขสุ่ม วิธีการมาสก์ ซึ่งสร้างตัวเลขสุ่มตามขอบเขตที่เลือกและชนิดข้อมูลจริง หากขอบเขตที่กําหนดเท่ากัน ฟังก์ชันการมาสก์จะเป็นตัวเลขคงที่

สกรีนช็อตที่แสดงวิธีการมาสก์สําหรับการสร้างตัวเลขแบบสุ่ม
ข้อความแบบกําหนดเอง วิธีการมาสก์ ซึ่งแสดงอักขระตัวแรกและตัวสุดท้าย และเพิ่มสตริงช่องว่างภายในแบบกําหนดเองตรงกลาง ถ้าสตริงเดิมสั้นกว่าคํานําหน้าและคําต่อท้ายที่แสดงอยู่ จะใช้เฉพาะสตริงช่องว่างภายในเท่านั้น

คํานําหน้า[ช่องว่างภายใน]คําต่อท้าย

สกรีนช็อตของบานหน้าต่างนําทาง

กลไกจัดการคําแนะนํา DDM จะตั้งค่าสถานะเขตข้อมูลบางอย่างจากฐานข้อมูลของคุณเป็นเขตข้อมูลที่อาจมีความสําคัญ ซึ่งอาจเป็นตัวเลือกที่ดีสําหรับการมาสก์ ในบานหน้าต่าง Dynamic Data Masking ในพอร์ทัล คุณจะเห็นคอลัมน์ที่แนะนําสําหรับฐานข้อมูลของคุณ เลือกเพิ่มรูปแบบสําหรับหนึ่งหรือหลายคอลัมน์ จากนั้นเลือกฟังก์ชันมาสก์ที่เหมาะสมและเลือกบันทึกเพื่อใช้รูปแบบสําหรับเขตข้อมูลเหล่านี้

จัดการ data masking แบบไดนามิกโดยใช้ T-SQL

ตั้งค่าการมาสก์ข้อมูลแบบไดนามิกสําหรับฐานข้อมูลของคุณโดยใช้ cmdlet ของ PowerShell

นโยบายการปกปิดข้อมูล

กฎการปกปิดข้อมูล

ตั้งค่าการมาสก์ข้อมูลแบบไดนามิกสําหรับฐานข้อมูลของคุณโดยใช้ 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 ที่ระดับฐานข้อมูล ระดับ schema ระดับตาราง หรือระดับคอลัมน์กับผู้ใช้ฐานข้อมูลหรือบทบาทใด ๆ เมื่อรวมกับการรับรองความถูกต้องของ Microsoft Entra จะสามารถจัดการสิทธิ์ UNMASK สําหรับผู้ใช้ กลุ่ม และแอปพลิเคชันที่ถูกดูแลภายในสภาพแวดล้อม Azure ของคุณได้ สิทธิ์ UNMASK ให้วิธีการที่ละเอียดในการควบคุมและจํากัดการเข้าถึงข้อมูลที่จัดเก็บไว้ในฐานข้อมูลโดยไม่ได้รับอนุญาต และปรับปรุงการจัดการความปลอดภัยของข้อมูล

  1. สร้าง schema เพื่อประกอบด้วยตารางผู้ใช้:

    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. สร้าง schema เพื่อประกอบด้วยตารางบริการ:

    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, BirthDay
    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;