التوصية بمتى تستخدم قاعدة بيانات Azure SQL Always Encrypted

مكتمل

Always Encrypted هي ميزة مصممة لحماية البيانات الحساسة، مثل أرقام بطاقات الائتمان أو أرقام التعريف الوطنية/الإقليمية (على سبيل المثال، أرقام الضمان الاجتماعي في الولايات المتحدة)، المخزنة في قاعدة بيانات Azure SQL ومثيل Azure SQL المدار وقواعد بيانات SQL Server. تسمح Always Encrypted للعملاء بتشفير البيانات الحساسة داخل تطبيقات العميل ولا تكشف أبدا عن مفاتيح التشفير لمشغل قاعدة البيانات. يوفر برنامج Always Encrypted فصلا بين من يملك البيانات ويمكنه مشاهدتها، وأولئك الذين يديرون البيانات لكن لا ينبغي أن يكون لديهم وصول - مثل مديري قواعد البيانات المحليين، مشغلي قواعد البيانات السحابية، أو المستخدمين غير المصرح لهم ذوي امتيازات عالية. ونتيجة لذلك، تمكن Always Encrypted العملاء من تخزين بياناتهم الحساسة بثقة في السحابة، وتقليل احتمالية سرقة البيانات من قبل المطلعين الضارين.

يمكن تكوين Always Encrypted لدعم الاستعلامات السرية المحدودة على البيانات المشفرة، وهي الاستعلامات التي تتضمن مقارنات المساواة. على سبيل المثال، عمليات البحث عن النقاط أو الصلات بالمساواة. تستخدم هذه الاستعلامات التشفير الحتمي.

رسم تخطيطي يعرض مثالا لقاعدة بيانات مشفرة دائما.

ملاحظه

توسع الجيوب الآمنة قدرات الحوسبة السرية لمسلسل إنكريبد من خلال مطابقة الأنماط، ومشغلات مقارنة أخرى، والتشفير في المكان.

يجعل Always Encrypted التشفير شفافا للتطبيقات. برنامج تشغيل مفعل دائما مشفرة مثبت على جهاز العميل يقوم تلقائيا بتشفير وفك تشفير البيانات الحساسة في تطبيق العميل. يقوم السائق بتشفير البيانات في الأعمدة الحساسة قبل تمرير البيانات إلى محرك قاعدة البيانات. ثم يعيد برنامج التشغيل كتابة الاستعلامات تلقائيا بحيث تبقى دلالات التطبيق محفوظة. وبالمثل، يقوم برنامج التشغيل بفك تشفير البيانات بشفافية، المخزنة في أعمدة قاعدة البيانات المشفرة، المضمنة في نتائج الاستعلام.

تكوين Always Encrypted

لإعداد Always Encrypted في قاعدة البيانات الخاصة بك، تحتاج إلى:

  1. استخدم مفاتيح التشفير لحماية بياناتك. يستخدم Always Encrypted نوعين من المفاتيح:

    • مفاتيح تشفير العمود.
    • مفاتيح العمود الرئيسية.

    يتم استخدام مفتاح تشفير العمود لتشفير البيانات في عمود مشفر. المفتاح الرئيسي للعمود هو مفتاح حماية المفتاح الذي يقوم بتشفير مفتاح تشفير عمود واحد أو أكثر. تحتاج إلى تخزين مفاتيح العمود الرئيسية في مخزن مفاتيح موثوق خارج نظام قاعدة البيانات. أكثر مواقع التخزين شيوعا هي Azure Key Vault، أو مخزن شهادات ويندوز، أو وحدة أمان الأجهزة. بعد ذلك، تحتاج إلى نشر مفاتيح تشفير الأعمدة وتشفير كل منها بمفتاح عمود رئيسي. وأخيرا، تحتاج إلى تخزين بيانات التعريف حول المفاتيح في قاعدة البيانات الخاصة بك.

    • تلتقط بيانات تعريف المفتاح الرئيسي للعمود موقع المفتاح الرئيسي للعمود.
    • تحتوي بيانات تعريف مفتاح تشفير العمود على القيمة المشفرة لمفتاح تشفير العمود. لا يخزن مشغل قاعدة البيانات المفاتيح من أي نوع أو يستخدمها في نص عادي.
  2. تكوين التشفير لأعمدة قاعدة البيانات المحددة التي تحتوي على بيانات حساسة ليتم حمايتها. يمكنك إنشاء جداول جديدة بأعمدة مشفرة أو تشفير أعمدة قواعد البيانات والبيانات الموجودة هناك. عند إعداد التشفير لعمود، يمكنك تحديد المعلومات حول خوارزمية تشفير ومفتاح تشفير عمود لحماية البيانات في العمود ونوع التشفير. يدعم Always Encrypted نوعين من التشفير:

    • ينشئ التشفير المحدد دائما نفس القيمة المشفرة لقيمة نص عادي معينة. يسمح استخدام التشفير المحدد بالبحث عن النقاط، وربط المساواة، والتقاطها، والفهرسة على الأعمدة المشفرة. ومع ذلك، يمكن أن يسمح للمستخدمين غير المصرح لهم بتخمين معلومات عن القيم المشفرة من خلال فحص الأنماط في العمود المشفر، خاصة إذا كان هناك مجموعة صغيرة من القيم المشفرة المحتملة، مثل صحيح/خطأ، أو منطقة شمال/جنوب/شرق/غرب.
    • يستخدم التشفير العشوائي أسلوبا يقوم بتشفير البيانات بطريقة أقل قابلية للتنبؤ. يعد التشفير العشوائي أكثر أمانا، ولكنه يمنع البحث والتصنف والفهرسة والانضمام إلى الأعمدة المشفرة.

    استخدم التشفير الحتمي للأعمدة المستخدمة كمعاملات بحث أو تجميع. على سبيل المثال، رقم معرف حكومي. استخدم التشفير العشوائي للبيانات مثل تعليقات التحقيق السرية، التي لا يتم تجميعها مع سجلات أخرى ولا تستخدم لضم الجداول. للحصول على تفاصيل حول خوارزميات التشفير Always Encrypted، راجع التشفير Always Encrypted. يمكنك تنفيذ الخطوات المذكورة أعلاه باستخدام أدوات SQL:

    • SQL Server Management Studio (SSMS)
    • SQL Server PowerShell
    • sqlpackage - الذي يقوم بأتمتة عملية الإعداد

    لضمان عدم الكشف أبدا عن مفاتيح Always Encrypted والبيانات الحساسة المحمية في نص عادي لبيئة قاعدة البيانات، لا يمكن مشاركة مشغل قاعدة البيانات في توفير المفاتيح وتشفير البيانات أو عمليات فك التشفير. لذلك، لا يدعم Transact-SQL (T-SQL) تزويد المفاتيح أو عمليات التشفير. لنفس السبب، يجب إجراء تشفير البيانات الموجودة أو إعادة تشفيرها (بنوع تشفير مختلف أو مفتاح تشفير عمود) خارج قاعدة البيانات (يمكن لأدوات SQL أتمتة ذلك).

كيفية عمل الاستعلامات مقابل الأعمدة المشفرة

يجب استيفاء مجموعة من المتطلبات المسبقة، إذا كان المستخدم بحاجة لأداء أي من هذه الإجراءات:

  • تشغيل استعلام على أعمدة قواعد البيانات المشفرة
  • إدراج البيانات في الأعمدة المشفرة
  • استرجاع قيم النص الأصلي من الأعمدة المشفرة
  • تنفيذ العمليات المدعومة (مثل البحث عن النقاط) على الأعمدة باستخدام التشفير الحتمي

يجب على المستخدم أو التطبيق الذي يصدر الاستعلام استيفاء المتطلبات المسبقة التالية:

  • الحصول على حق الوصول إلى المفتاح الرئيسي للعمود الذي يحمي البيانات. يلزم الوصول إلى المفتاح بالإضافة إلى الأذونات على مستوى قاعدة البيانات، مثل SELECT على الجدول الذي يحتوي على البيانات.
  • الاتصال بقاعدة البيانات مع تمكين Always Encrypted في اتصال قاعدة البيانات. تدعم معظم أدوات SQL وبرامج تشغيل عميل SQL تمكين Always Encrypted لاتصالات قاعدة البيانات.

ملاحظه

إذا كان لدى المستخدم الأذونات المطلوبة لقاعدة البيانات لقراءة البيانات، لكن لا توجد إمكانية الوصول إلى المفاتيح التي تحميها. يمكن للمستخدم استرجاع بيانات النص المشفر (المشفرة) عن طريق الاتصال بقاعدة البيانات دون تفعيل التشفير الدائم في اتصال قاعدة البيانات.

فيما يلي كيفية عمل الاستعلامات على الأعمدة المشفرة:

  1. عندما يصدر أحد التطبيقات استعلاما ذو معلمات، يتصل برنامج تشغيل عميل SQL داخل التطبيق بشفافية بمشغل قاعدة البيانات (عن طريق استدعاء sp_describe_parameter_encryption (Transact-SQL) لتحديد المعلمات التي تستهدف الأعمدة المشفرة ويجب تشفيرها. لكل معلمة تحتاج إلى تشفير، يتلقى برنامج التشغيل خوارزمية التشفير ونوع التشفير وبيانات تعريف المفتاح، بما في ذلك مفتاح تشفير العمود المشفر وموقع المفتاح الرئيسي للعمود المقابل له.
  2. يستدعي برنامج التشغيل مخزن المفاتيح، الذي يحتوي على مفاتيح رئيسية للعمود من أجل فك تشفير قيم مفتاح تشفير العمود المشفرة. يتم تخزين مفاتيح تشفير عمود النص العادي الناتجة مؤقتا لتقليل عدد الرحلات ذهابا ونهاية إلى مخزن المفاتيح على الاستخدامات اللاحقة لنفس مفاتيح تشفير العمود.
  3. يستخدم برنامج التشغيل مفاتيح تشفير عمود النص العادي التي تم الحصول عليها لتشفير معلمات الاستعلام المقابلة للأعمدة المشفرة.
  4. يستبدل برنامج التشغيل قيم النص العادي للمعلمات التي تستهدف الأعمدة المشفرة بقيمها المشفرة، ويرسل الاستعلام إلى مشغل قاعدة البيانات للمعالجة.
  5. يقوم محرك قاعدة البيانات بتنفيذ الاستعلام، والذي قد يتضمن مقارنات المساواة على الأعمدة باستخدام التشفير الحتمي.
  6. إذا تضمنت نتائج الاستعلام بيانات من أعمدة مشفرة، يرفق مشغل قاعدة البيانات بيانات تعريف التشفير لكل عمود، بما في ذلك المعلومات حول خوارزمية التشفير ونوع التشفير وبيانات التعريف الرئيسية بمجموعة النتائج.
  7. يرسل مشغل قاعدة البيانات مجموعة النتائج إلى تطبيق العميل.
  8. لكل عمود مشفر في مجموعة النتائج المستلمة، يحاول برنامج التشغيل أولا العثور على مفتاح تشفير عمود النص العادي في ذاكرة التخزين المؤقت المحلية، ويقوم فقط برحلة ذهابا وإيابا إلى مخزن مفاتيح يحمل المفتاح الرئيسي للعمود إذا لم يتمكن من العثور على المفتاح في ذاكرة التخزين المؤقت.
  9. يقوم برنامج التشغيل بفك تشفير النتائج وإرجاع قيم النص العادي إلى التطبيق.

يتفاعل برنامج تشغيل العميل مع مخزن مفاتيح، يحتوي على مفتاح رئيسي للعمود، باستخدام موفر مخزن مفتاح رئيسي للعمود، وهو مكون برنامج من جانب العميل يغلف مخزن مفاتيح يحتوي على مفتاح العمود الرئيسي. يتوفر موفرو الأنواع الشائعة من مخازن المفاتيح في مكتبات برامج التشغيل من جانب العميل من Microsoft، أو كتنزيلات مستقلة. يمكنك أيضا تنفيذ الموفر الخاص بك. تختلف قدرات Always Encrypted، بما في ذلك موفرو مخزن المفاتيح الرئيسي للعمود المضمن حسب مكتبة برامج التشغيل وإصدارها.

راجع تطوير التطبيقات باستخدام Always Encrypted للحصول على قائمة برامج تشغيل العملاء التي تدعم Always Encrypted ولمعلومات حول كيفية تطوير التطبيقات التي تستعلم عن الأعمدة المشفرة.

يمكنك أيضا الاستعلام عن الأعمدة المشفرة باستخدام أدوات SQL، على سبيل المثال Azure Data Studio أو SSMS.

القيود

تنطبق القيود التالية على الاستعلامات على الأعمدة المشفرة:

  • يدعم التشفير المحدد العمليات التالية التي تتضمن مقارنات المساواة - لا يسمح بعمليات أخرى.

  • لا يسمح بأي حسابات على الأعمدة المشفرة باستخدام التشفير العشوائي.

ملاحظه

يقوم نظام "دائما مشفرا بجيوب آمنة" بتخفيف القيود من خلال السماح بمطابقة الأنماط، وعوامل المقارنة، والفرز، والفهرسة على الأعمدة باستخدام التشفير العشوائي.

  • لا يسمح باستخدام عبارات الاستعلام التي تؤدي إلى عمليات حسابية تتضمن كلا من النص العادي والبيانات المشفرة. على سبيل المثال:

    • مقارنة عمود مشفر بعمود نص عادي أو حرفي.
    • نسخ البيانات من عمود نص عادي إلى عمود مشفر (أو العكس) UPDATEأو BULK INSERTأو SELECT INTOأو INSERT. حدد.
    • إدراج القيم الحرفية إلى الأعمدة المشفرة.

تؤدي مثل هذه العبارات إلى أخطاء تعارض معامل مثل هذا:

Output
Msg 206, Level 16, State 2, Line 89
Operand type clash: char(11) encrypted with (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256', column_encryption_key_name = 'CEK_1', column_encryption_key_database_name = 'ssn') collation_name = 'Latin1_General_BIN2' is incompatible with char












  • يجب أن تستخدم التطبيقات معلمات الاستعلام لتمرير القيم التي تتوافق مع الأعمدة المشفرة. على سبيل المثال، عند إدراج البيانات في أعمدة مشفرة أو التصفية حسب الأعمدة المشفرة (عند استخدام التشفير المحدد). تمرير القيم الحرفية أو متغيرات T-SQL المقابلة للأعمدة المشفرة غير مدعوم. لمزيد من المعلومات الخاصة برنامج تشغيل العميل الذي تستخدمه، راجع تطوير التطبيقات باستخدام Always Encrypted.

  • يجب استخدام المعلمات للمتغيرات Always Encrypted في Azure Data Studio أو SSMS لإصدار الاستعلامات التي تمرر القيم المقابلة للأعمدة المشفرة في هذه الأدوات. على سبيل المثال، عند إدراج البيانات في أعمدة مشفرة أو التصفية حسب الأعمدة المشفرة (عند استخدام التشفير المحدد).

  • المعلمات ذات القيمة الجدولية استهداف الأعمدة المشفرة غير مدعومة.

  • الاستعلامات التي تستخدم العبارات التالية غير مدعومة:

    • ل XML (SQL Server)
    • for JSON (SQL Server)
  • بعد تغيير تعريف عمود مشفر، قم بتنفيذ sp_refresh_parameter_encryption لتحديث بيانات التعريف Always Encrypted للكائن.

  • Always Encrypted غير مدعوم للأعمدة ذات الخصائص أدناه:

    • الأعمدة التي تستخدم أحد أنواع البيانات التالية: xml، والطابع الزمني، و rowversion، والصورة، والنص، والنص، sql_variant، والتسلسل الهرمي، والجغرافيا، والهندسة، والأسماء المستعارة، والأنواع المعرفة من قبل المستخدم.
    • أعمدة FILESTREAM
    • أعمدة بخاصية IDENTITY.
    • أعمدة مع خاصية ROWGUIDCOL.
    • أعمدة السلسلة (varchar وchar وما إلى ذلك) مع ترتيبات أخرى غير ترتيب نقاط التعليمات البرمجية الثنائية (_BIN2) عند استخدام التشفير المحدد.
    • الأعمدة التي هي مفاتيح للمؤشرات المجمعة وغير متفاوتة المسافات عند استخدام التشفير العشوائي (يتم دعم المؤشرات على الأعمدة التي تستخدم التشفير المحدد).
    • الأعمدة المضمنة في فهارس النص الكامل (لا يدعم Always Encrypted البحث في النص الكامل).
    • الأعمدة المحسوبة.
    • الأعمدة المشار إليها بواسطة أعمدة محسوبة (عندما يقوم التعبير بعمليات غير معتمدة ل Always Encrypted).
    • مجموعة أعمدة متفرقة.
    • الأعمدة التي تشير إليها الإحصائيات عند استخدام التشفير العشوائي (يدعم التشفير الحتمي).
    • أعمدة التقسيم.
    • الأعمدة ذات القيود الافتراضية.
    • الأعمدة المشار إليها بواسطة قيود فريدة عند استخدام التشفير العشوائي (التشفير المحدد مدعوم).
    • أعمدة المفتاح الأساسي عند استخدام التشفير العشوائي (التشفير المحدد مدعوم).
    • الإشارة إلى الأعمدة في قيود المفتاح الخارجي عند استخدام التشفير العشوائي أو عند استخدام التشفير المحدد، إذا كانت الأعمدة المشار إليها والمرجعية تستخدم مفاتيح أو خوارزميات مختلفة.
    • الأعمدة المشار إليها بواسطة قيود التحقق .
    • الأعمدة التي تم التقاطها/تعقبها باستخدام التقاط بيانات التغيير.
    • أعمدة المفاتيح الأساسية في الجداول التي تحتوي على تعقب التغييرات.
    • الأعمدة المقنعة (باستخدام إخفاء البيانات الديناميكية).
    • الأعمدة في تمتد جداول قاعدة البيانات. (يمكن تمكين الجداول التي تحتوي على أعمدة مشفرة باستخدام Always Encrypted ل Stretch.)

مهم

تم إهمال قاعدة بيانات التمدد في SQL Server 2022 (16.x) وقاعدة بيانات Azure SQL. ستتم إزالة هذه الميزة في إصدار مستقبلي من مشغل قاعدة البيانات. تجنب استخدام هذه الميزة في أعمال التطوير الجديدة، واخطط لتعديل التطبيقات التي تستخدم هذه الميزة حاليا.

مرجع Transact-SQL مشفر دوما

يستخدم Always Encrypted العبارات Transact-SQL التالية، وعرض فهرس النظام، وإجراءات التخزين في النظام، والأصوات.

البيانات

طرق عرض كتالوج النظام والإجراءات المخزنة

  • sys.column_encryption_keys (Transact-SQL)
  • sys.column_encryption_key_values (Transact-SQL)
  • sys.column_master_keys (Transact-SQL)
  • sp_refresh_parameter_encryption (Transact-SQL)
  • sp_describe_parameter_encryption (Transact-SQL)

راجع أيضا sys.columns (Transact-SQL) للحصول على معلومات حول بيانات تعريف التشفير المخزنة لكل عمود.

أذونات قاعدة البيانات

هناك أربعة أذونات قاعدة بيانات ل Always Encrypted:

  • ALTER ANY COLUMN MASTER KEY - مطلوب لإنشاء بيانات تعريف المفتاح الرئيسي للعمود وحذفها.
  • ALTER ANY COLUMN ENCRYPTION KEY - مطلوب لإنشاء بيانات تعريف مفتاح تشفير العمود وحذفها.
  • عرض تعريف المفتاح الرئيسي للعمود - مطلوب للوصول إلى بيانات تعريف المفتاح الرئيسي للعمود وقراءتها، وهي مطلوبة للاستعلام عن الأعمدة المشفرة.
  • عرض تعريف مفتاح تشفير العمود - مطلوب للوصول إلى بيانات تعريف المفتاح الرئيسي للعمود وقراءتها، وهي مطلوبة للاستعلام عن الأعمدة المشفرة.

يلخص الجدول التالي الأذونات المطلوبة للإجراءات الشائعة.

سيناريو تغيير أي مفتاح رئيسي للعمود تغيير أي مفتاح تشفير عمود عرض أي تعريف للمفتاح الرئيسي للعمود عرض أي تعريف لمفتاح تشفير العمود
إدارة المفاتيح (إنشاء/تغيير/مراجعة بيانات التعريف الرئيسية في قاعدة البيانات) X X X X
الاستعلام عن الأعمدة المشفرة X X

اعتبارات هامة

  • أذونات VIEW ANY COLUMN MASTER KEY DEFINITION وVIEW ANY COLUMN ENCRYPTION KEY DEFINITION مطلوبة عند تحديد الأعمدة المشفرة، حتى إذا لم يكن لدى المستخدم إذن للمفاتيح الرئيسية للعمود (في مخازن المفاتيح الخاصة به)، وحماية الأعمدة ولا يصل إلى محاولة النص العادي.
  • في SQL Server، يتم منح أذونات VIEW ANY COLUMN MASTER KEY DEFINITION وVIEW ANY COLUMN ENCRYPTION KEY DEFINITION بشكل افتراضي لدور قاعدة البيانات الثابتة العامة. قد يختار مسؤول قاعدة البيانات إبطال (أو رفض) أذونات الدور العام ومنحها لأدوار أو مستخدمين محددين لتنفيذ تحكم أكثر تقييدا.
  • في قاعدة بيانات SQL، لا يتم منح أذونات VIEW ANY COLUMN MASTER KEY DEFINITION وVIEW ANY COLUMN ENCRYPTION KEY DEFINITION بشكل افتراضي لدور قاعدة البيانات الثابتة العامة. وهذا يمكن بعض الأدوات القديمة الموجودة (باستخدام الإصدارات القديمة من DacFx) من العمل بشكل صحيح. للعمل مع الأعمدة المشفرة (حتى إذا لم يتم فك تشفيرها)، يجب على مسؤول قاعدة البيانات منح أذونات VIEW ANY COLUMN MASTER KEY DEFINITION وVIEW ANY COLUMN ENCRYPTION KEY DEFINITION بشكل صريح.