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

数据库 SQL Server
本文我们主要介绍了SQL Server存储过程和存储函数的加密以及解密代码的相关知识,希望能够对您有所帮助。

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

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

  1. WITH ENCRYPTION <!--[if !supportLineBreakNewLine]--> <!--[endif]--> 
  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, N'IsProcedure') = 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, N'IsProcedure') = 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(N'A', (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存储过程和存储函数的加密以及解密代码的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

【编辑推荐】

  1. SQL Server 2005导入Oracle 10g的C#源码
  2. SQL Server 2008快速清理日志文件的代码
  3. SQL Server 2008数据库中CDC的功能使用及说明
  4. SQL Server 2008阻止保存要求重新创建表的更改的问题
  5. SQL Server数据库row_number() over() 来自动产生行号
责任编辑:赵鹏 来源: CSDN博客
相关推荐

2010-07-15 12:38:14

SQL Server存

2011-03-31 10:38:28

SQL Server编写优化

2011-08-22 10:15:39

数据库存储过程

2011-03-24 13:38:47

SQL Server 存储分页

2010-09-09 09:49:18

SQL函数存储过程

2009-08-06 16:44:06

2010-11-10 13:03:15

SQL Server存

2010-09-14 10:16:57

sql server

2010-11-12 09:46:55

Sql Server存

2010-09-14 10:36:23

sql server存

2011-03-28 10:46:36

sql server存储分页

2010-09-27 16:10:42

SQL Server游

2010-09-16 16:23:06

sql server批

2012-05-10 11:17:23

JavaSQL Server

2010-09-14 10:47:45

sql server存

2010-11-10 15:47:59

2011-09-01 17:25:03

SQL Server 查看死锁存储过程

2010-09-25 16:00:38

sql存储过程

2010-07-06 14:06:52

SQL Server存

2010-07-05 10:06:51

SQL Server扩
点赞
收藏

51CTO技术栈公众号