SQL Server存储过程和存储函数的加密以及解密代码


  本文标签:SQL Server 存储过程和存储函数的加密以及解密

  SQL Server存储过程和存储函数的加密以及解密代码的相关知识是本文我们主要要介绍的内容,接下来就让我们一起来了解下这部分代码吧  。

  存储过程和存储函数的加密:

  1. WITH ENCRYPTION   
  2. CREATE procedure dbo.sp_XML_main  
  3. @table_name nvarchar(260)=,  
  4. @dirname nvarchar(20)=  
  5. WITH ENCRYPTION  
  6. as  
  7. begin  
  8. ....................................................  
  9. end  
  10. go  

  

  存储过程、存储函数的解密(以下是一位绝世高人编写的代码)  。

  

  1. if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[sp_decrypt])   
  2. and OBJECTPROPERTY(id, NIsProcedure) = 1)  
  3. drop procedure [dbo].[sp_decrypt]  
  4. GO 
  1. /*--破解函数,过程,触发器,视图.仅限于SQL Server 2000  
  2. --作者:J9988--*/  
  3. /*--调用示例  
  4. --解密指定存储过程  
  5. exec sp_decrypt AppSP_test  
  6. --对所有的存储过程解密  
  7. declare tb cursor for  
  8. select name from sysobjects where xtype=P and status>0 and name<>sp_decrypt  
  9. declare @name sysname  
  10. open tb  
  11. fetch next from tb into @name  
  12. while @@fetch_status=0 
  13. begin  
  14. print /*-------存储过程 [+@name+] -----------*/  
  15. exec sp_decrypt @name  
  16. fetch next from tb into @name  
  17. end  
  18. close tb  
  19. deallocate tb  
  20. --*/  
  21. if exists (select * from dbo.sysobjects where id = object_id(N[dbo].[SP_DECRYPT]) and OBJECTPROPERTY(id, NIsProcedure) = 1)  
  22. drop procedure [dbo].[SP_DECRYPT]  
  23. GO  
  24. CREATE  PROCEDURE sp_decrypt(@objectName varchar(50))  
  25. AS  
  26. begin  
  27. set nocount on  
  28. --CSDN:j9988 copyright:2004.04.15  
  29. --V3.1  
  30. --破解字节不受限制,适用于SQL Server 2000存储过程,函数,视图,触发器  
  31. --修正上一版视图触发器不能正确解密错误  
  32. --发现有错,请E_MAIL:CSDNj9988@tom.com  
  33. begin tran  
  34. declare @objectname1 varchar(100),@orgvarbin varbinary(8000)  
  35. declare @sql1 nvarchar(4000),@sql2 varchar(8000),@sql3 nvarchar(4000),@sql4 nvarchar(4000)  
  36. DECLARE  @OrigSpText1 nvarchar(4000),  @OrigSpText2 nvarchar(4000) , @OrigSpText3 nvarchar(4000), @resultsp nvarchar(4000)  
  37. declare  @i int,@status int,@type varchar(10),@parentid int  
  38. declare @colid int,@n int,@q int,@j int,@k int,@encrypted int,@number int  
  39. select @type=xtype,@parentid=parent_obj from sysobjects where id=object_id(@ObjectName)  
  40. create table  #temp(number int,colid int,ctext varbinary(8000),encrypted int,status int)  
  41. insert #temp SELECT number,colid,ctext,encrypted,status FROM syscomments  WHERE id = object_id(@objectName)  
  42. select @number=max(number) from #temp  
  43. set @k=0 
  44. while @k<=@number  
  45. begin  
  46. if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)  
  47. begin  
  48. if @type=P 
  49. set @sql1=(case when @number>1 then ALTER PROCEDURE + @objectName +;+rtrim(@k)+ WITH ENCRYPTION AS   
  50. else ALTER PROCEDURE + @objectName+ WITH ENCRYPTION AS   
  51. end)  
  52. if @type=TR 
  53. begin  
  54. declare @parent_obj varchar(255),@tr_parent_xtype varchar(10)  
  55. select @parent_objparent_obj=parent_obj from sysobjects where id=object_id(@objectName)  
  56. select @tr_parent_xtype=xtype from sysobjects where id=@parent_obj  
  57. if @tr_parent_xtype=V 
  58. begin  
  59. set @sql1=ALTER TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION INSTERD OF INSERT AS PRINT 1   
  60. end  
  61. else  
  62. begin  
  63. set @sql1=ALTER TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION FOR INSERT AS PRINT 1   
  64. end  
  65. end  
  66. if @type=FN or @type=TF or @type=IF 
  67. set @sql1=(case @type when TF then  
  68. ALTER FUNCTION + @objectName+(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end   
  69. when FN then  
  70. ALTER FUNCTION + @objectName+(@a char(1)) returns char(1) with encryption as begin return @a end  
  71. when IF then  
  72. ALTER FUNCTION + @objectName+(@a char(1)) returns table with encryption as return select @a as a  
  73. end)  
  74. if @type=V 
  75. set @sql1=ALTER VIEW +@objectname+ WITH ENCRYPTION AS SELECT 1 as f  
  76. set @q=len(@sql1)  
  77. set @sql1=@sql1+REPLICATE(-,4000-@q)  
  78. select @sql2=REPLICATE(-,8000)  
  79. set @sql3=exec(@sql1 
  80. select @colid=max(colid) from #temp where number=@k  
  81. set @n=1 
  82. while @n<=CEILING(1.0*(@colid-1)/2) and len(@sQL3)<=3996  
  83. begin  
  84. set @sql3=@sql3++@  
  85. set @n=@n+1  
  86. end  
  87. set @sql3=@sql3+)  
  88. exec sp_executesql @sql3,N@sql1 nvarchar(4000),@ varchar(8000),@sql1=@sql1,@=@sql2  
  89. end  
  90. set @k=@k+1  
  91. end  
  92. set @k=0 
  93. while @k<=@number  
  94. begin  
  95. if exists(select 1 from syscomments where id=object_id(@objectname) and number=@k)  
  96. begin  
  97. select @colid=max(colid) from #temp where number=@k  
  98. set @n=1 
  99. while @n<=@colid  
  100. begin  
  101. select @OrigSpText1=ctext,@encryptedencrypted=encrypted,@statusstatus=status FROM #temp  WHERE colid=@n and number=@k  
  102. SET @OrigSpText3=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k)  
  103. if @n=1 
  104. begin  
  105. if @type=P 
  106. SET @OrigSpText2=(case when @number>1 then CREATE PROCEDURE + @objectName +;+rtrim(@k)+ WITH ENCRYPTION AS   
  107. else CREATE PROCEDURE + @objectName + WITH ENCRYPTION AS   
  108. end)  
  109. if @type=FN or @type=TF or @type=IF 
  110. SET @OrigSpText2=(case @type when TF then  
  111. CREATE FUNCTION + @objectName+(@a char(1)) returns @b table(a varchar(10)) with encryption as begin insert @b select @a return end   
  112. when FN then  
  113. CREATE FUNCTION + @objectName+(@a char(1)) returns char(1) with encryption as begin return @a end  
  114. when IF then  
  115. CREATE FUNCTION + @objectName+(@a char(1)) returns table with encryption as return select @a as a  
  116. end)  
  117. if @type=TR 
  118. begin  
  119. if @tr_parent_xtype=V 
  120. begin  
  121. set @OrigSpText2=CREATE TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION INSTEAD OF INSERT AS PRINT 1   
  122. end  
  123. else  
  124. begin  
  125. set @OrigSpText2=CREATE TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION FOR INSERT AS PRINT 1   
  126. end  
  127. end  
  128. if @type=V 
  129. set @OrigSpText2=CREATE VIEW +@objectname+ WITHENCRYPTION AS SELECT 1 as f  
  130. set @q=4000-len(@OrigSpText2)  
  131. set @OrigSpText2=@OrigSpText2+REPLICATE(-,@q)  
  132. end  
  133. else  
  134. begin  
  135. SET @OrigSpText2=REPLICATE(-, 4000)  
  136. end  
  137. SET @i=1 
  138. SET @resultsp = replicate(NA, (datalength(@OrigSpText1) / 2))  
  139. WHILE @i<=datalength(@OrigSpText1)/2  
  140. BEGIN  
  141. SET @resultsp = stuff(@resultsp, @i, 1, NCHAR(UNICODE(substring(@OrigSpText1, @i, 1)) ^  
  142.       (UNICODE(substring(@OrigSpText2, @i, 1)) ^  
  143.       UNICODE(substring(@OrigSpText3, @i, 1)))))  
  144. SET @i=@i+1  
  145. END  
  146. set @orgvarbin=cast(@OrigSpText1 as varbinary(8000))  
  147. set @resultsp=(case when @encrypted=1 
  148. then @resultsp  
  149. else convert(nvarchar(4000),case when @status&22=2 then uncompress(@orgvarbin) else @orgvarbin end)  
  150. end)  
  151. print @resultsp  
  152. set @n=@n+1  
  153. end  
  154. end  
  155. set @k=@k+1  
  156. end  
  157. drop table #temp  
  158. rollback tran  
  159. end 

  

  关于SQL Server存储过程和存储函数的加密以及解密代码的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!