PostgreSQL
قاعدة بيانات الاختبار لديك نسخة من الإنتاج، وهذه هي المشكلة
تنتهي بيانات الإنتاج عادة في قواعد بيانات التطوير والاختبار. إليك كيف يعمل إخفاء البيانات في CYBERTEC PGEE وأين يندرج داخل دورة الإصدار.
معظم الفرق تستعيد نسخة من قاعدة بيانات الإنتاج على خادم اختبار قبل أن يراجع أحدهم ما تحمله تلك النسخة.
النسخة هي المشكلة الحقيقية. قاعدة الإنتاج محمية بضوابط التغيير وقواعد الشبكة ومدير قاعدة بيانات يعرف من المتصل بها. أما النسخة فتقع على خادم افتراضي في بيئة أدنى، وموصولة بخادم تطبيقات يستطيع متعاقد خارجي الوصول إليه، وتحمل نفس صفوف العملاء الموجودة في الإنتاج.
الإخفاء هو الضابط الذي يعالج النسخة بدل المصدر. في إصدار PostgreSQL المؤسسي من CYBERTEC (PGEE) يأتي الإخفاء جزءاً من قاعدة البيانات، وضبطه قصير بما يكفي ليستقر داخل دورة الإصدار. إليك كيف يعمل، وأين يتوقف عن المساعدة.
الإخفاء يعمل على التصدير لا على الإنتاج
يحتفظ PGEE بالقيم الأصلية في الإنتاج. ويُطبَّق الإخفاء على عمليات التصدير: النسخة التي تُنشئها لبيئة التطوير أو الاختبار تحمل قيماً محوَّلة، وتبقى جداول الإنتاج كما هي دون تغيير.
هذا التمييز يوضح ما يغطيه الضابط. الإخفاء يحمي النسخ، ولا يقلّل مساحة الهجوم على قاعدة بيانات الإنتاج، وهو ضابط مختلف عن التشفير الشفاف للبيانات (TDE) الذي يغطي البيانات أثناء التخزين. إذا توقعت أن يجعل الإخفاء الإنتاج أكثر أماناً فأنت تستخدم الأداة الخطأ. وإذا كنت تُرسل نسخاً غير مُقنَّعة إلى المطوّرين فأنت تستخدم الأداة الصحيحة ولم تُشغّلها بعد.
تعريف قناع لكل عمود
يُربط القناع بالعمود:
```sql
ALTER TABLE t_product ALTER COLUMN product_number
SET MASK md5(product_number);
```
القناع تعبير، لذلك يمكن أن يكون التحويل حسابياً بسهولة أن يكون تجزئة:
```sql
ALTER TABLE t_product ALTER COLUMN units_available
SET MASK units_available * pi();
```
قاعدة واحدة تحدّ ما يمكن كتابته: لا تُقبل إلا الدوال الثابتة (immutable)، بينما تُرفض الدوال المتغيّرة (volatile) مثل دالة تقرأ الساعة أو تسحب قيمة من تسلسل.
لهذا القيد فائدة عملية. الدالة الثابتة تعيد الناتج نفسه للمدخل نفسه في كل مرة، فيظهر معرّف العميل المُقنَّع بالقيمة ذاتها في كل جدول. وبذلك تنجو عمليات الربط (joins) من الإخفاء، وهو غالباً السبب الأصلي في أن بيئة الاختبار نسخة من الإنتاج.
وللقيد حدّ يستحق الفهم أيضاً. القناع الحتمي يبقى دالة تجزئة: من يحمل النسخة المُقنَّعة يستطيع تجزئة قيمة متوقعة ومقارنة الناتج. لذلك يكون القناع على مساحة مدخلات صغيرة أو قابلة للتخمين أضعف مما يبدو. وهذه خاصية الإخفاء الحتمي عموماً، لا خاصية تنفيذ بعينه.
ويستحق المثال الحسابي وقفة كذلك. ضرب الوحدات في pi يحوّل القيم بدل إخفائها، فتبقى الأرقام معقولة، ولن يطابق تقرير مبني عليها أرقام الإنتاج. وهذا مقبول في اختبار المخطط وخاطئ في اختبار التقارير.
النسخ الاحتياطية المُقنَّعة
تأخذ أداة التفريغ (pg_dump) خياراً خاصاً:
```sql
pg_dump --masked pgee
```
هذا الخيار هو نقطة التحكم. النسخة المُنشأة عبر المسار المُقنَّع تحمل قيماً محوَّلة، والنسخة المُنشأة بالطريقة المعتادة تحمل القيم الأصلية. ولا شيء يفرض استخدام الخيار نيابة عنك، ولهذا يجب أن يكون التغيير في سكربت النسخ لا في صفحة توثيق.
النسخ المتماثل المُقنَّع للبيئات الدائمة
بعض قواعد بيانات الاختبار ليست نسخاً مستعادة، بل مشترِكون (subscribers) يبقون قريبين من الإنتاج. النسخ المتماثل العادي يعيد صفوف المصدر كما هي:
```sql
CREATE PUBLICATION mypublication_plain FOR TABLE t_product;
```
أما النسخ المتماثل المُقنَّع فيطبّق أقنعة الأعمدة أثناء الإرسال:
```sql
CREATE PUBLICATION mypublication_masked
FOR TABLE t_product WITH (mask = on);
```
المشترك المتصل بمنشور مُقنَّع يحمل بيانات مُقنَّعة للجداول نفسها، ويبقى محدَّثاً دون تفريغ واستعادة كل ليلة. وفي بيئة تجهيز (staging) يجب أن تشبه الإنتاج، هذا الشكل أنفع من الاستعادة.
ما لا يحلّه الإخفاء
الإنتاج يحتفظ بقيمه الحقيقية بحكم التصميم، لذلك لا يقلّل الإخفاء التعرّض هناك.
الإخفاء ليس تشفيراً للبيانات المخزنة.
الإخفاء لا يُصلح ضبط الوصول على النسخة. النسخة المُقنَّعة تحتاج بيانات اعتماد خاصة وقواعد شبكة خاصة ومالكاً مسؤولاً.
العمود الذي يُضاف إلى المخطط لاحقاً يصل بلا قناع حتى يكتبه أحدهم. والأعمدة الجديدة هي الطريق الأكثر شيوعاً لعودة البيانات غير المُقنَّعة.
السلوك الموصوف هنا مستخرج من التوثيق التقني لدى وورلبر لإصدار CYBERTEC PGEE، ويُستحسن التحقق منه مقابل الإصدار الذي تعمل عليه، فقد تختلف الميزات بين الإصدارات.
إدخال الإخفاء في دورة الإصدار
احصر الجداول التي تُنسخ، والأعمدة التي بداخلها.
صنّف كل عمود: إبقاء أو إخفاء أو حذف قبل إنشاء النسخة.
اكتب الأقنعة باستخدام الدوال الثابتة فقط.
انقل خطوة النسخ إلى المسار المُقنَّع ليكون الافتراضي إخفاء القيم.
شغّل مجموعة الاختبارات على النسخة المُقنَّعة وأصلح الاختبارات التي اعتمدت على القيم الحقيقية.
أعد فتح قائمة الأعمدة كلما تغيّر المخطط.
الخطوة الخامسة هي التي تُترك عادة. مجموعة اختبارات اعتمدت بصمت على تطابق اسم عميل مع قيمة ثابتة ستفشل في أول تشغيل مُقنَّع، وذلك الفشل هو التدقيق المطلوب.
دور وورلبر
PGEE هو إصدار PostgreSQL المؤسسي من CYBERTEC، وتوفّر وورلبر منتجات وخدمات PostgreSQL المؤسسية من CYBERTEC كعرض شراكة.
الجهد الهندسي في مشروع الإخفاء أصغر من جهد التصنيف. مخطط دفع يحتوي مئات الأعمدة يحتاج قرارات حول أيها حساس وأيها تستخدمه الاختبارات فعلاً ومن يعتمد الباقي. ويغطي عمل وورلبر الاستشاري في PostgreSQL هذا الجزء من التقييم، بينما تعيش ضوابط الإخفاء داخل نشر PGEE نفسه.
إذا كنت تدير خط نسخ بالفعل ولا تعرف أي أعمدة فيه تحتاج قناعاً، فتلك القائمة هي نقطة البداية.
تحدث إلى وورلبر
توفّر وورلبر منتجات وخدمات PostgreSQL المؤسسية من CYBERTEC كعرض شراكة. إذا أردت مراجعة ملاءمة الإخفاء في PGEE لبيئة التطوير والاختبار لديك، يمكننا استعراض بيئتك معك.
الخطوة التالية
تحدث مع مهندسي Worlber
أرسل لنا بيئتك وهدفك. سنوضح لك ما يصلح، وما لا يصلح، والخطوة الآمنة التالية.