it-swarm.asia

كيفية عرض طريقة عرض مشفرة أو إجراء مخزن

أنا أعمل على قاعدة بيانات طرف ثالث.

عندما أحاول عرض تعريف طريقة العرض عن طريق النقر بزر الماوس الأيمن ، CREATE TO ثم إلى NEW QUERY EDIT WINDOW ، يظهر لي خطأ:

قد لا تكون هذه الخاصية موجودة لهذا الكائن أو قد لا تكون قابلة للاسترداد بسبب حقوق الوصول غير الكافية. النص مشفر.

27
goofyui

أداة أخرى تابعة لجهة خارجية يمكنك استخدامها لفك تشفير الكائنات المشفرة أثناء الطيران هي موجه SQL لـ Red Gate: http://www.red-gate.com/products/sql-development/sql-Prompt/features

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

إخلاء المسؤولية: هذه الأداة تجارية (مع نسخة تجريبية مجانية لمدة 14 يومًا) وأعمل لدى Red Gate.

12
michristofides

لدي وصف مفصل إلى حد ما حول هذه المشكلة هنا .

باختصار ، الكائن ليس مشفرًا حقًا ، ولكنه غامض إلى حد ما. لذلك يمكننا استرداد الظهر الأصلي. الطريقة متورطة قليلاً ولكنها تتكون من الخطوات التالية:

  1. الاتصال بالمثيل باستخدام اتصال مسؤول مخصص
  2. حدد الرمز المشوش مثل هذا:

    SELECT @secret = imageval
    FROM   sys.sysobjvalues
    WHERE  objid = OBJECT_ID(@object_name);
    
  3. استبدل الكائن بأخرى لها نفس الاسم نفس object_id ونفس الطول بالبايت (على سبيل المثال باستخدام ALTER PROCEDURE)

  4. احصل على الشفرة المشوشة حديثًا بنفس الطريقة المذكورة أعلاه
  5. XOR القيم الثلاث معًا (الأصل المظلل ، الاستبدال والاستبدال المظلل)

سيعطيك هذا الرمز الأصلي. ومع ذلك ، كما ذكر كين ، قد يكون هناك دعم وحتى آثار قانونية للقيام بذلك ، لذا تأكد من استشارة محاميك أولاً.

18
Sebastian Meine

يتم تشفير نص الوحدة باستخدام RC4 تشفير الدفق.

يتم حساب مفتاح التهيئة RC4 من SHA-1 تجزئة:

  • مجموعة قاعدة بيانات GUID (from sys.database_recovery_status)
    تم التحويل من uniqueidentifier إلى ثنائي (16)
  • الوحدة معرف الكائن (من عروض الكتالوج)
    تم التحويل من integer إلى end-endian binary (4)
  • الوحدة معرف الكائن الفرعي
    تحويل من smallint إلى little-endian binary (2).

المعرّف الفرعي لكائن الوحدة هو:

  • 1 لإجراء مخزن غير مرقم ؛ أو
  • رقم الإجراء لإجراء مخزن مُرقّم (مهمل) ؛ أو
  • 0 خلاف ذلك.

يمكن للمستخدم ذي الامتيازات المناسبة فك تشفير الوحدة النمطية عن طريق:

  1. الحصول على ثنائي مشفر من sys.sysobjvalues (باستخدام DAC)
  2. حساب مفتاح RC4 كما هو مفصل أعلاه
  3. تشغيل خوارزمية RC4 القياسية المعروفة على ثنائي
  4. تحويل النتيجة من ثنائي إلى nvarchar (max)

مزيد من التفاصيل وتنفيذ التعليمات البرمجية بالكامل في مقالتي:

باطني WITH ENCRYPTION

14
Paul White 9

يمكنك الاتصال بـ SQL Server باستخدام Dedicated Administrator Connection (DAC) ثم عرض نص SQL للإجراء المخزن. الاتصال بـ DAC باستخدام:

admin:Your_Servername

يمكنك العثور على الخطوات الكاملة المطلوبة في هذه الإجابة على Stack Overflow بواسطة Martin Smith .

بديل آخر هو استخدام بعض البرامج النصية لجهات خارجية كما هو مذكور في فك تشفير الإجراءات المخزنة المشفرة وطرق العرض والوظائف في SQL Server 2005 و 2008 و R2

كملاحظة جانبية - إذا كانت قاعدة بيانات تابعة لجهة خارجية وإذا قمت بذلك في منتج ، فهل سيدعمها البائع؟ قد يكون هناك سبب وجيه لتشفير SPs أو طرق العرض. ربما من الأفضل أخذ نسخة احتياطية ، ثم العبث بذلك.

12
Kin Shah

إذا كنت تريد معاينة برنامج DDL الأصلي أو فك تشفير كائن مشفر ، فيمكنك التحقق --- ApexSQL Decrypt

إنها أداة مستقلة مجانية ، مع خيار دمجها في SSMS ومعاينة برنامج DDL النصي الأصلي. أيضا ، يمكنك فك تشفير الكائنات الموجودة على خوادم متعددة في دور واحد. أداة أخرى يمكن أن تساعدك ، هي dbForge SQL Decryptor

8
McRobert

طريقة أستخدمها كثيرًا لفك تشفير العديد من الإجراءات المخزنة في وقت واحد ...

استخدم SQL RedGate قارن وقارن قاعدة بياناتك بقاعدة بيانات فارغة (أو أي قاعدة بيانات تعرف أنها لن تحتوي على الإجراءات المخزنة). قم بإنشاء برنامج نصي للنشر ونسخه إلى SSMS. بحث واستبدال مع التشفير بمسافة بيضاء. ثم قم بتغيير إجراء CREATE إلى ALTER PROCEDURE. قم بتشغيل البرنامج النصي RedGate مقابل قاعدة البيانات الأصلية وقمت بإزالة كل تشفير الإجراءات المخزنة.

كان لدي قاعدة بيانات تحتوي على أكثر من 400 إجراء مخزّن ، وعلى الرغم من أن SQL Prompt سهل الاستخدام ، لم يكن الأمر يستحق وقتي للنقر بزر الماوس الأيمن ونسخه ولصقه مقابل أكثر من 400 إجراء مخزن. باستخدام RedGate SQL Compare ، تمكنت من إزالة التشفير من أكثر من 400 إجراء مخزّن في 10 دقائق تقريبًا بدءًا من الانتهاء.

0
Aaron Hurst