批量加密SQLSERVER 2000 的存儲過程

/*批量加密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  上通過。  

發佈了18 篇原創文章 · 獲贊 3 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章