sql >> Databasteknik >  >> RDS >> Sqlserver

Hur man dekrypterar lagrad procedur i SQL Server 2008

SQL Server Pro-artikeln "Dekryptera SQL Server-objekt" fungerar fortfarande i SQL Server 2008.

Du måste ansluta via DAC. Se filen "Dekryptera SQL 2005 lagrade procedurer, funktioner, utlösare, views.sql" i nedladdningen .

Bara för att sammanfatta stegen som den utför för följande lagrade procedurdefinition

CREATE PROC dbo.myproc
WITH ENCRYPTION
AS
SELECT 'FOO'
  1. Hämtar den krypterade objekttexten från imageval kolumn i sys.sysobjvalues och lagrar den i en variabel @ContentOfEncryptedObject
  2. Beräknar @ObjectDataLength från DATALENGTH(@ContentOfEncryptedObject)/2 .
  3. Genererar en ALTER PROCEDURE uttalande utfyllt till korrekt längd med - tecken (så i det här fallet ALTER PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS------------ )
  4. Kör ALTER sats, hämtar den krypterade versionen från sys.sysobjvalues och lagrar det i variabeln @ContentOfFakeEncryptedObject rullar sedan tillbaka ändringen.
  5. Genererar en CREATE PROCEDURE uttalande utfyllt till korrekt längd med - tecken (så i det här fallet CREATE PROCEDURE [dbo].[myproc] WITH ENCRYPTION AS----------- ). Detta lagras i variabeln @ContentOfFakeObject

Den går sedan igenom för @i = 1 to @ObjectDataLength och dekrypterar definitionen ett tecken åt gången med hjälp av följande XOR beräkning.

NCHAR(
      UNICODE(SUBSTRING(@ContentOfEncryptedObject, @i, 1)) ^
      (
          UNICODE(SUBSTRING(@ContentOfFakeObject, @i, 1)) ^
          UNICODE(SUBSTRING(@ContentOfFakeEncryptedObject, @i, 1))
      )
     )


  1. Ansluta ett bord till många bord

  2. Oracle:Vad betyder "kör omedelbart"?

  3. Så här grupperar du följande rader efter ett inte unikt värde

  4. SQL Injection attack - Vad gör detta?