{"id":2765,"date":"2013-07-12T08:07:13","date_gmt":"2013-07-12T08:07:13","guid":{"rendered":"http:\/\/enjoyasp.net\/?p=2765"},"modified":"2013-07-12T08:07:13","modified_gmt":"2013-07-12T08:07:13","slug":"%e5%ad%98%e5%82%a8%e8%bf%87%e7%a8%8b%e5%8a%a0%e8%a7%a3%e5%af%86","status":"publish","type":"post","link":"https:\/\/enjoyasp.net\/index.php\/2013\/07\/12\/%e5%ad%98%e5%82%a8%e8%bf%87%e7%a8%8b%e5%8a%a0%e8%a7%a3%e5%af%86\/","title":{"rendered":"\u5b58\u50a8\u8fc7\u7a0b\u52a0\u89e3\u5bc6"},"content":{"rendered":"<div>\n\t\u5f15\u81ea\uff1a<a href=\"http:\/\/blog.csdn.net\/thecityofsky\/article\/details\/6796939\">sql server 2005\/2008 \u52a0\u5bc6\u5b58\u50a8\u8fc7\u7a0b\u89e3\u5bc6<\/a><\/div>\n<div>\n\t&nbsp;<\/div>\n<pre class=\"brush:sql;first-line:1;pad-line-numbers:true;highlight:null;collapse:false;\">\r\n\u52a0\u5bc6\r\nALTER  PROCEDURE [dbo].[MyProce]\r\n(\r\n@TranType VARCHAR(50)\r\n)\r\nwith encryption\r\nAS\r\nIF @TranType=&#39;select&#39;\r\nBEGIN \r\nSELECT &#39;111&#39;\r\nEND \r\nRETURN\r\n\r\n\u89e3\u5bc6\r\n\r\n--exec dbo.sp_windbi$decrypt &#39;MyProce&#39;,0 \r\n\r\nCreate PROCEDURE [dbo].[sp_windbi$decrypt]  \r\n(@procedure sysname = NULL, @revfl int = 1)  \r\nAS  \r\n\/**\/\/*  \r\n\u738b\u6210\u8f89\u7ffb\u8bd1\u6574\u7406\uff0c\u8f6c\u8d34\u8bf7\u6ce8\u660e\u51fa\u81ea\u5fae\u8f6fBI\u5f00\u62d3\u8005www.windbi.com  \r\n\u8c03\u7528\u5f62\u5f0f\u4e3a\uff1a  \r\nexec dbo.sp__windbi$decrypt @procedure,0  \r\n\u5982\u679c\u7b2c\u4e8c\u4e2a\u53c2\u6570\u4f7f\u75281\u7684\u8bdd\uff0c\u4f1a\u7ed9\u51fa\u8be5\u5b58\u50a8\u8fc7\u7a0b\u7684\u4e00\u4e9b\u63d0\u793a\u3002  \r\n--\u7248\u672c4.0  \u4fee\u6b63\u5b58\u50a8\u8fc7\u7a0b\u8fc7\u957f\u89e3\u5bc6\u51fa\u6765\u662f\u7a7a\u767d\u7684\u95ee\u9898  \r\n*\/  \r\nSET NOCOUNT ON  \r\nIF @revfl = 1  \r\nBEGIN  \r\nPRINT &#39;\u8b66\u544a\uff1a\u8be5\u5b58\u50a8\u8fc7\u7a0b\u4f1a\u5220\u9664\u5e76\u91cd\u5efa\u539f\u59cb\u7684\u5b58\u50a8\u8fc7\u7a0b\u3002&#39;  \r\nPRINT &#39; \u5728\u8fd0\u884c\u8be5\u5b58\u50a8\u8fc7\u7a0b\u4e4b\u524d\u786e\u4fdd\u4f60\u7684\u6570\u636e\u5e93\u6709\u4e00\u4e2a\u5907\u4efd\u3002&#39;  \r\nPRINT &#39; \u8be5\u5b58\u50a8\u8fc7\u7a0b\u901a\u5e38\u5e94\u8be5\u8fd0\u884c\u5728\u4ea7\u54c1\u73af\u5883\u7684\u4e00\u4e2a\u5907\u4efd\u7684\u975e\u4ea7\u54c1\u73af\u5883\u4e0b\u3002&#39;  \r\nPRINT &#39; \u4e3a\u4e86\u8fd0\u884c\u8fd9\u4e2a\u5b58\u50a8\u8fc7\u7a0b\uff0c\u5c06\u53c2\u6570@refl\u7684\u503c\u66f4\u6539\u4e3a0\u3002&#39;  \r\nRETURN 0  \r\nEND  \r\nDECLARE @intProcSpace bigint, @t bigint, @maxColID smallint,@procNameLength int  \r\nselect @maxColID = max(subobjid) FROM  \r\nsys.sysobjvalues WHERE objid = object_id(@procedure)  \r\n--select @maxColID as &#39;Rows in sys.sysobjvalues&#39;  \r\nselect @procNameLength = datalength(@procedure) + 29  \r\nDECLARE @real_01 nvarchar(max)  \r\nDECLARE @fake_01 nvarchar(max)  \r\nDECLARE @fake_encrypt_01 nvarchar(max)  \r\nDECLARE @real_decrypt_01 nvarchar(max),@real_decrypt_01a nvarchar(max)  \r\ndeclare @objtype varchar(2),@ParentName nvarchar(max)  \r\nselect @real_decrypt_01a = &#39;&#39;  \r\n--\u63d0\u53d6\u5bf9\u8c61\u7684\u7c7b\u578b\u5982\u662f\u5b58\u50a8\u8fc7\u7a0b\u8fd8\u662f\u51fd\u6570\uff0c\u5982\u679c\u662f\u89e6\u53d1\u5668\uff0c\u8fd8\u8981\u5f97\u5230\u5176\u7236\u5bf9\u8c61\u7684\u540d\u79f0  \r\nselect @objtype=type,@parentname=object_name(parent_object_id)  \r\nfrom sys.objects where [object_id]=object_id(@procedure)  \r\n-- \u4ecesys.sysobjvalues\u91cc\u63d0\u51fa\u52a0\u5bc6\u7684imageval\u8bb0\u5f55  \r\nSET @real_01=(SELECT top 1 imageval FROM sys.sysobjvalues WHERE objid =  \r\nobject_id(@procedure) and valclass = 1 order by subobjid)  \r\n  \r\n--\u521b\u5efa\u4e00\u4e2a\u4e34\u65f6\u8868  \r\ncreate table #output ( [ident] [int] IDENTITY (1, 1) NOT NULL ,  \r\n[real_decrypt] NVARCHAR(MAX) )  \r\n--\u5f00\u59cb\u4e00\u4e2a\u4e8b\u52a1\uff0c\u7a0d\u540e\u56de\u6eda  \r\nBEGIN TRAN  \r\n--\u66f4\u6539\u539f\u59cb\u7684\u5b58\u50a8\u8fc7\u7a0b\uff0c\u7528\u77ed\u6a2a\u7ebf\u66ff\u6362  \r\nif @objtype=&#39;P&#39;  \r\n  SET @fake_01=&#39;ALTER PROCEDURE &#39;+ @procedure +&#39; WITH ENCRYPTION AS select 1  \r\n  \/**\/\/*&#39;+REPLICATE(cast(&#39;*&#39;as nvarchar(max)), datalength(@real_01) \/2 - @procNameLength)+&#39;*\/&#39;  \r\nelse if @objtype=&#39;FN&#39;  \r\n  SET @fake_01=&#39;ALTER FUNCTION &#39;+ @procedure +&#39;() RETURNS INT WITH ENCRYPTION AS BEGIN RETURN 1  \r\n  \/**\/\/*&#39;+REPLICATE(cast(&#39;*&#39;as nvarchar(max)), datalength(@real_01) \/2 - @procNameLength)+&#39;*\/ END&#39;  \r\nelse if @objtype=&#39;V&#39;  \r\n  SET @fake_01=&#39;ALTER view &#39;+ @procedure +&#39; WITH ENCRYPTION AS select 1 as col  \r\n  \/**\/\/*&#39;+REPLICATE(cast(&#39;*&#39;as nvarchar(max)), datalength(@real_01) \/2 - @procNameLength)+&#39;*\/&#39;  \r\nelse if @objtype=&#39;TR&#39;  \r\n  SET @fake_01=&#39;ALTER trigger &#39;+ @procedure +&#39; ON &#39;+@parentname+&#39;WITH ENCRYPTION AFTER INSERT AS RAISERROR (&#39;&#39;N&#39;&#39;,16,10)  \r\n  \/**\/\/*&#39;+REPLICATE(cast(&#39;*&#39;as nvarchar(max)), datalength(@real_01) \/2 - @procNameLength)+&#39;*\/&#39;  \r\nEXECUTE (@fake_01)  \r\n--\u4ecesys.sysobjvalues\u91cc\u63d0\u51fa\u52a0\u5bc6\u7684\u5047\u7684  \r\nSET @fake_encrypt_01=(SELECT top 1 imageval FROM sys.sysobjvalues WHERE objid =  \r\nobject_id(@procedure) and valclass = 1 order by subobjid )  \r\nif @objtype=&#39;P&#39;  \r\n  SET @fake_01=&#39;Create PROCEDURE &#39;+ @procedure +&#39; WITH ENCRYPTION AS select 1  \r\n  \/**\/\/*&#39;+REPLICATE(cast(&#39;*&#39;as nvarchar(max)), datalength(@real_01) \/2 - @procNameLength)+&#39;*\/&#39;  \r\nelse if @objtype=&#39;FN&#39;  \r\n  SET @fake_01=&#39;CREATE FUNCTION &#39;+ @procedure +&#39;() RETURNS INT WITH ENCRYPTION AS BEGIN RETURN 1  \r\n  \/**\/\/*&#39;+REPLICATE(cast(&#39;*&#39;as nvarchar(max)), datalength(@real_01) \/2 - @procNameLength)+&#39;*\/ END&#39;  \r\nelse if @objtype=&#39;V&#39;  \r\n  SET @fake_01=&#39;Create view &#39;+ @procedure +&#39; WITH ENCRYPTION AS select 1 as col  \r\n  \/**\/\/*&#39;+REPLICATE(cast(&#39;*&#39;as nvarchar(max)), datalength(@real_01) \/2 - @procNameLength)+&#39;*\/&#39;  \r\nelse if @objtype=&#39;TR&#39;  \r\n  SET @fake_01=&#39;Create trigger &#39;+ @procedure +&#39; ON &#39;+@parentname+&#39;WITH ENCRYPTION AFTER INSERT AS RAISERROR (&#39;&#39;N&#39;&#39;,16,10)  \r\n  \/**\/\/*&#39;+REPLICATE(cast(&#39;*&#39;as nvarchar(max)), datalength(@real_01) \/2 - @procNameLength)+&#39;*\/&#39;  \r\n--\u5f00\u59cb\u8ba1\u6570  \r\nSET @intProcSpace=1  \r\n--\u4f7f\u7528\u5b57\u7b26\u586b\u5145\u4e34\u65f6\u53d8\u91cf  \r\nSET @real_decrypt_01 = replicate(cast(&#39;A&#39;as nvarchar(max)), (datalength(@real_01) \/2 ))  \r\n--\u5faa\u73af\u8bbe\u7f6e\u6bcf\u4e00\u4e2a\u53d8\u91cf\uff0c\u521b\u5efa\u771f\u6b63\u7684\u53d8\u91cf  \r\n--\u6bcf\u6b21\u4e00\u4e2a\u5b57\u8282  \r\nSET @intProcSpace=1  \r\n--\u5982\u6709\u5fc5\u8981\uff0c\u904d\u5386\u6bcf\u4e2a@real_xx\u53d8\u91cf\u5e76\u89e3\u5bc6  \r\nWHILE @intProcSpace&lt;=(datalength(@real_01)\/2)  \r\nBEGIN  \r\n--\u771f\u7684\u548c\u5047\u7684\u548c\u52a0\u5bc6\u7684\u5047\u7684\u8fdb\u884c\u5f02\u6216\u5904\u7406  \r\nSET @real_decrypt_01 = stuff(@real_decrypt_01, @intProcSpace, 1,  \r\nNCHAR(UNICODE(substring(@real_01, @intProcSpace, 1)) ^  \r\n(UNICODE(substring(@fake_01, @intProcSpace, 1)) ^  \r\nUNICODE(substring(@fake_encrypt_01, @intProcSpace, 1)))))  \r\nSET @intProcSpace=@intProcSpace+1  \r\nEND  \r\n  \r\n  \r\n--\u901a\u8fc7sp_helptext\u903b\u8f91\u5411\u8868#output\u91cc\u63d2\u5165\u53d8\u91cf  \r\ninsert #output (real_decrypt) select @real_decrypt_01  \r\n--select real_decrypt AS &#39;#output chek&#39; from #output --\u6d4b\u8bd5  \r\n-- -------------------------------------  \r\n--\u5f00\u59cb\u4ecesp_helptext\u63d0\u53d6  \r\n-- -------------------------------------  \r\ndeclare @dbname sysname  \r\n,@BlankSpaceAdded int  \r\n,@BasePos int  \r\n,@CurrentPos int  \r\n,@TextLength int  \r\n,@LineId int  \r\n,@AddOnLen int  \r\n,@LFCR int --\u56de\u8f66\u6362\u884c\u7684\u957f\u5ea6  \r\n,@DefinedLength int  \r\n,@SyscomText nvarchar(max)  \r\n,@Line nvarchar(255)  \r\nSelect @DefinedLength = 255  \r\nSELECT @BlankSpaceAdded = 0 --\u8ddf\u8e2a\u884c\u7ed3\u675f\u7684\u7a7a\u683c\u3002\u6ce8\u610fLen\u51fd\u6570\u5ffd\u7565\u4e86\u591a\u4f59\u7684\u7a7a\u683c  \r\nCREATE TABLE #CommentText  \r\n(LineId int  \r\n,Text nvarchar(255) collate database_default)  \r\n--\u4f7f\u7528#output\u4ee3\u66ffsys.sysobjvalues  \r\nDECLARE ms_crs_syscom CURSOR LOCAL  \r\nFOR SELECT real_decrypt from #output  \r\nORDER BY ident  \r\nFOR READ ONLY  \r\n--\u83b7\u53d6\u6587\u672c  \r\nSELECT @LFCR = 2  \r\nSELECT @LineId = 1  \r\nOPEN ms_crs_syscom  \r\nFETCH NEXT FROM ms_crs_syscom into @SyscomText  \r\nWHILE @@fetch_status &gt;= 0  \r\nBEGIN  \r\nSELECT @BasePos = 1  \r\nSELECT @CurrentPos = 1  \r\nSELECT @TextLength = LEN(@SyscomText)  \r\nWHILE @CurrentPos != 0  \r\nBEGIN  \r\n--\u901a\u8fc7\u56de\u8f66\u67e5\u627e\u884c\u7684\u7ed3\u675f  \r\nSELECT @CurrentPos = CHARINDEX(char(13)+char(10), @SyscomText,  \r\n@BasePos)  \r\n--\u5982\u679c\u627e\u5230\u56de\u8f66  \r\nIF @CurrentPos != 0  \r\nBEGIN  \r\n--\u5982\u679c@Lines\u7684\u957f\u5ea6\u7684\u65b0\u503c\u6bd4\u8bbe\u7f6e\u7684\u5927\u5c31\u63d2\u5165@Lines\u76ee\u524d\u7684\u5185\u5bb9\u5e76\u7ee7\u7eed  \r\nWhile (isnull(LEN(@Line),0) + @BlankSpaceAdded +  \r\n@CurrentPos-@BasePos + @LFCR) &gt; @DefinedLength  \r\nBEGIN  \r\nSELECT @AddOnLen = @DefinedLength-(isnull(LEN(@Line),0) +  \r\n@BlankSpaceAdded)  \r\nINSERT #CommentText VALUES  \r\n( @LineId,  \r\nisnull(@Line, N&#39;&#39;) + isnull(SUBSTRING(@SyscomText,  \r\n@BasePos, @AddOnLen), N&#39;&#39;))  \r\nSELECT @Line = NULL, @LineId = @LineId + 1,  \r\n@BasePos = @BasePos + @AddOnLen, @BlankSpaceAdded = 0  \r\nEND  \r\nSELECT @Line = isnull(@Line, N&#39;&#39;) +  \r\nisnull(SUBSTRING(@SyscomText, @BasePos, @CurrentPos-@BasePos + @LFCR), N&#39;&#39;)  \r\nSELECT @BasePos = @CurrentPos+2  \r\nINSERT #CommentText VALUES( @LineId, @Line )  \r\nSELECT @LineId = @LineId + 1  \r\nSELECT @Line = NULL  \r\nEND  \r\nELSE  \r\n--\u5982\u679c\u56de\u8f66\u6ca1\u627e\u5230  \r\nBEGIN  \r\nIF @BasePos &lt;= @TextLength  \r\nBEGIN  \r\n--\u5982\u679c@Lines\u957f\u5ea6\u7684\u65b0\u503c\u5927\u4e8e\u5b9a\u4e49\u7684\u957f\u5ea6  \r\nWhile (isnull(LEN(@Line),0) + @BlankSpaceAdded +  \r\n@TextLength-@BasePos+1 ) &gt; @DefinedLength  \r\nBEGIN  \r\nSELECT @AddOnLen = @DefinedLength -  \r\n(isnull(LEN(@Line),0) + @BlankSpaceAdded)  \r\nINSERT #CommentText VALUES  \r\n( @LineId,  \r\nisnull(@Line, N&#39;&#39;) + isnull(SUBSTRING(@SyscomText,  \r\n@BasePos, @AddOnLen), N&#39;&#39;))  \r\nSELECT @Line = NULL, @LineId = @LineId + 1,  \r\n@BasePos = @BasePos + @AddOnLen, @BlankSpaceAdded =  \r\n0  \r\nEND  \r\nSELECT @Line = isnull(@Line, N&#39;&#39;) +  \r\nisnull(SUBSTRING(@SyscomText, @BasePos, @TextLength-@BasePos+1 ), N&#39;&#39;)  \r\nif LEN(@Line) &lt; @DefinedLength and charindex(&#39; &#39;,  \r\n@SyscomText, @TextLength+1 ) &gt; 0  \r\nBEGIN  \r\nSELECT @Line = @Line + &#39; &#39;, @BlankSpaceAdded = 1  \r\nEND  \r\nEND  \r\nEND  \r\nEND  \r\nFETCH NEXT FROM ms_crs_syscom into @SyscomText  \r\nEND  \r\nIF @Line is NOT NULL  \r\nINSERT #CommentText VALUES( @LineId, @Line )  \r\nselect Text from #CommentText order by LineId  \r\nCLOSE ms_crs_syscom  \r\nDEALLOCATE ms_crs_syscom  \r\nDROP TABLE #CommentText  \r\n-- -------------------------------------  \r\n--\u7ed3\u675f\u4ecesp_helptext\u63d0\u53d6  \r\n-- -------------------------------------  \r\n--\u5220\u9664\u7528\u77ed\u6a2a\u7ebf\u521b\u5efa\u7684\u5b58\u50a8\u8fc7\u7a0b\u5e76\u91cd\u5efa\u539f\u59cb\u7684\u5b58\u50a8\u8fc7\u7a0b  \r\nROLLBACK TRAN  \r\nDROP TABLE #output  \r\ngo  \r\n<\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u5f15\u81ea\uff1asql server 2005\/2008 \u52a0\u5bc6\u5b58\u50a8\u8fc7\u7a0b\u89e3\u5bc6 &nbsp; \u52a0\u5bc6 ALTER PROCED [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[36],"tags":[],"class_list":["post-2765","post","type-post","status-publish","format-standard","hentry","category-sql-server"],"blocksy_meta":[],"_links":{"self":[{"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/posts\/2765","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/comments?post=2765"}],"version-history":[{"count":0,"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/posts\/2765\/revisions"}],"wp:attachment":[{"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/media?parent=2765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/categories?post=2765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/enjoyasp.net\/index.php\/wp-json\/wp\/v2\/tags?post=2765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}