SQLSERVER 视图、 存储过程批量加密
测试环境SQLSERVER2012 企业版 商业智能版
存储过程批量加密
use demo1 go CREATE PROCEDURE sp_BatchEncrypt AS declare @sp_name nvarchar(max) declare @sp_content nvarchar(max)--修正参数过长导致截取不全的问题 declare @asbegin int declare @now datetime declare @i int select @now = getdate() declare sp_cursor cursor for select object_name(id) from sysobjects where xtype = 'p' ----XType='U':表示所有用户表; XType='S':表示所有系统表;XType='V':表示所有视图XType='P':表示所有存储过程 XType='D':表示所有函数 and type = 'p' and crdate < @now and objectproperty(id, 'ismsshipped') = 0--非安装SQLServer过程中创建的对象。 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) --截取 AS 起始位置 if @asbegin>0 begin 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--重新创建存储过程 end fetch next from sp_cursor into @sp_name end
视图批量加密
USE [demo1] GO /****** Object: StoredProcedure [dbo].[sp_BatchEncrypt_view] Script Date: 2015/3/18 15:10:00 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO ALTER PROCEDURE [dbo].[sp_BatchEncrypt_view] AS declare @sp_name nvarchar(max) declare @sp_content nvarchar(max)--修正参数过长导致截取不全的问题 declare @asbegin int declare @now datetime declare @i int select @now = getdate() declare sp_cursor cursor for select object_name(id) from sysobjects where xtype = 'V' ----XType='U':表示所有用户表; XType='S':表示所有系统表;XType='V':表示所有视图XType='P':表示所有存储过程 XType='D':表示所有函数 and type = 'V' and crdate < @now and objectproperty(id, 'ismsshipped') = 0--非安装SQLServer过程中创建的对象。 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) --截取 AS 起始位置 if @asbegin>0 begin select @sp_content = substring(@sp_content, 1, @asbegin - 1) + ' with encryption as ' + substring (@sp_content, @asbegin+2, len(@sp_content)) select @sp_name = 'drop view [' + @sp_name + ']' exec sp_executesql @sp_name --删除视图 exec sp_executesql @sp_content--重新创建视图 end fetch next from sp_cursor into @sp_name end
其他触发器自定义函数等可以用同样方式加密