الأمان
بياناتك لا يمكن أن تصل إلى حساب عميل آخر
معظم الأنظمة متعددة المستأجرين تفصل بين العملاء بشرط في الاستعلام ومراجعة برمجية. ينجح هذا إلى أن يُكتب استعلام واحد بدونه. افترضنا أن هذا الاستعلام سيُكتب يومًا، وجعلناه يفشل رغم ذلك.
الفصل بين الحسابات
أمان مستوى السطر مفعّل ومفروض
كل جدول يحمل بيانات عملاء عليه أمان مستوى السطر في PostgreSQL مفعّلًا ومفروضًا، حتى مالك الجدول خاضع له. وتُطبَّق السياسة عبر برنامج يجد كل جدول فيه عمود الحساب ويغطيه، ولهذا لا يمكن لجدول يُضاف الشهر القادم أن يصدر بلا حماية. ويعيد اختبار منفصل اشتقاق القائمة بنفسه ويُفشل البناء عند وجود ثغرة.
التطبيق لا يستطيع تجاوزه
يتصل النظام بصلاحية قاعدة بيانات لا تملك امتياز التجاوز، ويرفض التشغيل إذا وُجّه إلى اتصال بصلاحيات عليا. والاستعلام المكتوب دون تحديد الحساب يعيد لا شيء، ولا يعيد سطور غيرك.
مفاتيح مركّبة لا سياسات فقط
ترتبط السجلات الفرعية بأصلها عبر مفتاح يتضمن معرّف الحساب. فالعقد الذي يشير إلى وحدة عميل آخر ليس ممنوعًا بقاعدة قد يُساء ضبطها، بل هو مفتاح غير موجود في الفهرس أصلًا.
تحديد النطاق ضمني لا وسيط دالة
يُحدد الحساب مرة واحدة لكل طلب ويُحمل ضمنيًا. ولا تستقبل أي دالة معرّف الحساب كوسيط، فلا يوجد موضع استدعاء يمكن تمرير المعرّف الخطأ إليه.
الفصل بين السكان أنفسهم
طبقة سياسات ثانية داخل الحساب
عزل الحسابات وحده كان سيُظهر لكل ساكن في البرج دفتر المبنى كله، لأنهم يتشاركون حسابًا واحدًا. لذا تحصر طبقة سياسات ثانية مقيِّدة كل ساكن في عقده وحده. وبالقياس على مبنى من ٣٦٠ وحدة: يرى الموظفون ٣٤٠ عقدًا ويرى الساكن عقدًا واحدًا.
جداول لا يستطيع السكان قراءتها إطلاقًا
سجلات التدقيق والاشتراكات وقوائم الموظفين وسجلات الملاك وإعدادات الموقع ممنوعة صراحةً وبالاسم على جلسات البوابة. فعبارة «لم نبنِ لها واجهة» ليست إجراءً أمنيًا.
جلسات البوابة لا يمكنها توسيع نفسها
جلسة الساكن مثبّتة على حساب واحد وشخص واحد بحسب النطاق الذي سجّل منه الدخول. ولا تحمل أي عضويات ولا يمكنها تبديل الحساب، فمن هو ساكن في مبنى وموظف في آخر لا يستطيع العبور بينهما.
تسجيل الدخول
بلا كلمات مرور إطلاقًا
تسجيل الدخول رابط عبر البريد ورمز من ستة أرقام، صالحان خمس عشرة دقيقة ولمرة واحدة. فلا كلمة مرور تُعاد عبر المواقع ولا تُصطاد ولا تتسرب من اختراق في مكان آخر — وهذا يزيل أكثر الطرق شيوعًا للدخول إلى شركة صغيرة.
الروابط مرتبطة بمكان إصدارها
الرابط المُرسل لبوابة سكان شركة يُرفض في لوحة الموظفين وفي بوابة أي شركة أخرى. وطلب رابط جديد يُبطل الروابط السابقة، فالرسالة التي وصلت عنوانًا خاطئًا تتوقف عن العمل لحظة طلبك رابطًا آخر.
الجلسات والرموز مخزّنة مشفّرة
لا تُخزَّن رموز الجلسات ورموز الدخول بصيغة قابلة للقراءة. والرموز موقّعة بمفتاح لدى التطبيق، فنسخة من قاعدة البيانات وحدها لا تمنح تسجيل دخول صالحًا.
التعامل مع البيانات
وثائق الهوية والبيانات البنكية مشفّرة
أرقام الهوية الإماراتية والإقامة وجوازات السفر، وحسابات الملاك المصرفية، وحسابات ساحبي الشيكات، تُشفَّر بخوارزمية AES-256-GCM قبل وصولها إلى قاعدة البيانات بمفاتيح محفوظة في بيئة التطبيق. فنسخة قاعدة البيانات التي تنتقل بلا تلك البيئة — نسخة احتياطية أو لقطة مستعادة أو تصدير — لا تحملها.
سجل تدقيق لا يمكن إعادة كتابته
تُسجَّل التغييرات مع المنفّذ والوقت والعنوان والحالة قبل وبعد، ضمن المعاملة نفسها التي نفّذت التغيير، فلا يمكن اعتماد تغيير دون سجله. ويرفض الجدول التعديل والحذف على مستوى قاعدة البيانات؛ والتصحيح سطر جديد.
المحذوف يختفي فعلًا من العرض
الحذف قابل للاسترجاع لا متلف، وتستبعد قاعدة البيانات السجلات المحذوفة من كل استعلام افتراضيًا — بما فيها استعلامات يكتبها لاحقًا من لا يعلم بضرورة استبعادها.
ما لا ندّعيه
- لا نحمل اليوم شهادة SOC 2 أو ISO 27001. وسنقول ذلك بوضوح بدل وصف أنفسنا بأننا «متوافقون مع» معيار لم نخضع لتدقيقه.
- تُستضاف البيانات على بنية تحتية مُدارة في مناطق المزوّد. والالتزام التعاقدي بموقع البيانات متاح في الباقة المؤسسية ولا يمكننا الوعد به في الباقات ذاتية الاشتراك.
- نمط العزل بقاعدة بيانات مخصصة مُصمَّم وموضعه موجود في الشيفرة، لكنه غير مُنفَّذ بعد. وكل الحسابات اليوم تتشارك قاعدة واحدة يفصل بينها ما ذُكر أعلاه.
- التشفير على مستوى التطبيق يحمي نسخ قاعدة البيانات، ولا يحمي من اختراق التطبيق العامل نفسه لأنه يحمل المفاتيح بالضرورة.