如何对所有存储过程进行一次性的加密?(来自CSDN)
2006-05-25 09:03
441 查看
即在数据库里有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 上通过。
---------------------------------------------------------------
=======================================================================================
/*批量加密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 上通过。
相关文章推荐
- postgresql 写存储过程传入的参数为字符串('4,5,6,8,9,10')个数不确定时,如何一次性删除
- 怎样对SQL Server 2005加密的存储过程进行解密
- 通用高效分页存储过程代码(来自CSDN文档)
- [原创]SQL Server2005中如何知道某个存储过程是否已加密?
- 存储过程报错之后,后续语句如何执行,以及相关job下次执行时间怎样进行更新
- Python如何对MySQL存储过程进行调用
- [SQL Server]如何快速查找使用了某个字段的所有存储过程
- [SQL Server]如何快速查找使用了某个字段的所有存储过程?
- 如何加密Oracle中的存储过程
- SQLServer 2005中如何列所有存储过程
- 写存储过程时如何对传进去的参数进行字符串的匹配
- 一次性删除数据库所有表和所有存储过程 SQL语句
- SQL - 如何查询某个存储过程的的所有参数:
- 如何快速重新编译所有的存储过程
- SQL Server中用with encryption进行加密的存储过程,可以用下面过程解密!
- 写了一个针对一个的所有表进行的存储过程!可以方便的清空数据库!
- SQL SERVER 中对当前库中的所有视图进行刷新的存储过程
- 一次性删除数据库所有表和所有存储过程 SQL语句
- 一次性删除数据库所有表和所有存储过程 SQL语句