仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 566|回复: 7
打印 上一主题 下一主题

[学习教程] MSSQL编程:在不损坏原加密存储历程的条件下,解密存...

[复制链接]
只想知道 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:25:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
因此我们的方案中要构造这种逆操作。Event_type增加一种FlashBACK_EVENT。这类操作形式与Query_Event相同,都是简单的SQL语句,只是包含了将数据恢复的操作。存储历程|加密|解密
实为转贴j9988+原创

begintransaction--playyuer原创
execsp_decryptAppSP_test--j9988原创
rollbacktransaction--playyuer原创

or:大概间接用transaction把j9988包起来!
begintransaction
j9988
rollbacktransaction

/*************解密存储历程**********
------------------------sql2000年夜于40000的-----------------
原作:j9988号:J先生
*/
alterPROCEDUREsp_decrypt(@objectNamevarchar(50))
AS
begin

begintransaction--addbyplayyuer

declare@objectname1varchar(100)
declare@sql1nvarchar(4000),@sql2nvarchar(4000),@sql3nvarchar(4000),@sql4nvarchar(4000),@sql5nvarchar(4000),@sql6nvarchar(4000),@sql7nvarchar(4000),@sql8nvarchar(4000),@sql9nvarchar(4000),@sql10nvarchar(4000)
DECLARE@OrigSpText1nvarchar(4000),@OrigSpText2nvarchar(4000),@OrigSpText3nvarchar(4000),@resultspnvarchar(4000)
declare@iint,@tbigint
declare@mint,@nint,@qint
set@m=(SELECTmax(colid)FROMsyscommentsWHEREid=object_id(@objectName))
set@n=1
--getencrypteddata
createtable#temp(colidint,ctextvarbinary(8000))
insert#tempSELECTcolid,ctextFROMsyscommentsWHEREid=object_id(@objectName)
set@sql1=ALTERPROCEDURE+@objectName+WITHENCRYPTIONAS
--set@sql1=ALTERPROCEDURE+@objectName+WITHENCRYPTIONAS
set@q=len(@sql1)
set@sql1=@sql1+REPLICATE(-,4000-@q)
select@sql2=REPLICATE(-,4000),@sql3=REPLICATE(-,4000),@sql4=REPLICATE(-,4000),@sql5=REPLICATE(-,4000),@sql6=REPLICATE(-,4000),@sql7=REPLICATE(-,4000),@sql8=REPLICATE(-,4000),@sql9=REPLICATE(-,4000),@sql10=REPLICATE(-,4000)
exec(@sql1+@sql2+@sql3+@sql4+@sql5+@sql6+@sql7+@sql8+@sql9+@sql10)
while@n<=@m
begin
SET@OrigSpText1=(SELECTctextFROM#tempWHEREcolid=@n)
set@objectname1=@objectname+_t
SET@OrigSpText3=(SELECTctextFROMsyscommentsWHEREid=object_id(@objectName)andcolid=@n)
if@n=1
begin
SET@OrigSpText2=CREATEPROCEDURE+@objectName+WITHENCRYPTIONAS--
set@q=4000-len(@OrigSpText2)
set@OrigSpText2=@OrigSpText2+REPLICATE(-,@q)
end
else
begin
SET@OrigSpText2=REPLICATE(-,4000)
end
--startcounter
SET@i=1
--filltemporaryvariable
SET@resultsp=replicate(NA,(datalength(@OrigSpText1)/2))

--loop
WHILE@i<=datalength(@OrigSpText1)/2
BEGIN
--reverseencryption(XORoriginal+bogus+bogusencrypted)
SET@resultsp=stuff(@resultsp,@i,1,NCHAR(UNICODE(substring(@OrigSpText1,@i,1))^
(UNICODE(substring(@OrigSpText2,@i,1))^
UNICODE(substring(@OrigSpText3,@i,1)))))
SET@i=@i+1
END
--droporiginalSP
--EXECUTE(dropPROCEDURE+@objectName)
--removeencryption
--preservecase
SET@resultsp=REPLACE((@resultsp),WITHENCRYPTION,)
SET@resultsp=REPLACE((@resultsp),WithEncryption,)
SET@resultsp=REPLACE((@resultsp),withencryption,)
IFCHARINDEX(WITHENCRYPTION,UPPER(@resultsp))>0
SET@resultsp=REPLACE(UPPER(@resultsp),WITHENCRYPTION,)
--replaceStoredprocedurewithoutenryption
print@resultsp
--execute(@resultsp)
set@n=@n+1
end
droptable#temp
end
rollbacktransaction--addbyplayyuer
GO

/*
合适40000字符。
每次4000 print出来,自已贴。
牢记:我见过的解历程都是对原历程举行损坏。破解前必定要备份!!!!
凌驾40000的,自已加SQL(我下面用SQL.SQL2--SQL10)
超长的可加SQL11--sql20........
*/



操作被同步到从库上后,则主从都“回天无力”。
沙发
发表于 2015-1-19 11:12:55 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
再现理想 该用户已被删除
板凳
发表于 2015-1-25 08:39:33 | 只看该作者
对于数据库来说,查询是数据库的灵魂,那么SQL查询效率究竟效率如何呢?下文将带对SQL查询的相关问题进行讨论,供您参考。
飘灵儿 该用户已被删除
地板
发表于 2015-2-2 18:32:44 | 只看该作者
习惯敲命令行的朋友可能会爽一些。但是功能有限。适合机器跑不动SQLServerManagementStudio的朋友使用。
admin 该用户已被删除
5#
发表于 2015-2-8 04:20:37 | 只看该作者
是否碎片会引发效率问题?这都是需要进一步探讨的东西。varbinary(max)代替image也让SQLServer的字段类型更加简洁统一。
飘飘悠悠 该用户已被删除
6#
发表于 2015-3-7 11:49:42 | 只看该作者
始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。
若相依 该用户已被删除
7#
发表于 2015-3-15 05:13:07 | 只看该作者
总感觉自己还是不会SQL
蒙在股里 该用户已被删除
8#
发表于 2015-3-21 18:48:48 | 只看该作者
总感觉自己还是不会SQL
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-22 23:43

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表