文档详情

SQLServer2005里怎样对使用with encryption选项创建存储过程解密.doc

发布:2017-08-01约9.75千字共6页下载文档
文本预览下载声明
SQLServer2005里怎样对使用with encryption选项创建的存储过程解密 --王成辉翻译整理,转贴请注明出自微软BI开拓者 HYPERLINK \t _blank -- HYPERLINK /Newsgroups/microsoft.public.sqlserver.security/2006-08/msg00286.html \t _blank 原帖地址 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__windbi$decrypt] (@procedure sysname = NULL, @revfl int = 1) AS /* 王成辉翻译整理,转贴请注明出自微软BI开拓者 HYPERLINK \t _blank 目前这个存储过程只能解密存储过程,至于解密函数、触发器、视图的存储过程本网站会进一步关注,调用形式为: exec dbo.sp__windbi$decrypt @procedure,0 如果第二个参数使用1的话,会给出该存储过程的一些提示。 --版本3.0? 修正存储过程过长引起的问题 */ SET NOCOUNT ON IF @revfl = 1 BEGIN PRINT 警告:该存储过程会删除并重建原始的存储过程。 PRINT 在运行该存储过程之前确保你的数据库有一个备份。 PRINT 该存储过程通常应该运行在产品环境的一个备份的非产品环境下。 PRINT 为了运行这个存储过程,将参数@refl的值更改为0。 RETURN 0 END DECLARE @intProcSpace bigint, @t bigint, @maxColID smallint,@procNameLength int select @maxColID = max(subobjid) FROM sys.sysobjvalues WHERE objid = object_id(@procedure) --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) declare @objtype varchar(2),@ParentName nvarchar(max) select @real_decrypt_01a = --提取对象的类型如是存储过程还是函数,如果是触发器,还要得到其父对象的名称 select @objtype=type,@parentname=object_name(parent_object_id) from sys.objects where [object_id]=object_id(@procedure) -- 从sys.sysobjvalues里提出加密的imageval记录 SET @real_01=(SELECT top 1 imageval FROM sys.sysobjvalues WHERE objid = object_id(@procedure) and valclass = 1 order by subobjid) --创建一个临时表 create table #output ( [ident] [int] IDENTITY (1, 1) NOT NULL , [real_decrypt] NVARCHAR(MAX) ) --开始一个事务,稍后回滚 BEGIN TRAN --更改原始的存储过程,用短横线替换 if @o
显示全部
相似文档