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

其他触发器自定义函数等可以用同样方式加密

posted @ 2015-03-18 12:01  Merray  Views(596)  Comments(0Edit  收藏  举报