批量加密SQLSERVER 2000 的存储过程

来源:互联网 发布:散热好的的笔记本 知乎 编辑:程序博客网 时间:2024/05/17 02:54

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

原创粉丝点击