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

豆豆网   技术应用频道   2008年05月09日    社区交流

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

  SQLServer2005里使用with encryption选项创建的存储过程仍然和sqlserver2000里一样,都是使用XOR进行了的加密。和2000不一样的是,在2005的系统表syscomments里已经查不到加密过的密文了。要查密文必须使用DAC(专用管理员连接)连接到数据库后,在系统表sys.sysobjvalues查询,该表的列imageval存储了相应的密文。具体可以使用下面的查询:

  SELECT imageval FROM sys.sysobjvalues WHERE objid = object_id(@procedure) AND

  valclass = 1 AND subobjid = 1

  一 下面是解密的存储过程,具体代码如下:

  CREATE PROCEDURE dbo.sp__procedure$decrypt

  (@procedure sysname = NULL, @revfl int = 1)

  AS

  /*

  目前这个存储过程只能解密存储过程,至于解密函数、触发器、视图的存储过程本网站会进一步关注,调用形式为:

  exec dbo.sp__procedure$decrypt @procedure,0

  如果第二个参数使用1的话,会给出该存储过程的一些提示。

  */

  SET NOCOUNT ON

  IF @revfl = 1

  BEGIN

  PRINT '警告:该存储过程会删除并重建原始的存储过程。'

  PRINT ' 在运行该存储过程之前确保你的数据库有一个备份。'

  PRINT ' 该存储过程通常应该运行在产品环境的一个备份的非产品环境下。'

  PRINT ' 为了运行这个存储过程,将参数@refl的值更改为0。'

  RETURN 0

  END

  DECLARE @intProcSpace bigint, @t bigint, @maxColID smallint,@intEncrypted

  tinyint,@procNameLength int

  select @maxColID = max(subobjid),@intEncrypted = imageval FROM

  sys.sysobjvalues WHERE objid = object_id(@procedure)

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

正在加载评论...