数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

道与魔:SqlServer存储过程/函数加/解密


发布日期:2024年03月02日
 
道与魔:SqlServer存储过程/函数加/解密

存储过程存储函数的加密WITH ENCRYPTION

<![if !supportLineBreakNewLine]>

<![endif]>

CREATE procedure dbosp_XML_main

@table_name nvarchar()=

@dirname nvarchar()=

WITH ENCRYPTION

as

begin

end

go

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

if exists (select * from dbosysobjects where id = object_id(N[dbo][sp_decrypt]) and OBJECTPROPERTY(id NIsProcedure) = )

drop procedure [dbo][sp_decrypt]

GO

/*破解函数过程触发器视图仅限于SQLSERVER

作者:J All rights reserved*/

/*调用示例

解密指定存储过程

exec sp_decrypt AppSP_test

对所有的存储过程解密

declare tb cursor for

select name from sysobjects where xtype=P and status> and name<>sp_decrypt

declare @name sysname

open tb

fetch next from tb into @name

while @@fetch_status=

begin

print /*存储过程 [+@name+] */

exec sp_decrypt @name

fetch next from tb into @name

end

close tb

deallocate tb

*/

if exists (select * from dbosysobjects where id = object_id(N[dbo][SP_DECRYPT]) and OBJECTPROPERTY(id NIsProcedure) = )

drop procedure [dbo][SP_DECRYPT]

GO

CREATE PROCEDURE sp_decrypt(@objectName varchar())

AS

begin

set nocount on

破解字节不受限制适用于SQLSERVER存储过程函数视图触发器

修正上一版视图触发器不能正确解密错误

发现有错请E_MAIL

begin tran

declare @objectname varchar()@orgvarbin varbinary()

declare @sql nvarchar()@sql varchar()@sql nvarchar()@sql nvarchar()

DECLARE @OrigSpText nvarchar() @OrigSpText nvarchar() @OrigSpText nvarchar() @resultsp nvarchar()

declare @i int@status int@type varchar()@parentid int

declare @colid int@n int@q int@j int@k int@encrypted int@number int

select @type=xtype@parentid=parent_obj from sysobjects where id=object_id(@ObjectName)

create table #temp(number intcolid intctext varbinary()encrypted intstatus int)

insert #temp SELECT numbercolidctextencryptedstatus FROM syscomments WHERE id = object_id(@objectName)

select @number=max(number) from #temp

set @k=

while @k<=@number

begin

if exists(select from syscomments where id=object_id(@objectname) and number=@k)

begin

if @type=P

set @sql=(case when @number> then ALTER PROCEDURE + @objectName +;+rtrim(@k)+ WITH ENCRYPTION AS

else ALTER PROCEDURE + @objectName+ WITH ENCRYPTION AS

end)

if @type=TR

begin

declare @parent_obj varchar()@tr_parent_xtype varchar()

select @parent_obj=parent_obj from sysobjects where id=object_id(@objectName)

select @tr_parent_xtype=xtype from sysobjects where id=@parent_obj

if @tr_parent_xtype=V

begin

set @sql=ALTER TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION INSTERD OF INSERT AS PRINT

end

else

begin

set @sql=ALTER TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION FOR INSERT AS PRINT

end

end

if @type=FN or @type=TF or @type=IF

set @sql=(case @type when TF then

ALTER FUNCTION + @objectName+(@a char()) returns @b table(a varchar()) with encryption as begin insert @b select @a return end

when FN then

ALTER FUNCTION + @objectName+(@a char()) returns char() with encryption as begin return @a end

when IF then

ALTER FUNCTION + @objectName+(@a char()) returns table with encryption as return select @a as a

end)

if @type=V

set @sql=ALTER VIEW +@objectname+ WITH ENCRYPTION AS SELECT as f

set @q=len(@sql)

set @sql=@sql+REPLICATE(@q)

select @sql=REPLICATE()

set @sql=exec(@sql

select @colid=max(colid) from #temp where number=@k

set @n=

while @n<=CEILING(*(@colid)/) and len(@sQL)<=

begin

set @sql=@sql++@

set @n=@n+

end

set @sql=@sql+)

exec sp_executesql @sqlN@sql nvarchar()@ varchar()@sql=@sql@=@sql

end

set @k=@k+

end

set @k=

while @k<=@number

begin

if exists(select from syscomments where id=object_id(@objectname) and number=@k)

begin

select @colid=max(colid) from #temp where number=@k

set @n=

while @n<=@colid

begin

select @OrigSpText=ctext@encrypted=encrypted@status=status FROM #temp WHERE colid=@n and number=@k

SET @OrigSpText=(SELECT ctext FROM syscomments WHERE id=object_id(@objectName) and colid=@n and number=@k)

if @n=

begin

if @type=P

SET @OrigSpText=(case when @number> then CREATE PROCEDURE + @objectName +;+rtrim(@k)+ WITH ENCRYPTION AS

else CREATE PROCEDURE + @objectName + WITH ENCRYPTION AS

end)

if @type=FN or @type=TF or @type=IF

SET @OrigSpText=(case @type when TF then

CREATE FUNCTION + @objectName+(@a char()) returns @b table(a varchar()) with encryption as begin insert @b select @a return end

when FN then

CREATE FUNCTION + @objectName+(@a char()) returns char() with encryption as begin return @a end

when IF then

CREATE FUNCTION + @objectName+(@a char()) returns table with encryption as return select @a as a

end)

if @type=TR

begin

if @tr_parent_xtype=V

begin

set @OrigSpText=CREATE TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION INSTEAD OF INSERT AS PRINT

end

else

begin

set @OrigSpText=CREATE TRIGGER +@objectname+ ON +OBJECT_NAME(@parentid)+ WITH ENCRYPTION FOR INSERT AS PRINT

end

end

if @type=V

set @OrigSpText=CREATE VIEW +@objectname+ WITH ENCRYPTION AS SELECT as f

set @q=len(@OrigSpText)

set @OrigSpText=@OrigSpText+REPLICATE(@q)

end

else

begin

SET @OrigSpText=REPLICATE( )

end

SET @i=

SET @resultsp = replicate(NA (datalength(@OrigSpText) / ))

WHILE @i<=datalength(@OrigSpText)/

BEGIN

SET @resultsp = stuff(@resultsp @i NCHAR(UNICODE(substring(@OrigSpText @i )) ^

               

上一篇:SQL入门:除去重复行

下一篇:SQLServer7.0备份及恢复相关问题