วางแผนและใช้หน้ากากแบบไดนามิก
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
- เมื่อต้องการสร้างรูปแบบข้อมูลแบบไดนามิก ให้ดู การสร้างรูปแบบข้อมูลแบบไดนามิก
- เมื่อต้องการเพิ่มหรือแก้ไขรูปแบบบนคอลัมน์ที่มีอยู่ ให้ดู การเพิ่มหรือการแก้ไขรูปแบบบนคอลัมน์ที่มีอยู่
- เมื่อต้องให้สิทธิ์ในการดูข้อมูลที่ไม่ได้สร้าง ให้ดู การให้สิทธิ์ในการดูข้อมูลที่ไม่ได้คั่นด้วย
- เมื่อต้องการวางรูปแบบข้อมูลแบบไดนามิก ให้ดูที่ วางData Mask แบบไดนามิก
ตั้งค่าการมาสก์ข้อมูลแบบไดนามิกสําหรับฐานข้อมูลของคุณโดยใช้ cmdlet ของ PowerShell
นโยบายการปกปิดข้อมูล
กฎการปกปิดข้อมูล
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
ตั้งค่าการมาสก์ข้อมูลแบบไดนามิกสําหรับฐานข้อมูลของคุณโดยใช้ REST API
คุณสามารถใช้ REST API เพื่อจัดการนโยบายการปกปิดข้อมูลและกฎได้ทางโปรแกรม REST API ที่เผยแพร่สนับสนุนการดําเนินการต่อไปนี้:
นโยบายการปกปิดข้อมูล
- สร้างหรืออัปเดต: สร้างหรืออัปเดตนโยบายการปกปิดข้อมูลฐานข้อมูล
- รับ: รับนโยบายการปกปิดข้อมูลฐานข้อมูล
กฎการปกปิดข้อมูล
- สร้างหรืออัปเดต: สร้างหรืออัปเดตกฎการปกปิดข้อมูลฐานข้อมูล
- รายการตามฐานข้อมูล: รับรายการของกฎการปกปิดข้อมูลฐานข้อมูล
สิทธิ์
ต่อไปนี้คือบทบาทที่มีอยู่ภายในเพื่อกําหนดค่าการมาสก์ข้อมูลแบบไดนามิกคือ:
- ของตัวจัดการความปลอดภัย SQL
- ผู้สนับสนุน SQL DB
- ผู้สนับสนุน SQL Server
ต่อไปนี้คือการดําเนินการที่จําเป็นเพื่อใช้การมาสก์ข้อมูลแบบไดนามิก:
อ่าน/เขียน:
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 ให้วิธีการที่ละเอียดในการควบคุมและจํากัดการเข้าถึงข้อมูลที่จัดเก็บไว้ในฐานข้อมูลโดยไม่ได้รับอนุญาต และปรับปรุงการจัดการความปลอดภัยของข้อมูล
สร้าง schema เพื่อประกอบด้วยตารางผู้ใช้:
CREATE SCHEMA Data; GOสร้างตารางที่มีคอลัมน์ที่ถูกมาสก์:
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 );แทรกข้อมูลตัวอย่าง:
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');สร้าง schema เพื่อประกอบด้วยตารางบริการ:
CREATE SCHEMA Service; GOสร้างตารางบริการที่มีคอลัมน์ที่ถูกมาสก์:
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 );แทรกข้อมูลตัวอย่าง:
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');สร้างผู้ใช้อื่นในฐานข้อมูล:
CREATE USER ServiceAttendant WITHOUT LOGIN; GO CREATE USER ServiceLead WITHOUT LOGIN; GO CREATE USER ServiceManager WITHOUT LOGIN; GO CREATE USER ServiceHead WITHOUT LOGIN; GOให้สิทธิ์การอ่านแก่ผู้ใช้ในฐานข้อมูล:
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;ให้สิทธิ์ 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;คิวรีข้อมูลภายใต้บริบทของผู้ใช้
ServiceAttendant:EXECUTE AS USER = 'ServiceAttendant'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;คิวรีข้อมูลภายใต้บริบทของผู้ใช้
ServiceLead:EXECUTE AS USER = 'ServiceLead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;คิวรีข้อมูลภายใต้บริบทของผู้ใช้
ServiceManager:EXECUTE AS USER = 'ServiceManager'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;คิวรีข้อมูลภายใต้บริบทของผู้ใช้
ServiceHead:EXECUTE AS USER = 'ServiceHead'; SELECT MemberID, FirstName, LastName, Phone, Email, BirthDay FROM Data.Membership; SELECT MemberID, Feedback, Rating FROM Service.Feedback; REVERT;เมื่อต้องการเพิกถอนสิทธิ์ 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;