易截截图软件、单文件、免安装、纯绿色、仅160KB

怎样对SQL Server 2005加密的存储过程进行解密

 SQLServer2005里使用with encryption选项创建的存储过程仍然和sqlserver2000里一样,都是使用XOR进行了的加密。和2000不一样的是,在2005的系统 表syscomments里已经查不到加密过的密文了。要查密文必须使用DAC(专用管理员连接)连接到数据库后,在系统表 sys.sysobjvalues查询,该表的列imageval存储了相应的密文。具体可以使用下面的查询:
  SELECT imageval from sys.sysobjvalues WHERE objid = object_id(@procedure) AND
  valclass = 1 AND subobjid = 1
  一 下面是解密的存储过程,具体代码如下:
  CREATE PROCEDURE dbo.sp__procedure$decrypt
  (@procedure sysname = NULL, @revfl int = 1)
  AS
  /*
  目前这个存储过程只能解密存储过程,至于解密函数、触发器、视图的存储过程本网站会进一步关注,调用形式为:
  exec dbo.sp__procedure$decrypt @procedure,0
  如果第二个参数使用1的话,会给出该存储过程的一些提示。
  */
  SET NOCOUNT ON
  IF @revfl = 1
  BEGIN
  PRINT '警告:该存储过程会删除并重建原始的存储过程。'
  PRINT ' 在运行该存储过程之前确保你的数据库有一个备份。'
  PRINT ' 该存储过程通常应该运行在产品环境的一个备份的非产品环境下。'
  PRINT ' 为了运行这个存储过程,将参数@refl的值更改为0。'
  RETURN 0
  END
  DECLARE @intProcSpace bigint, @t bigint, @maxColID smallint,@intEncrypted
  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] ID


相关文档:

SQL面试

1.一道SQL语句面试题,关于group by
表内容:
2005-05-09 胜
2005-05-09 胜
2005-05-09 负
2005-05-09 负
2005-05-10 胜
2005-05-10 负
2005-05-10 负
如果要生成下列结果, 该如何写sql语句?
            胜 负
2005-05-09 2 2
2005-05-10 ......

数据库SQL语句使用(一)

  数据库sql语句系列都是以下面的表为基础的
1.       写出步骤4中的各项操作的SQL语句。
① 给学生表增加一属性Nation(民族),数据类型为Varchar(20);
alter table Student add Nation varchar(20);
 
② 删除学生表中新增的属性Nation;
alter table Student DR ......

SQL 中 where 1=1 和 1=0的 作用

where 1=1有什么用?在SQL语言中,写这么一句话就跟没写一样。
select * from table1 where 1=1与select * from table1完全没有区别,甚至还有其他许多写法,1<>2,'a'='a','a'<>'b',其目的就只有一个,where的条件为永真,得到的结果就是未加约束条件的。
在SQL注入时会用到这个,例如select * from table1 ......

sql中的游标

declare @id varchar(10)
declare @nm varchar(10)
declare @table as table(emp varchar(10),empname varchar(10))
declare CurEmp cursor for select top 6 empid,empname from employee
open CurEmp
fetch next from CurEmp into @id,@nm
While @@fetch_status=0
 begin
  insert @table(emp,e ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号