思想决定人生,态度改变一切

成功者找方法,失败者找借口! 做事先做人;安分做人,本分做事!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
即在数据库里有100个存储过程,如果加密的话要写一百次加密语句太麻烦,我想一次性的加密这些存储过程。分不够再加  
---------------------------------------------------------------  
 
=======================================================================================  
/*批量加密SQLSERVER  2000  的存储过程  
/*  
           摘自:微软官方网站  
*/  
=======================================================================================  
下面给出了一个存储过程,它的作用是自动将当前数据库的用户存储过程加密。  
 
DECLARE  @sp_name  nvarchar(400)  
DECLARE  @sp_content  nvarchar(2000)  
DECLARE  @asbegin  int  
declare  @now  datetime  
select  @now  =  getdate()  
DECLARE  sp_cursor  CURSOR  FOR    
SELECT  object_name(id)  
FROM  sysobjects  
WHERE  xtype  =  'P'    
AND  type  =  'P'    
AND  crdate  <  @now  
AND  OBJECTPROPERTY(id,  'IsMSShipped')=0  
 
OPEN  sp_cursor  
 
FETCH  NEXT  FROM  sp_cursor    
INTO  @sp_name  
 
WHILE  @@FETCH_STATUS  =  0  
BEGIN  
SELECT  @sp_content  =  text  FROM  syscomments  WHERE  id  =  OBJECT_ID(@sp_name)    
SELECT  @asbegin  =  PATINDEX  (  '%AS'  +  char(13)  +  '%',  @sp_content)    
SELECT  @sp_content  =  SUBSTRING(@sp_content,  1,  @asbegin  -  1)    
+  '  WITH  ENCRYPTION  AS'  
+  SUBSTRING  (@sp_content,  @asbegin+2,  LEN(@sp_content))  
SELECT  @sp_name  =  'DROP  PROCEDURE  ['  +  @sp_name  +  ']'  
EXEC  sp_executesql  @sp_name    
EXEC  sp_executesql  @sp_content  
FETCH  NEXT  FROM  sp_cursor    
INTO  @sp_name  
END  
 
CLOSE  sp_cursor    
DEALLOCATE  sp_cursor  
 
该存储过程利用了  sysobjects  和  syscomments  表,并巧妙地修改了原存储过程的  SQL  定义语句,将  AS  修改为了  WITH  ENCRYPTION  AS,从而达到了加密存储过程的目的。本存储过程在  SQL  Server  2000  上通过。  

posted on 2006-05-25 09:03  投石问路  阅读(469)  评论(0编辑  收藏  举报