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

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, 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存储过程和存储函数的加密以及解密代码的相关知识就介绍到这里了,希望本次的介绍能够对您有所收获!

新闻标题:SQLServer存储过程和存储函数的加密以及解密代码
网站地址:http://www.shufengxianlan.com/qtweb/news18/312168.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联