تخطيط وتنفيذ قناع ديناميكي
تدعم قاعدة بيانات Azure SQL ومثيل Azure SQL المدار وAzure Synapse Analytics إخفاء البيانات الديناميكية. يحد إخفاء البيانات الديناميكي من التعرض للبيانات الحساسة عن طريق إخفاءها للمستخدمين غير المميزين.
يساعد إخفاء البيانات الديناميكي على منع الوصول غير المصرح به إلى البيانات الحساسة من خلال تمكين العملاء من تحديد مقدار البيانات الحساسة التي يجب الكشف عنها بأقل تأثير على طبقة التطبيق. إنها ميزة أمان مستندة إلى النهج تخفي البيانات الحساسة في مجموعة نتائج الاستعلام عبر حقول قاعدة البيانات المعينة، بينما لا يتم تغيير البيانات الموجودة في قاعدة البيانات.
على سبيل المثال، قد يقوم ممثل الخدمة في مركز الاتصال بتحديد المتصل من خلال تأكيد عدة أحرف من عنوان بريده الإلكتروني، ولكن لا ينبغي الكشف عن عنوان البريد الإلكتروني بالكامل لممثل الخدمة. يمكن تعريف قاعدة الإخفاء على أنها تخفي عنوان البريد الإلكتروني بالكامل في مجموعة النتائج لأي استعلام. كمثال آخر، يمكن تعريف قناع بيانات مناسب لحماية البيانات الشخصية، بحيث يمكن للمطور الاستعلام عن بيئات الإنتاج لأغراض استكشاف الأخطاء وإصلاحها دون انتهاك لوائح التوافق.
أساسيات إخفاء البيانات الديناميكية
يمكنك إعداد سياسة إخفاء البيانات الديناميكية في مدخل Azure عن طريق تحديد وحدة Dynamic Data Masking ضمن Security في جزء تكوين قاعدة بيانات 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.00000000 (التاريخ، التاريخ والوقت2، التاريخ والوقت، datetimeoffset، smalldatetime، الوقت). بالنسبة لأنواع البيانات الثنائية، استخدم بايت واحد من قيمة ASCII 0 (ثنائي، متغير، صورة). |
مثال على بناء جملة تعريف العمود: 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 (الدالة = 'random([start range], [end range])') مثال على بناء الجملة البديل: ALTER COLUMN [Month] ADD MASKED WITH (FUNCTION = 'random(1, 12)') |
| سلسلة مخصصة | أسلوب الإخفاء الذي يعرض الأحرف الأولى والأخيرة ويضيف سلسلة ترك مساحة مخصصة في المنتصف. بادئة،[ترك مساحة]، لاحقة إذا كانت القيمة الأصلية قصيرة جدا بحيث لا يمكن إكمال القناع بأكمله، فلن يتم كشف جزء من البادئة أو اللاحقة. |
مثال على بناء جملة التعريف: FirstName varchar(100) MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)') NULL مثال على تغيير بناء الجملة: ALTER COLUMN [رقم الهاتف] ADD MASKED WITH (FUNCTION = 'partial(1,"XXXXXXX",0)') يؤدي هذا إلى تحويل رقم هاتف مثل 555.123.1234 إلى 5XXXXXXX. مثال إضافي: ALTER COLUMN [رقم الهاتف] إضافة مقنع ب (الوظيفة = 'جزئي (5,"XXXXXXX",0)') يؤدي ذلك إلى تحويل رقم هاتف مثل 555.123.1234 إلى 555.1XXXXXXX. |
| التاريخ/الوقت | ينطبق على: SQL Server 2022 (16.x) أسلوب الإخفاء للعمود المحدد بنوع البيانات datetime وdatetime2 والتاريخ والوقت وdatetimeoffset وs smalldatetime. يساعد على إخفاء السنة => التاريخ والوقت("Y")، أو الشهر=> التاريخ والوقت("M")، أو اليوم =>التاريخ والوقت("D")، أو الساعة => التاريخ والوقت("h")، أو دقيقة => التاريخ والوقت ("m")، أو الثوان => التاريخ والوقت ("s") من اليوم. |
مثال على كيفية إخفاء سنة قيمة التاريخ والوقت: تغيير العمود يوم الميلاد إضافة مقنع باستخدام (الوظيفة = 'التاريخ والوقت("Y")') مثال على كيفية إخفاء شهر قيمة التاريخ والوقت: تغيير العمود يوم الميلاد إضافة مقنع باستخدام (الدالة = 'التاريخ والوقت("M")') مثال على كيفية إخفاء دقيقة قيمة التاريخ والوقت: تغيير العمود يوم الميلاد إضافة مقنع باستخدام (الدالة = 'التاريخ والوقت("م")') |
| وظيفة الإخفاء | منطق الإخفاء |
|---|---|
| الإعداد الافتراضي | إخفاء كامل وفقا لأنواع البيانات في الحقول المعينة * استخدم XXXX (أو أقل) إذا كان حجم الحقل أقل من 4 أحرف لنوع بيانات السلسلة (nchar، ntext، nvarchar). * استخدم قيمة صفرية أنواع البيانات الرقمية (bigint، بت، عشري، int، المال، الرقمي، smallint، smallmoney، tinyint، float، real). * استخدم 1900-01-01 أنواع بيانات التاريخ/الوقت (التاريخ والوقت2 والتاريخ والوقت و datetimeoffset وs smalldatetime والوقت). * بالنسبة sql_variant، يتم استخدام القيمة الافتراضية للنوع الحالي. * بالنسبة إلى XML، يتم استخدام المستند <المقنع /> . * استخدم قيمة فارغة لنوع البيانات الخاصة (الطابع الزمني والجدول و HierarchyID و uniqueidentifier و binary و image و varbinary و spatial types). |
| بطاقة الائتمان | أسلوب إخفاء يعرض الأرقام الأربعة الأخيرة في الحقول المعينة، ويضيف سلسلة ثابتة كبادئة في شكل بطاقة ائتمان. XXXX-XXXX-XXXX-1234 |
| البريد الإلكتروني | أسلوب إخفاء يعرض الحرف الأول ويستبدل المجال بـ XXX.com باستخدام بادئة سلسلة ثابتة في شكل عنوان بريد إلكتروني. aXX@XXXX.com |
| رقم عشوائي | أسلوب إخفاء يولد رقما عشوائيا وفقا للحدود المحددة وأنواع البيانات الفعلية. إذا كانت الحدود المعينة متساوية، فإن دالة الإخفاء هي رقم ثابت.
|
| نص مخصص | أسلوب إخفاء يعرض الأحرف الأولى والأخيرة ويضيف سلسلة حشو مخصصة في الوسط. إذا كانت السلسلة الأصلية أقصر من البادئة المكشوفة واللاحقة، تُستخدم سلسلة الحشو فقط. prefix[padding]suffix
|
الحقول الموصى بها للقناع
يضع محرك توصيات DDM علامات على حقول معينة من قاعدة البيانات كالحقول الحساسة المحتملة، والتي قد تكون مرشحة جيدة للإخفاء. في جزء إخفاء البيانات الديناميكية في المدخل، سترى الأعمدة الموصى بها لقاعدة البيانات الخاصة بك. حدد إضافة قناع لعمود واحد أو أكثر، ثم حدد دالة الإخفاء المناسبة وحدد حفظ، لتطبيق قناع لهذه الحقول.
إدارة إخفاء البيانات الديناميكية باستخدام T-SQL
- لإنشاء قناع بيانات ديناميكية، راجع إنشاء قناع بيانات ديناميكي.
- لإضافة قناع أو تحريره على عمود موجود، راجع إضافة قناع أو تحريره على عمود موجود.
- لمنح أذونات لعرض البيانات غير المقنعة/المخفية، راجع منح أذونات لعرض البيانات غير المقنعة.
- لإسقاط قناع بيانات ديناميكية، راجع إسقاط قناع بيانات ديناميكية.
جهز إخفاء البيانات الديناميكية لقاعدة البيانات باستخدام Cmdlets PowerShell
نُهج إخفاء البيانات
قواعد إخفاء البيانات
- Get-AzSqlDatabaseDataMaskingRule
- New-AzSqlDatabaseDataMaskingRule
- Remove-AzSqlDatabaseDataMaskingRule
- Set-AzSqlDatabaseDataMaskingRule
جهز إخفاء البيانات الديناميكية لقاعدة البيانات باستخدام واجهة برمجة تطبيقات REST
يمكنك استخدام واجهة برمجة تطبيقات REST لإدارة نهج وقواعد إخفاء البيانات برمجيا. تدعم واجهة برمجة تطبيقات REST المنشورة العمليات التالية:
نُهج إخفاء البيانات
- إنشاء أو تحديث: إنشاء نهج إخفاء بيانات قاعدة بيانات أو تحديثه.
- الحصول على: الحصول على نهج إخفاء بيانات قاعدة بيانات.
قواعد إخفاء البيانات
- إنشاء أو تحديث: إنشاء قواعد إخفاء بيانات قاعدة بيانات أو تحديثها.
- السرد حسب قاعدة البيانات: يحصل على قائمة قواعد إخفاء بيانات قاعدة البيانات.
الأذونات
هذه هي الأدوار المضمنة لتكوين إخفاء البيانات الديناميكية:
هذه هي الإجراءات المطلوبة لاستخدام إخفاء البيانات الديناميكية:
قراءة / كتابة:
Microsoft.Sql/servers/databases/dataMaskingPolicies/*
قرأ:
Microsoft.Sql/servers/databases/dataMaskingPolicies/read
يكتب:
Microsoft.Sql/servers/databases/dataMaskingPolicies/write
لمعرفة المزيد حول الأذونات عند استخدام إخفاء البيانات الديناميكية مع الأمر T-SQL، راجع أذونات
مثال على الإذن متعدد المستويات
منع الوصول غير المصرح به إلى البيانات الحساسة والتحكم عن طريق إخفاءها لمستخدم غير مصرح به على مستويات مختلفة من قاعدة البيانات. يمكنك منح أذونات UNMASK أو إبطالها على مستوى قاعدة البيانات أو مستوى المخطط أو مستوى الجدول أو على مستوى العمود لأي مستخدم أو دور لقاعدة البيانات. جنبا إلى جنب مع مصادقة Microsoft Entra، يمكن إدارة أذونات UNMASK للمستخدمين والمجموعات والتطبيقات التي يتم الاحتفاظ بها داخل بيئة Azure الخاصة بك. يوفر إذن UNMASK طريقة دقيقة للتحكم في الوصول غير المصرح به إلى البيانات المخزنة في قاعدة البيانات والحد منه وتحسين إدارة أمان البيانات.
إنشاء مخطط لاحتواء جداول المستخدم:
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');إنشاء مخطط لاحتواء جداول الخدمة:
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;