0%
balqalam Logo
بالقلم
المميزاتالمجتمعالتسعيرالوثائق
تسجيل الدخول
  • مقدمة
  • العرض
  • MVP
  • خارطة الطريق
  • متطلبات المنتج
  • ابدأ الآن
  • البيئة المحلية
  • البنية المعمارية
  • الهيكل
  • الأنماط
  • الحزمة التقنية
  • قاعدة البيانات
  • تعدّد المستأجرين
  • الفهرس (Catalog)
  • العمل دون اتصال
  • المصادقة
  • التهيئة (Onboarding)
  • تدفق التكامل (Integration Flow)
  • التهيئة (Provision)
  • القبول
  • الحضور
  • الامتثال التنظيمي
  • الملف الشخصي
  • الاجتماعات
  • إدارة الرسوم
  • الفاتورة
  • التدويل
  • الترجمة
  • دليل الترجمة
  • أمان قاعدة البيانات
  • المساهمة
  • هَوْغوارتس
  • عرض حي
  • الإلهام
المبيعات والانتشار
  • المبيعات
  • الذهاب إلى السوق
  • التسويق
  • القبول — تسليط الضوء
  • البرنامج التجريبي
  • العملاء المحتملون
  • العرض التجاري
  • قوالب التواصل
  • دراسة الحالة
  • المنافسون
  • نموذج العمل
  • الاقتصاد المشترك
  • الجذب والنمو
التمويل والشراكات
  • الحصول على الدعم
  • عرض المستثمر
  • غرفة البيانات
  • المستثمرون
  • المُسرِّعات
  • الحاضنات
  • المنح
  • الرعاة
  • الشركاء
  • المسابقات والهاكاثونات
  • الجامعات ومراكز التدريب

أمان قاعدة البيانات

السابقالتالي

حماية متعدّدة الطبقات — حظر الأوامر التدميرية، seeds وحيدة المعيار، وبروتوكول Neon branch-before-touch.

Hogwarts منصة SaaS متعدّدة المستأجرين — قاعدة بيانات واحدة تخدم كل المدارس. أمر DROP TABLE أو TRUNCATE شارد، أو migration بلا مراجعة، يمسح بيانات كل المستأجرين. الحماية متعدّدة الطبقات.

الآليات الفعّالة

الطبقةالآليةما تحظره
PreToolUse hookGrep على كل أمر Bashmigrate reset, db execute, accept-data-loss, DROP TABLE, TRUNCATE, DELETE FROM, ALTER TABLE...DROP
قائمة منع الأذوناتمنع صلب في settings.jsonpnpm db:seed, prisma migrate reset, prisma db push --accept-data-loss, prisma db execute
فحص seed قبل الـcommitيفحص ملفات seed المُجَهَّزةdeleteMany, .delete(), TRUNCATE, DROP, $executeRaw
ensure-demo.tsسكربت بناء idempotentآمن للتكرار
علامة global في single.tsتتجاوز حلّ المدرسة لـseeds عامةفشل عندما يكون جدول schools فارغاً

نظام الـseed

Seeds مقسومة إلى عامة ومُحدَّدة بالمدرسة في prisma/seeds/single.ts.

عامة (global: true) — تملأ بيانات مرجعية على مستوى المنصة:

Seedالوصف
catalogالكتالوج العام (مواد، فصول، دروس)
usكتالوج US K-12 من مخزون US
schoolالمدرسة التجريبية + علامتها

مُحدَّدة بالمدرسة — تتطلب وجود المدرسة التجريبية (طلاب، مدرّسون، فصول، حضور، وما إلى ذلك).

pnpm db:seed:single --list    # عرض كل الـseeds
pnpm db:seed:single catalog   # seed عام (يعمل على DB فارغة)
pnpm db:seed:single subjects  # seed مُحدَّد بالمدرسة (يتطلب التجريبية)
pnpm db:seed                  # محظور — راجع أدناه

لماذا pnpm db:seed محظور

الـseed الكامل يشغّل كل معيار بالتسلسل ويأخذ 45–120 دقيقة. محظور لأن: بطيء ودائماً ينتهي بـtimeout في CI، يعيد seed الأساسات مع خطر التكرار، وseed المعيار الواحد يكفي دائماً للتطوير. شغّله يدوياً خارج Claude Code فقط لو احتجت فعلاً إعادة تعيين كاملة. الحظر مفروض تلقائياً عبر hook حسب القاعدة رقم 8 في CLAUDE.md.

Neon branch-before-touch

قبل أي تغيير في schema أو عملية قد تؤثر على البيانات الموجودة:

  1. أنشئ Neon branch (Neon MCP create_branch).
  2. اختبر العملية على الـbranch.
  3. لو نجحت → طبّقها على main.
  4. لو فشلت → احذف الـbranch — صفر ضرر.
neon branches create --name "test-migration"
prisma migrate dev --create-only
cat prisma/migrations/<timestamp>/migration.sql   # راجع SQL
# لو آمنة → طبّق على main. وإلا → neon branches delete "test-migration"

مرجع الأوامر

آمنة (مسموحة دائماً)

الأمرالغرض
prisma generateإعادة توليد Prisma client من الـschema
prisma db pushمزامنة الـschema (بدون --accept-data-loss)
prisma migrate dev --create-onlyتوليد SQL الـmigration للمراجعة
pnpm db:seed:single <name>seed معيار واحد
pnpm db:seed:single --listعرض الـseeds المتاحة

محظورة

الأمرالسبب
pnpm db:seedبطيء، خطر على كامل DB
prisma migrate resetيُسقط كامل قاعدة البيانات
prisma db push --accept-data-lossيُسقط الجداول مع البيانات
prisma db executeSQL خام
DROP TABLE / TRUNCATEيدمّر البيانات
DELETE FROMحذف صفوف بالجملة
ALTER TABLE...DROPإسقاط أعمدة

اسأل أولاً

الأمرمتى
prisma migrate devإنشاء + تطبيق migration (راجع SQL أولاً)
ALTER TABLE...ADD COLUMNإضافة الأعمدة آمنة لكن أكّد الـschema

الاسترداد

Schema غير متزامن — prisma db push. يضيف الجداول/الأعمدة الناقصة بدون إسقاط البيانات.

جداول ناقصة —

prisma db push
pnpm db:seed:single school
pnpm db:seed:single auth

تحتاج عموداً — اكتب SQL مستهدفاً:

ALTER TABLE "YourTable" ADD COLUMN IF NOT EXISTS "newColumn" TEXT;

فقدان بيانات عرضي — لو كان هناك Neon branch قبل العملية، استرجع منه. وإلا تواصل مع الفريق للاسترجاع من نسخ Neon الاحتياطية التلقائية.

انظر أيضاً

  • Accounts
  • البنية المعمارية
دليل الترجمةالمساهمة

On This Page

الآليات الفعّالةنظام الـseedلماذا pnpm db:seed محظورNeon branch-before-touchمرجع الأوامرآمنة (مسموحة دائماً)محظورةاسأل أولاًالاستردادانظر أيضاً

من تطوير Databayt ·

مرحباً بك في بالقلم.

رحلة عظيمة على وشك أن تبدأ.