WEB开发网
开发学院数据库MSSQL Server 怎样对SQL Server 2005存储过程解密 阅读

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

 2008-05-09 09:55:40 来源:WEB开发网   
核心提示:SQLServer2005里使用with encryption选项创建的存储过程仍然和sqlserver2000里一样,都是使用XOR进行了的加密,怎样对SQL Server 2005存储过程解密,和2000不一样的是,在2005的系统表syscomments里已经查不到加密过的密文了,'PRINT '

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)

1 2 3 4 5 6  下一页

Tags:怎样 SQL Server

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接