仓酷云

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

[学习教程] MYSQL教程之SQL Server存储函数的加密解密

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:30:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
任何规模的组织都可能受益于外包服务,并在一个标准化和优化的平台上统一其数据库管理任务。基于其本身的特性,DBaaS提供了敏捷和高效的数据库服务,它可以支持多变的需求。server|函数|加密|解密存储历程、存储函数的加密:WITHENCRYPTION
  <!--[if!supportLineBreakNewLine]-->
  <!--[endif]-->
  CREATEproceduredbo.sp_XML_main
  @table_namenvarchar(260)=,
  @dirnamenvarchar(20)=
  WITHENCRYPTION
  as
  begin
  ....................................................
  end
  go
  存储历程、存储函数的解密(以下是一名尽世高人编写的代码)
  ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[sp_decrypt])andOBJECTPROPERTY(id,NIsProcedure)=1)
  dropprocedure[dbo].[sp_decrypt]
  GO
  /*--破解函数,历程,触发器,视图.仅限于SQLSERVER2000
  --作者:J9988--*/
  /*--挪用示例
  --解密指定存储历程
  execsp_decryptAppSP_test
  --对一切的存储历程解密
  declaretbcursorfor
  selectnamefromsysobjectswherextype=Pandstatus>0andnamesp_decrypt
  declare@namesysname
  opentb
  fetchnextfromtbinto@name
  while@@fetch_status=0
  begin
  print/*-------存储历程[+@name+]-----------*/
  execsp_decrypt@name
  fetchnextfromtbinto@name
  end
  closetb
  deallocatetb
  --*/
  ifexists(select*fromdbo.sysobjectswhereid=object_id(N[dbo].[SP_DECRYPT])andOBJECTPROPERTY(id,NIsProcedure)=1)
  dropprocedure[dbo].[SP_DECRYPT]
  GO
  CREATEPROCEDUREsp_decrypt(@objectNamevarchar(50))
  AS
  begin
  setnocounton
  --CSDN:j9988copyright:2004.04.15
  --V3.1
  --破解字节不受限定,合用于SQLSERVER2000存储历程,函数,视图,触发器
  --修改上一版视图触发器不克不及准确解密毛病
  --发明有错,请E_MAIL:CSDNj9988@tom.com
  begintran
  declare@objectname1varchar(100),@orgvarbinvarbinary(8000)
  declare@sql1nvarchar(4000),@sql2varchar(8000),@sql3nvarchar(4000),@sql4nvarchar(4000)
  DECLARE@OrigSpText1nvarchar(4000),@OrigSpText2nvarchar(4000),@OrigSpText3nvarchar(4000),@resultspnvarchar(4000)
  declare@iint,@statusint,@typevarchar(10),@parentidint
  declare@colidint,@nint,@qint,@jint,@kint,@encryptedint,@numberint
  select@type=xtype,@parentid=parent_objfromsysobjectswhereid=object_id(@ObjectName)
  createtable#temp(numberint,colidint,ctextvarbinary(8000),encryptedint,statusint)
  insert#tempSELECTnumber,colid,ctext,encrypted,statusFROMsyscommentsWHEREid=object_id(@objectName)
  select@number=max(number)from#temp
  set@k=0
  while@k<=@number
  begin
  ifexists(select1fromsyscommentswhereid=object_id(@objectname)andnumber=@k)
  begin
  if@type=P
  set@sql1=(casewhen@number>1thenALTERPROCEDURE+@objectName+;+rtrim(@k)+WITHENCRYPTIONAS
  elseALTERPROCEDURE+@objectName+WITHENCRYPTIONAS
  end)
  if@type=TR
  begin
  declare@parent_objvarchar(255),@tr_parent_xtypevarchar(10)
  select@parent_obj=parent_objfromsysobjectswhereid=object_id(@objectName)
  select@tr_parent_xtype=xtypefromsysobjectswhereid=@parent_obj
  if@tr_parent_xtype=V
  begin
  set@sql1=ALTERTRIGGER+@objectname+ON+OBJECT_NAME(@parentid)+WITHENCRYPTIONINSTERDOFINSERTASPRINT1
  end
  else
  begin
  set@sql1=ALTERTRIGGER+@objectname+ON+OBJECT_NAME(@parentid)+WITHENCRYPTIONFORINSERTASPRINT1
  end
  end
  if@type=FNor@type=TFor@type=IF
  set@sql1=(case@typewhenTFthen
  ALTERFUNCTION+@objectName+(@achar(1))returns@btable(avarchar(10))withencryptionasbegininsert@bselect@areturnend

  whenFNthen
  ALTERFUNCTION+@objectName+(@achar(1))returnschar(1)withencryptionasbeginreturn@aend
  whenIFthen
  ALTERFUNCTION+@objectName+(@achar(1))returnstablewithencryptionasreturnselect@aasa
  end)
  if@type=V
  set@sql1=ALTERVIEW+@objectname+WITHENCRYPTIONASSELECT1asf
  set@q=len(@sql1)
  set@sql1=@sql1+REPLICATE(-,4000-@q)
select@sql2=REPLICATE(-,8000)
  set@sql3=exec(@sql1
  select@colid=max(colid)from#tempwherenumber=@k
  set@n=1
  while@n<=CEILING(1.0*(@colid-1)/2)andlen(@sQL3)<=3996
  begin
  set@sql3=@sql3++@
  set@n=@n+1
  end
  set@sql3=@sql3+)
  execsp_executesql@sql3,N@sql1nvarchar(4000),@varchar(8000),@sql1=@sql1,@=@sql2
  end
  set@k=@k+1
  end
  set@k=0
  while@k<=@number
  begin
  ifexists(select1fromsyscommentswhereid=object_id(@objectname)andnumber=@k)
  begin
  select@colid=max(colid)from#tempwherenumber=@k
  set@n=1
  while@n<=@colid
  begin
  select@OrigSpText1=ctext,@encrypted=encrypted,@status=statusFROM#tempWHEREcolid=@nandnumber=@k
  SET@OrigSpText3=(SELECTctextFROMsyscommentsWHEREid=object_id(@objectName)andcolid=@nandnumber=@k)
  if@n=1
  begin
  if@type=P
  SET@OrigSpText2=(casewhen@number>1thenCREATEPROCEDURE+@objectName+;+rtrim(@k)+WITHENCRYPTIONAS
  elseCREATEPROCEDURE+@objectName+WITHENCRYPTIONAS
  end)
  if@type=FNor@type=TFor@type=IF
  SET@OrigSpText2=(case@typewhenTFthen
  CREATEFUNCTION+@objectName+(@achar(1))returns@btable(avarchar(10))withencryptionasbegininsert@bselect@areturnend
  whenFNthen
  CREATEFUNCTION+@objectName+(@achar(1))returnschar(1)withencryptionasbeginreturn@aend
  whenIFthen
  CREATEFUNCTION+@objectName+(@achar(1))returnstablewithencryptionasreturnselect@aasa
  end)
  if@type=TR
  begin
  if@tr_parent_xtype=V
  begin
  set@OrigSpText2=CREATETRIGGER+@objectname+ON+OBJECT_NAME(@parentid)+WITHENCRYPTIONINSTEADOFINSERTASPRINT1
  end
  else
  begin
  set@OrigSpText2=CREATETRIGGER+@objectname+ON+OBJECT_NAME(@parentid)+WITHENCRYPTIONFORINSERTASPRINT1
  end
  end
  if@type=V
  set@OrigSpText2=CREATEVIEW+@objectname+WITHENCRYPTIONASSELECT1asf
  set@q=4000-len(@OrigSpText2)
  set@OrigSpText2=@OrigSpText2+REPLICATE(-,@q)
  end
  else
  begin
  SET@OrigSpText2=REPLICATE(-,4000)
  end
  SET@i=1
  SET@resultsp=replicate(NA,(datalength(@OrigSpText1)/2))
  WHILE@i<=datalength(@OrigSpText1)/2
  BEGIN
  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
  set@orgvarbin=cast(@OrigSpText1asvarbinary(8000))
  set@resultsp=(casewhen@encrypted=1
  then@resultsp
  elseconvert(nvarchar(4000),casewhen@status&2=2thenuncompress(@orgvarbin)else@orgvarbinend)
  end)
  print@resultsp
  set@n=@n+1
  end
  end
  set@k=@k+1
  end
  droptable#temp
  rollbacktran
  end

如果互联网服务提供商,支撑数据的云服务,或它们之间任一点网络被堵塞或中断,他们就会遇到与数据延迟或应用程序故障有关的问题。如果问题发生在企业内部,解决方案提供商可以排除故障找出原因。
飘飘悠悠 该用户已被删除
沙发
发表于 2015-1-19 15:25:59 | 只看该作者
这就引发了对varchar和char效率讨论的老问题。到底如何分配varchar的数据,是否会出现大规模的碎片?
爱飞 该用户已被删除
板凳
发表于 2015-1-27 18:08:45 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
再见西城 该用户已被删除
地板
发表于 2015-2-5 11:16:26 | 只看该作者
索引视图2k就有。但是2005对其效率作了一些改进但是schema.viewname的作用域真是太限制了它的应用面。还有一大堆的环境参数和种种限制都让人对它有点却步。
不帅 该用户已被删除
5#
发表于 2015-2-11 11:51:44 | 只看该作者
你可以简单地认为适合的就是好,不适合就是不好。
乐观 该用户已被删除
6#
发表于 2015-3-2 12:17:07 | 只看该作者
对递归类的树遍历很有帮助。个人感觉这个真是太棒了!阅读清晰,非常有时代感。
飘灵儿 该用户已被删除
7#
发表于 2015-3-11 03:42:10 | 只看该作者
多加的系统视图和实时系统信息这些东西对DBA挑优非常有帮助,但是感觉粒度还是不太细。
分手快乐 该用户已被删除
8#
发表于 2015-3-24 23:38:24 | 只看该作者
我们学到了什么?思考问题的时候从表的角度来思考问
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-4 04:51

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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