加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SqlServer 2014 解密存储过程

发布时间:2020-12-12 13:53:12 所属栏目:MsSql教程 来源:网络整理
导读:我上一篇文章的解密,试验了确实能用,但是解密其他人的不好使了。最终有整了一个。ok 解决了。 还是要在DAC 链接下执行。 我是在cmd中 SQLCMD -d dbintranet_Test -A 1 exec sp_DecryptObject? 'ProcName',400000 2 go CREATE procedure sp_DecryptObject?

我上一篇文章的解密,试验了确实能用,但是解密其他人的不好使了。最终有整了一个。ok 解决了。 还是要在DAC 链接下执行。

我是在cmd中

SQLCMD -d dbintranet_Test -A

1> exec sp_DecryptObject? 'ProcName',400000
2> go


CREATE procedure sp_DecryptObject?

( ? ? @Object sysname,? ?--要解密的对象名:函数,存储过程,视图或触发器 ? ? @MaxLength int=400000 --评估内容的长度 ) as set nocount on /* 1. 解密 */ ? if not exists(select 1 from sys.objects a where a.object_id=object_id(@Object) And a.type in('P','V','TR','FN','IF','TF')) begin ? ? --SQL Server 2008 ? ? --raiserror 50001 N'无效的对象!要解密的对象必须是函数,存储过程,视图或触发器。'? ? ? --SQL Server 2012 ? ? select N'无效的对象!要解密的对象必须是函数,存储过程,视图或触发器。' ? ? return end ? if exists(select 1 from sys.sql_modules a where a.object_id=object_id(@Object) and a.definition is not null) begin ? ? --SQL Server 2008 ? ? --raiserror 50001 N'对象没有加密!'? ? ? --SQL Server 2012 ? ? select N'无效的对象!要解密的对象必须是函数,存储过程,视图或触发器。' ? ? return end ? declare ?@sql nvarchar(max) ? ? ? ? ? ? ? ?--解密出来的SQL语句 ? ? ? ?,@imageval nvarchar(max) ? ? ? ?--加密字符串 ? ? ? ?,@tmpStr nvarchar(max) ? ? ? ? ? ?--临时SQL语句 ? ? ? ?,@tmpStr_imageval nvarchar(max) --临时SQL语句(加密后) ? ? ? ?,@type char(2) ? ? ? ? ? ? ? ? ? ?--对象类型('P','TF') ? ? ? ?,@objectID int ? ? ? ? ? ? ? ? ? ?--对象ID ? ? ? ?,@i int ? ? ? ? ? ? ? ? ? ? ? ? ? ?--While循环使用 ? ? ? ?,@Oject1 nvarchar(1000) ? set @objectID=object_id(@Object) set @type=(select a.type from sys.objects a where a.object_id=@objectID) ? declare @Space4000 nchar(4000) set @Space4000=replicate('-',4000) ? /* @tmpStr 会构造下面的SQL语句 ------------------------------------------------------------------------------- alter trigger Tr_Name on Table_Name with encryption for update as return /**/ alter proc Proc_Name with encryption ?as select 1 as col /**/ alter view View_Name with encryption as select 1 as col /**/ alter function Fn_Name() returns int with encryption as begin return(0) end/**/ */ set @Oject1=quotename(object_schema_name(@objectID))+'.'+quotename(@Object) set @tmpStr= ? ? ? ? case ? ?? ? ? ? ? ? ? when @type ='P ' then N'Alter Procedure '+@Oject1+' with encryption as select 1 as column1 ' ? ? ? ? ? ? when @type ='V ' then N'Alter View '+@Oject1+' with encryption as select 1 as column1 ' ? ? ? ? ? ? when @type ='FN' then N'Alter Function '+@Oject1+'() returns int with encryption as begin return(0) end ' ? ? ? ? ? ? when @type ='IF' then N'Alter Function '+@Oject1+'() returns table with encryption as return(Select a.name from sys.types a) ' ? ? ? ? ? ? when @type ='TF' then N'Alter Function '+@Oject1+'() returns @t table(name nvarchar(50)) with encryption as begin return end ' ? ? ? ? ? ? else 'Alter Trigger '+@Oject1+'on '+quotename(object_schema_name(@objectID))+'.'+(select Top(1) quotename(object_name(parent_id)) from sys.triggers a where a.object_id=@objectID)+' with encryption for update as return '? ? ? ? ? end ? ? ? ? ? ? ?? set @tmpStr=@tmpStr+'/*'+@Space4000 set @i=0 while @i < (ceiling(@MaxLength*1.0/4000)-1) begin ? ? set @tmpStr=@tmpStr+ @Space4000 ? ? Set @i=@i+1 end set @tmpStr=@tmpStr+'*/' ? ------------ set @imageval =(select top(1) a.imageval from sys.sysobjvalues a where a.objid=@objectID and a.valclass=1) ? begin tran exec(@tmpStr) set @tmpStr_imageval =(select top(1) a.imageval from sys.sysobjvalues a where a.objid=@objectID and a.valclass=1) ? rollback tran ? ------------- set @tmpStr=stuff(@tmpStr,1,5,'create') set @sql='' set @i=1 while @i<= (datalength(@imageval)/2) begin ? ? set @sql=@sql+isnull(nchar(unicode(substring(@tmpStr,@i,1)) ^ unicode(substring(@tmpStr_imageval,1))^unicode(substring(@imageval,1)) ),'') ? ? Set @i+=1 end ? /* 2. 列印 */ ? ? declare @patindex int ? ? while @sql>'' begin ? ?? ? ? set @patindex=patindex('%'+char(13)+char(10)+'%',@sql) ? ? if @patindex >0 ? ? begin ? ? ? ? print substring(@sql,@patindex-1) ? ? ? ? set @sql=stuff(@sql,@patindex+1,'') ? ? end ? ? ? ? else? ? ? begin ? ? ? ? set @patindex=patindex('%'+char(13)+'%',@sql) ? ? ? ? if @patindex >0 ? ? ? ? begin ? ? ? ? ? ? print substring(@sql,@patindex-1) ? ? ? ? ? ? set @sql=stuff(@sql,@patindex,'') ? ? ? ? end ? ? ? ? else ? ? ? ? begin ? ? ? ? ? ? set @patindex=patindex('%'+char(10)+'%',@sql) ? ? ? ? ? ? if @patindex >0 ? ? ? ? ? ? begin ? ? ? ? ? ? ? ? print substring(@sql,@patindex-1) ? ? ? ? ? ? ? ? set @sql=stuff(@sql,'') ? ? ? ? ? ? end ? ? ? ? ? ? ? ? ? ? else ? ? ? ? ? ? begin ? ? ? ? ? ? ? ? print @sql ? ? ? ? ? ? ? ? set @sql='' ? ? ? ? ? ? end ? ? ? ? ? ? end ? ? ? ? ? ? end ? ? ? ?? end ?

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读