Cách xem chế độ xem được mã hóa hoặc quy trình được lưu trữ


27

Tôi đang làm việc trên cơ sở dữ liệu của bên thứ ba.

Khi tôi cố gắng xem định nghĩa của chế độ xem bằng cách nhấp chuột phải CREATE TOvà sau đó NEW QUERY EDIT WINDOW, tôi gặp lỗi:

Thuộc tính này có thể không tồn tại cho đối tượng này hoặc có thể không thể truy xuất được do không đủ quyền truy cập. Các văn bản được mã hóa.


Nếu cần, bạn cũng có thể chạy theo dõi hồ sơ SQL và nắm bắt những gì SP SQL cũng đang làm theo cách này.
Pimp Juice IT

Có thể có được tsql mã hóa thông qua sql profiler? @PimpJuiceIT
wenzzzel

@wenzzzel Tôi tin là vậy nhưng tôi không nhớ chính xác để nói với bạn với độ chính xác 100% nhưng tôi tin int anh ấy đã qua với một SP được mã hóa, tôi đã chạy một dấu vết hồ sơ để xem những gì cần thiết. Tôi không hỗ trợ bất kỳ môi trường nào tại thời điểm tôi có thể xác nhận điều này nhưng tôi tin rằng bạn có thể thấy những gì chạy với dấu vết hồ sơ ngay cả khi nó đến từ một quy trình được mã hóa.
Pimp Juice IT

Được rồi, tôi không chắc lắm về điều đó vì tất cả những gì tôi nhận được là-- Encrypted text
wenzzzel

Câu trả lời:


12

Một công cụ bên thứ ba khác mà bạn có thể sử dụng để giải mã các đối tượng được mã hóa nhanh chóng là Dấu nhắc SQL của Red Gate: http://www.red-gate.com/products/sql-development/sql-prompt/features

Di chuột qua thủ tục được lưu trữ sau đó sẽ cho phép bạn xem tập lệnh tạo được giải mã.

Tuyên bố miễn trừ trách nhiệm: công cụ này mang tính thương mại (với bản dùng thử miễn phí 14 ngày) và tôi làm việc cho Red Gate.


18

Tôi có một mô tả khá chi tiết về vấn đề này ở đây .

Nói tóm lại, đối tượng không thực sự được mã hóa, mà là bị xáo trộn. Vì vậy, chúng tôi có thể lấy lại bản gốc. Phương pháp này có một chút liên quan nhưng nó bao gồm các bước sau:

  1. Kết nối với phiên bản bằng Kết nối quản trị viên chuyên dụng
  2. Chọn mã bị xáo trộn như thế này:

    SELECT @secret = imageval
    FROM   sys.sysobjvalues
    WHERE  objid = OBJECT_ID(@object_name);
    
  3. Thay thế đối tượng bằng một đối tượng khác có cùng tên object_id và cùng độ dài tính bằng byte (ví dụ: sử dụng ALTER PROCEDURE)

  4. Lấy mã mới bị xáo trộn theo cách tương tự như trên
  5. XOR ba giá trị với nhau (thay thế nguyên gốc, thay thế và thay thế bị che khuất)

Điều đó sẽ cung cấp cho bạn mã gốc. Tuy nhiên, như Kin đã đề cập, có thể có sự hỗ trợ và thậm chí có ý nghĩa pháp lý khi thực hiện việc này vì vậy hãy chắc chắn tham khảo ý kiến ​​luật sư của bạn trước.


14

Văn bản mô-đun được mã hóa bằng mật mã dòng RC4 .

Khóa khởi tạo RC4 được tính từ hàm băm SHA-1 của:

  • Các GUID gia đình cơ sở dữ liệu (từ sys.database_recovery_status )
    Đã chuyển đổi từ uniqueidentifier để nhị phân (16)
  • ID đối tượng của mô-đun (từ chế độ xem danh mục)
    Được chuyển đổi từ số nguyên sang nhị phân nhỏ cuối (4)
  • ID phụ đối tượng của mô-đun
    Chuyển đổi từ smallint sang nhị phân endian nhỏ (2) .

ID phụ đối tượng của mô-đun là:

  • 1 cho một thủ tục lưu trữ không đánh số; hoặc là
  • Số thủ tục cho một thủ tục được lưu trữ được đánh số (không dùng nữa); hoặc là
  • 0 khác.

Sau đó, người dùng có đặc quyền phù hợp có thể giải mã mô-đun bằng cách:

  1. Lấy nhị phân được mã hóa từ sys.sysobjvalues (sử dụng DAC)
  2. Tính toán khóa RC4 như chi tiết ở trên
  3. Chạy thuật toán RC4 tiêu chuẩn nổi tiếng trên hệ nhị phân
  4. Chuyển đổi kết quả từ nhị phân sang nvarchar (tối đa)

Thêm chi tiết và triển khai mã đầy đủ trong bài viết của tôi:

Nội bộ của WITH ENCRYPTION


Tôi nghĩ rằng đây là cách tiếp cận đơn giản nhất, phi thương mại, trong đó cài đặt công cụ của bên thứ 3 không phải là một giải pháp khả thi.
John Eisbrener

12

Bạn có thể kết nối với SQL Server bằng cách sử dụng Kết nối quản trị viên chuyên dụng (DAC) sau đó xem văn bản sql của thủ tục được lưu trữ. Kết nối với DAC bằng cách sử dụng:

admin:Your_Servername

Bạn có thể tìm thấy các bước đầy đủ cần thiết trong câu trả lời này trên Stack Overflow của Martin Smith .

Một cách khác là sử dụng một số tập lệnh của bên thứ ba như được đề cập trong Giải mã các thủ tục, khung nhìn, chức năng được lưu trữ được mã hóa trong SQL Server 2005, 2008, & R2

Như một lưu ý phụ - nếu đó là cơ sở dữ liệu của bên thứ ba và nếu bạn thực hiện trên prod, nhà cung cấp có hỗ trợ không? Có thể có một lý do chính đáng để mã hóa SP hoặc lượt xem. Có lẽ tốt hơn để có một bản sao lưu, và sau đó sử dụng nó.


8

Nếu bạn muốn xem trước tập lệnh DDL gốc hoặc để giải mã một đối tượng được mã hóa, bạn có thể kiểm tra ApexQuery Decrypt

Đây là một công cụ độc lập miễn phí, với tùy chọn tích hợp nó vào SSMS, xem trước tập lệnh DDL gốc. Ngoài ra, bạn có thể giải mã các đối tượng nằm trên nhiều máy chủ trong một lượt. Một công cụ nữa có thể giúp bạn, đó là Bộ giải mã SQL dbForge


0

Một phương pháp tôi thường sử dụng để giải mã một số thủ tục được lưu trữ tại một thời điểm ...

Sử dụng So sánh SQL của RedGate và so sánh cơ sở dữ liệu của bạn với cơ sở dữ liệu trống (hoặc bất kỳ cơ sở dữ liệu nào bạn biết sẽ không có các quy trình được lưu trữ). Tạo một kịch bản triển khai và sao chép vào SSMS. Tìm và thay thế VỚI ENCRYPTION với khoảng trắng. Sau đó thay đổi QUY TRÌNH TẠO thành THỦ TỤC THAY ĐỔI. Chạy tập lệnh RedGate dựa trên cơ sở dữ liệu gốc và bạn đã xóa tất cả mã hóa thủ tục được lưu trữ.

Tôi đã có một cơ sở dữ liệu với hơn 400 thủ tục được lưu trữ và trong khi SQL Prompt tiện dụng, nó không đáng để tôi nhấp chuột phải, sao chép, dán vào hơn 400 thủ tục được lưu trữ. Sử dụng RedGate SQL So sánh Tôi có thể xóa mã hóa khỏi hơn 400 thủ tục được lưu trữ của mình trong khoảng 10 phút bắt đầu để kết thúc.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.