วิธีดูมุมมองที่เข้ารหัสหรือกระบวนงานที่เก็บไว้


27

ฉันกำลังทำงานกับฐานข้อมูลบุคคลที่สาม

เมื่อฉันพยายามที่จะดูคำจำกัดความของมุมมองโดยการคลิกขวาCREATE TOจากนั้นNEW QUERY EDIT WINDOWฉันก็จะได้รับข้อผิดพลาด:

คุณสมบัตินี้อาจไม่มีอยู่สำหรับวัตถุนี้หรืออาจไม่สามารถเรียกคืนได้เนื่องจากสิทธิ์การเข้าถึงไม่เพียงพอ ข้อความถูกเข้ารหัส


หากจำเป็นคุณสามารถเรียกใช้การติดตามของผู้สร้างโปรไฟล์ SQL และจับภาพสิ่งที่ SP SQL กำลังทำเช่นนี้ด้วย
Pimp Juice IT

เป็นไปได้ที่จะรับ tsql ที่เข้ารหัสผ่านตัวสร้าง sql หรือไม่? @PimpJuiceIT
wenzzzel

@wenzzzel ฉันเชื่อว่ามันเป็น แต่ฉันจำไม่ได้ว่าจะบอกคุณด้วยความแม่นยำ 100% แต่ฉันเชื่อว่าเขาผ่านการเข้ารหัส SP มาแล้วฉันจึงวิ่งตามรอย profiler เพื่อดูว่าอะไรที่จำเป็น ฉันไม่สนับสนุนสภาพแวดล้อมใด ๆ ในเวลาที่ฉันสามารถยืนยันได้ แต่ฉันเชื่อว่าคุณสามารถเห็นสิ่งที่ทำงานด้วยการติดตามโปรไฟล์แม้ว่ามันจะมาจากกระบวนการเข้ารหัส
Pimp Juice IT

โอเคฉันไม่แน่ใจเกี่ยวกับสาเหตุที่ทำให้ฉันได้รับทั้งหมด-- Encrypted text
wenzzzel

คำตอบ:


12

เครื่องมือของบุคคลที่สามอีกอย่างที่คุณสามารถใช้ในการถอดรหัสวัตถุที่เข้ารหัสได้ทันทีคือ SQL Prompt ของ Red Gate: http://www.red-gate.com/products/sql-development/sql-prompt/features

การโฮเวอร์เหนือโพรซีเดอร์ที่เก็บไว้จะทำให้คุณเห็นสคริปต์การสร้างที่ถอดรหัส

การปฏิเสธความรับผิด: เครื่องมือนี้เป็นโฆษณาเชิงพาณิชย์ (พร้อมทดลองใช้ฟรี 14 วัน) และฉันทำงานให้กับ Red Gate


18

ผมมีคำอธิบายรายละเอียดอย่างเป็นธรรมเกี่ยวกับปัญหานี้ที่นี่

ในระยะสั้นวัตถุไม่ได้เข้ารหัสจริงๆ แต่ทำให้งงงวย ดังนั้นเราสามารถดึงต้นฉบับกลับมาได้ วิธีนี้มีส่วนเกี่ยวข้องเล็กน้อย แต่ประกอบด้วยขั้นตอนเหล่านี้:

  1. เชื่อมต่อกับอินสแตนซ์โดยใช้การเชื่อมต่อผู้ดูแลระบบเฉพาะ
  2. เลือกรหัสที่ยุ่งเหยิงดังนี้:

    SELECT @secret = imageval
    FROM   sys.sysobjvalues
    WHERE  objid = OBJECT_ID(@object_name);
    
  3. แทนที่วัตถุด้วยวัตถุอื่นที่มีชื่อเดียวกัน object_id เดียวกันและความยาวเท่ากันเป็นไบต์ (เช่นใช้ALTER PROCEDURE)

  4. รับโค้ดที่สับสนใหม่ด้วยวิธีเดียวกันกับข้างบน
  5. แฮคเกอร์สามค่าด้วยกัน (ต้นฉบับที่ทำให้งงการแทนที่และการแทนที่ที่ทำให้งง)

ที่จะให้รหัสเดิมแก่คุณ อย่างไรก็ตามอย่างที่คินพูดถึงอาจมีการสนับสนุนและแม้แต่ความเกี่ยวข้องทางกฎหมายในการทำเช่นนี้ดังนั้นโปรดปรึกษาทนายของคุณก่อน


14

ข้อความโมดูลถูกเข้ารหัสโดยใช้การเข้ารหัสกระแสRC4

คีย์การกำหนดค่าเริ่มต้น RC4 คำนวณจากแฮชSHA-1ของ:

  • GUID ครอบครัวฐานข้อมูล (จากsys.database_recovery_status )
    ดัดแปลงมาจากuniqueidentifierเพื่อไบนารี (16)
  • ID วัตถุของโมดูล(จากมุมมองแคตตาล็อก)
    แปลงจากเลขจำนวนเต็มเป็นเลขฐานสองแบบ little-endian (4)
  • โมดูลของวัตถุย่อย ID
    ดัดแปลงมาจากsmallintน้อย-endian ไบนารี (2)

ID ย่อยของโมดูลคือ:

  • 1 สำหรับโพรซีเดอร์ที่เก็บไว้โดยไม่ระบุหมายเลข; หรือ
  • หมายเลขโพรซีเดอร์สำหรับโพรซีเดอร์ที่เก็บหมายเลข (คัดค้าน) หรือ
  • 0 มิฉะนั้น

ผู้ใช้ที่มีสิทธิ์อย่างเหมาะสมสามารถถอดรหัสโมดูลโดย:

  1. การรับไบนารีที่เข้ารหัสจากsys.sysobjvalues (โดยใช้ DAC)
  2. คำนวณคีย์ RC4 ตามรายละเอียดด้านบน
  3. ใช้งานอัลกอริทึม RC4 มาตรฐานที่รู้จักกันดีในไบนารี
  4. การแปลงผลลัพธ์จากไบนารีเป็นnvarchar (สูงสุด)

รายละเอียดเพิ่มเติมและการใช้รหัสแบบเต็มในบทความของฉัน:

The Internals of WITH ENCRYPTION


ฉันคิดว่านี่เป็นวิธีที่ตรงไปตรงมาที่สุดไม่ใช่เชิงพาณิชย์การติดตั้งเครื่องมือของบุคคลที่สามไม่ใช่วิธีที่เป็นไปได้
John Eisbrener

12

คุณสามารถเชื่อมต่อกับ SQL Server โดยใช้การเชื่อมต่อผู้ดูแลระบบเฉพาะ (DAC)จากนั้นดูข้อความ sql ของกระบวนการที่เก็บไว้ เชื่อมต่อกับ DAC โดยใช้:

admin:Your_Servername

คุณสามารถค้นหาขั้นตอนเต็มรูปแบบที่จำเป็นในคำตอบนี้บนกองมากเกินโดยมาร์ตินสมิ ธ

อีกทางเลือกหนึ่งคือการใช้สคริปต์บุคคลที่สามตามที่กล่าวไว้ในการถอดรหัสขั้นตอนการจัดเก็บมุมมองฟังก์ชั่นที่เข้ารหัสใน SQL Server 2005, 2008, & R2

ในฐานะที่เป็นบันทึกย่อด้านข้าง - ถ้าเป็นฐานข้อมูลบุคคลที่สามและหากคุณทำใน prod ผู้ขายจะสนับสนุนหรือไม่ อาจมีเหตุผลที่ดีในการเข้ารหัส SP หรือมุมมอง มันอาจจะดีกว่าถ้าคุณใช้การสำรองข้อมูล


8

หากคุณต้องการดูตัวอย่างสคริปต์ DDL ดั้งเดิมหรือถอดรหัสวัตถุที่เข้ารหัสคุณสามารถตรวจสอบApexSQL Decrypt

มันเป็นเครื่องมือสแตนด์อโลนฟรีพร้อมตัวเลือกในการรวมเข้ากับ SSMS ดูตัวอย่างสคริปต์ DDL ต้นฉบับ นอกจากนี้คุณสามารถถอดรหัสวัตถุที่อยู่ในเซิร์ฟเวอร์หลายเครื่องในคราวเดียว อีกหนึ่งเครื่องมือที่สามารถช่วยคุณได้คือdbForge SQL Decryptor


0

วิธีที่ฉันใช้บ่อยครั้งในการถอดรหัสขั้นตอนการจัดเก็บหลายครั้ง ...

ใช้ SQL เปรียบเทียบของ RedGate และเปรียบเทียบฐานข้อมูลของคุณกับฐานข้อมูลเปล่า (หรือฐานข้อมูลใด ๆ ที่คุณรู้ว่าจะไม่มีขั้นตอนการจัดเก็บ) สร้างสคริปต์การปรับใช้และคัดลอกลงใน SSMS ค้นหาและแทนที่ด้วยการเข้ารหัสด้วยพื้นที่สีขาว จากนั้นเปลี่ยน CREATE PROCEDURE เพื่อเปลี่ยน PROCEDURE รันสคริปต์ RedGate จากฐานข้อมูลดั้งเดิมและคุณได้ลบการเข้ารหัสขั้นตอนที่เก็บไว้ทั้งหมด

ฉันมีฐานข้อมูลที่มีโพรซีเดอร์ที่เก็บไว้ 400+ รายการและในขณะที่ SQL Prompt นั้นมีประโยชน์มันก็ไม่คุ้มค่ากับเวลาของฉันที่จะคลิกขวาคัดลอกวางกับโพรซีเดอร์ที่เก็บไว้มากกว่า 400 รายการ การใช้ RedGate SQL Compare ฉันสามารถลบการเข้ารหัสจากขั้นตอนการจัดเก็บ 400+ ของฉันในเวลาประมาณ 10 นาทีโดยเริ่มต้นจนเสร็จ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.