怎样对SQL Server 2005存储过程解密

豆豆网   技术应用频道   2008年05月09日  【字号: 收藏本文

内容摘要:要查密文必须使用DAC(专用管理员连接)连接到数据库后,在系统表sys.sysobjvalues查询,该表的列imageval存储了相应的密文。

  GROUP BY imageval

  --select @maxColID as 'Rows in sys.sysobjvalues'

  select @procNameLength = datalength(@procedure) + 29

  DECLARE @real_01 nvarchar(max)

  DECLARE @fake_01 nvarchar(max)

  DECLARE @fake_encrypt_01 nvarchar(max)

  DECLARE @real_decrypt_01 nvarchar(max),@real_decrypt_01a nvarchar(max)

  select @real_decrypt_01a = ''

  -- 从sys.sysobjvalues里提出加密的imageval记录

  SET @real_01=(SELECT imageval FROM sys.sysobjvalues WHERE objid =

  object_id(@procedure) and valclass = 1 and subobjid = 1 )

  --创建一个临时表

  create table #output ( [ident] [int] IDENTITY (1, 1) NOT NULL ,

  [real_decrypt] NVARCHAR(MAX) )

  --开始一个事务,稍后回滚

  BEGIN TRAN

  --更改原始的存储过程,用短横线替换

  SET @fake_01='ALTER PROCEDURE '+ @procedure +' WITH ENCRYPTION AS

  '+REPLICATE('-', 40003 - @procNameLength)

  EXECUTE (@fake_01)

  --从sys.sysobjvalues里提出加密的假的

  SET @fake_encrypt_01=(SELECT imageval FROM sys.sysobjvalues WHERE objid =

  object_id(@procedure) and valclass = 1 and subobjid = 1)

  SET @fake_01='CREATE PROCEDURE '+ @procedure +' WITH ENCRYPTION AS

  '+REPLICATE('-', 40003 - @procNameLength)

  --开始计数

  SET @intProcSpace=1

  --使用字符填充临时变量

  SET @real_decrypt_01 = replicate(N'A', (datalength(@real_01) /2 ))

来源:微软BI开拓者    作者:拓狼    责编:豆豆技术应用

正在加载评论...