- سياسات الإخفاء (ClickHouse Cloud، 25.12+): إخفاء ديناميكي مدمج يُطبَّق وقت الاستعلام لمستخدمين/أدوار محددة
- String replacement functions: إخفاء أساسي باستخدام الدوال المضمنة
- Masked views: إنشاء طرق عرض بمنطق تحويل
- Materialized columns: تخزين نُسخ مخفية إلى جانب البيانات الأصلية
- قواعد إخفاء الاستعلامات: إخفاء البيانات الحساسة في السجلات (ClickHouse OSS)
استخدام سياسات الإخفاء (ClickHouse Cloud)
تتوفر سياسات الإخفاء في ClickHouse Cloud بدءًا من الإصدار 25.12.
CREATE MASKING POLICY طريقة مدمجة لإخفاء قيم الأعمدة ديناميكيًا لمستخدمين أو أدوار محددة عند وقت الاستعلام. وعلى عكس الأساليب الأخرى، لا تتطلب سياسات الإخفاء إنشاء واجهات عرض منفصلة أو تخزين بيانات مخفية، إذ يحدث هذا التحويل بشفافية عندما يستعلم المستخدمون من الجدول.
سياسة إخفاء بسيطة
orders يحتوي على معلومات العملاء:
masked_data_viewer:
masked_data_viewer استعلامًا على الجدول orders، فإنه يرى البيانات المخفية تلقائيًا:
Query
Response (for masked_data_viewer role)
masked_data_viewer البيانات الأصلية غير المُخفاة.
الإخفاء المشروط
WHERE لتطبيق الإخفاء على صفوف معيّنة فقط. على سبيل المثال، لإخفاء الطلبات ذات القيمة العالية فقط:
سياسات متعددة مع تحديد الأولوية
PRIORITY للتحكم في التحويل الذي سيُطبَّق. وتُطبَّق قيم الأولوية الأعلى أخيرًا:
total_amount > 100، تحلّ سياسة refined_masking (الأولوية 10) محلّ سياسة basic_masking (الأولوية 0) بالنسبة إلى العمود name، بينما يواصل email استخدام الإخفاء الأساسي.
الإخفاء المستند إلى التجزئة
إدارة سياسات الإخفاء
استخدم دوال استبدال السلاسل النصية
replace طريقة ملائمة لإخفاء البيانات:
| الدالة | الوصف |
|---|---|
replaceOne | تستبدل أول ظهور لنمط في سلسلة النص المراد البحث فيه بالنص البديل المُقدَّم. |
replaceAll | تستبدل جميع مواضع ظهور النمط في سلسلة النص المراد البحث فيه بالنص البديل المُقدَّم. |
replaceRegexpOne | تستبدل أول ظهور لسلسلة فرعية تطابق نمط تعبير نمطي (بصياغة re2) في النص المراد البحث فيه بالنص البديل المُقدَّم. |
replaceRegexpAll | تستبدل جميع مواضع ظهور سلسلة فرعية تطابق نمط تعبير نمطي (بصياغة re2) في النص المراد البحث فيه بالنص البديل المُقدَّم. |
[CUSTOMER_NAME] باستخدام الدالة replaceOne:
Query
Response
replaceRegexpOne لاستبدال اسم أي عميل:
Query
Response
replaceRegexpAll.
Query
\3 لإدراج مجموعة الالتقاط الثالثة في السلسلة الناتجة، لينتج ما يلي:
Response
إنشاء VIEWs لإخفاء البيانات
VIEW بالاقتران مع دوال السلاسل النصية المذكورة أعلاه لتطبيق تحويلات على الأعمدة التي تحتوي على بيانات حساسة قبل عرضها على المستخدم.
وبهذه الطريقة، تبقى البيانات الأصلية من دون تغيير، ولا يرى المستخدمون الذين يستعلمون عبر هذا الـ VIEW سوى البيانات المُخفاة.
للتوضيح، لنتخيّل أن لدينا جدولًا يخزّن سجلات طلبات العملاء.
نريد التأكد من أن مجموعة من الموظفين يمكنها عرض هذه المعلومات، لكننا لا نريدهم أن يروا البيانات الكاملة الخاصة بالعملاء.
شغّل الاستعلام أدناه لإنشاء جدول تجريبي باسم orders وإدراج بعض سجلات طلبات العملاء الافتراضية فيه:
masked_orders:
SELECT ضمن استعلام إنشاء طريقة العرض أعلاه، نحدّد التحويلات باستخدام replaceRegexpOne على الحقول name وemail وphone وshipping_address، وهي الحقول التي تحتوي على معلومات حساسة ونرغب في إخفائها جزئيًا.
اعرض البيانات من طريقة العرض:
Query
Response
SELECT على طريقة العرض:
SELECT على الجدول الأساسي من خلال أي دور.
لذلك، ينبغي لك إلغاء امتياز الوصول إلى الجدول الأساسي صراحةً احتياطًا:
masked_orders_viewer لا يمكنهم سوى الاطلاع على
البيانات المخفية من العرض، وليس البيانات الأصلية غير المُقنَّعة من الجدول.
استخدم أعمدة MATERIALIZED وقيود الوصول على مستوى العمود
MATERIALIZED.
تُحتسب قيم هذه الأعمدة تلقائيًا وفقًا للتعبير المحدد لها عند إدراج الصفوف،
ويمكن استخدامُها لإنشاء أعمدة جديدة تحتوي على نُسخ مخفية من البيانات.
استنادًا إلى المثال السابق، وبدلًا من إنشاء VIEW منفصل للبيانات المخفية، سنُنشئ الآن أعمدة مخفية باستخدام MATERIALIZED:
SELECT * افتراضيًا.
Query
Response
select على الأعمدة المقنّعة في orders.
أعِد إنشاء الدور الذي أنشأناه سابقًا:
SELECT على الجدول orders:
orders،
فيمكنك تمييز الأعمدة الحساسة غير المقنّعة بأنها EPHEMERAL،
وهذا يضمن عدم تخزين أعمدة من هذا النوع في الجدول.
Query
Response
استخدم قواعد إخفاء الاستعلامات لبيانات السجلات
system.query_log وsystem.text_log وsystem.processes).
يساعد هذا على منع تسرّب البيانات الحساسة إلى السجلات فقط.
لاحظ أن هذا لا يُخفي البيانات في نتائج الاستعلام.
على سبيل المثال، لإخفاء رقم الضمان الاجتماعي، يمكنك إضافة القاعدة التالية إلى تهيئة الخادم: