CTOCIO IT专家网

天极传媒 比特网 | 天极网 | IT专家网 | IT商网 | 52PK游戏网 | 手机天极 | IT分众 |
IT专家网搜索

数据库 | Oracle | DB2 | SQL Server | MySQL | 商业智能 | BI | DBA | Sybase| SQL Server 2008

您现在的位置: IT专家网 > 数据库子站 > 数据库技巧

怎样对SQL Server 2005存储过程解密

作者: 拓狼,  出处:微软BI开拓者, 责任编辑: 李书琴, 
2008-05-07 11:05
  SQLServer2005里使用with encryption选项创建的存储过程仍然和sqlserver2000里一样,都是使用XOR进行了的加密。和2000不一样的是,在2005的系统表syscomments里已经查不到加密过的密文了。要查密文必须使用DAC(专用管理员连接)连接到数据库后,在系统表sys.sysobjvalues查询,该表的列imageval存储了相应的密文。

  tinyint,@procNameLength int

  select @maxColID = max(subobjid),@intEncrypted = imageval FROM

  sys.sysobjvalues WHERE objid = object_id(@procedure)

  GROUP BY imageval

  --select @maxColID as 'Rows in sys.sysobjvalues'

  select @procNameLength = datalength(@procedure) + 29

  DECLARE @real_01 nvarchar(max)

  DECLARE @fake_01 nvarchar(max)

  DECLARE @fake_encrypt_01 nvarchar(max)

  DECLARE @real_decrypt_01 nvarchar(max),@real_decrypt_01a nvarchar(max)

  select @real_decrypt_01a = ''

  -- 从sys.sysobjvalues里提出加密的imageval记录

  SET @real_01=(SELECT imageval FROM sys.sysobjvalues WHERE objid =

  object_id(@procedure) and valclass = 1 and subobjid = 1 )

  --创建一个临时表

  create table #output ( [ident] [int] IDENTITY (1, 1) NOT NULL ,

  [real_decrypt] NVARCHAR(MAX) )

  --开始一个事务,稍后回滚

  BEGIN TRAN

  --更改原始的存储过程,用短横线替换

  SET @fake_01='ALTER PROCEDURE '+ @procedure +' WITH ENCRYPTION AS

  '+REPLICATE('-', 40003 - @procNameLength)

  EXECUTE (@fake_01)

  --从sys.sysobjvalues里提出加密的假的

  SET @fake_encrypt_01=(SELECT imageval FROM sys.sysobjvalues WHERE objid =

  object_id(@procedure) and valclass = 1 and subobjid = 1)

  SET @fake_01='CREATE PROCEDURE '+ @procedure +' WITH ENCRYPTION AS

  '+REPLICATE('-', 40003 - @procNameLength)

共9页。 9 1 2 3 4 5 6 7 :

网友评论

笔名 
请您注意:遵守国家有关法律、法规,尊重网上道德,承担一切因您的行为而直接或间接引起的法律责任。    IT专家网友拥有管理笔名和留言的一切权利。
  • 周排行榜
  • 月排行榜

邮件订阅


    
天极服务 | 关于我们 | 网站律师 | 加入我们 | 联系我们 | 广告业务 | 友情链接 | 我要挑错
All Rights Reserved, Copyright 2004-2008, Ctocio.com.cn
渝ICP证B2-20030003号 如有意见请与我们联系 powered by 天极内容管理平台CMS4i