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:[email protected]  
  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() 来自动产生行号

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/229364.html<

(0)
管理的头像管理
上一篇2025-04-18 17:51
下一篇 2025-04-18 17:53

相关推荐

  • 云服务器和云虚拟主机怎么选?云服务器和虚拟主机区别

    云服务器适合业务增长快、需弹性扩展的场景,而云虚拟主机适合预算有限、技术门槛低的小型静态网站或测试环境,二者核心区别在于资源独享性与运维复杂度,核心差异解析:从底层架构到使用体验很多人容易混淆这两者,觉得它们都是“买空间建站”,它们的底层逻辑完全不同,云服务器(ECS)就像是你租了一整栋别墅,水电网络独立,你想……

    2026-06-29
    0
  • 赣州智慧旅游招聘是真的吗?赣州旅游人才招聘信息

    中级岗位(3-5年经验)月薪范围通常在6000-10000元,这类岗位需要独立负责项目模块,如独立运营一个抖音账号,或维护一个景区小程序的功能迭代,具备成功案例的候选人议价能力较强,高级岗位(5年以上经验)月薪范围通常在10000-20000元,部分核心管理岗可达更高,这类人才需要具备战略规划能力,如制定整个景……

    2026-06-29
    0
  • 赣州智能物联网车位锁如何管理?智能车位锁管理系统多少钱

    赣州智能物联网车位锁管理的核心在于通过云端平台实现远程控锁、状态实时监控及自动计费,彻底解决传统车位“被占难管”与“找位难”的痛点,在赣州这样的城市,随着机动车保有量的持续增长,老旧小区、商业综合体以及私人固定车位的资源矛盾日益凸显,传统的机械地锁或简易遥控锁,不仅操作繁琐,更无法实现数据化管理,引入智能物联网……

    2026-06-29
    0
  • 赣州智能消防栓好用吗,智能消防栓多少钱一个

    赣州智能消防栓通过物联网技术实现实时监测与远程报警,能显著降低火灾响应时间并提升城市消防安全管理水平,是目前智慧城市建设中不可或缺的基础设施,赣州智能消防栓的核心价值与应用场景传统消防栓往往存在“看不见、摸不着、用不了”的痛点,在赣州这样地形复杂、老城区与新城区并存的区域,传统设施的管理难度极大,智能消防栓的出……

    2026-06-29
    0
  • 云服务器和物理机到底有啥区别?

    云服务器本质上是虚拟化资源池中的弹性实例,而传统物理服务器是独占的硬件实体,前者胜在弹性与运维便捷,后者强在物理隔离与性能稳定,具体选择取决于业务对成本、扩展性及安全合规的权衡,很多人初次接触服务器时,容易把“云服务器”和“传统物理服务器”混为一谈,觉得它们都是用来跑网站或存数据的盒子,这两者的底层逻辑完全不同……

    2026-06-29
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注