
一、用于加密的存储过程(sp_EncryptObject)
存储过程(sp_EncryptObject)加密的方法是在存储过程,函数,视图的“As”位
置前加上“with encryption”;如果是触发器,就在“for”位置前加“with encryption”。
注:如果我们在创建新的存储过程或者函数时,可以直接在"As"或者“for”位置前加
上“with encryption”。
如果触发器是{AFTER|INSTEAD OF}需要修改下面的代码“For”位置:
if objectproperty(object_id(@Object),'ExecIsAfterTrigger')=0 set @Replace='As' ;
else set @Replace='For ';
存储过程代码:
USE master;
GO
IF OBJECT_ID('[sp_EncryptObject]') IS NOT NULL
DROP PROCEDURE [sp_EncryptObject];
GO
CREATE PROCEDURE sp_EncryptObject
(
@Object sysname = 'All'
)
AS /*
当@Object=All 的时候,对所有的函数,存储过程,视图和触发器进行加密
调用方法:
1. Execute sp_EncryptObject 'All'
2. Execute sp_EncryptObject 'ObjectName'
*/
BEGIN
SET NOCOUNT ON;
IF @Object <> 'All'
BEGIN
IF NOT EXISTS ( SELECT 1
FROM sys.objects a
WHERE a.object_id = OBJECT_ID(@Object)
AND a.type IN ( 'P', 'V', 'TR', 'FN',
'IF', 'TF' ) )
BEGIN
--SQL Server 2008
-- RAISERROR 50001 N'无效的加密对象!加密对象必须是函数,
存储过程,视图或触发器。'
--SQL Server 2012
THROW 50001, N'无效的加密对象!加密对象必须是函数,存储过
程,视图或触发器。',1;
评论