这篇文章主要介绍了数据库对加密的存储过程、视图、触发器进行解密,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
加密测试的存储过程
如果存在(从系统对象中选择1,其中类型='P '和名称='P_TEST ')
跌落程序测试
去
创建过程测试(@用户名变量字符(20),@消息变量字符(20)输出)
加密
如同
开始
如果(从客户中选择计数(1),其中名称=@用户名)0
" SET @MSG="此用户名存在'
其他
" SET @MSG="此用户名不存在'
结束
解密的存储过程
创建过程解密(@过程系统名=空)
如同
设置不计数开启
DECLARE @intProcSpace bigint,@t bigint,@maxColID smallint,@procNameLength int
选择@maxColID=max(subobjid) FROM
sys。sysobj值WHERE objid=object _ id(@ procedure)
-选择@maxColID作为" sys.sysobjvalues中的行"
选择@ ProcNameLength=数据长度(@ procedure)29
DECLARE @real_01 nvarchar(最大值)
DECLARE @fake_01 nvarchar(最大值)
DECLARE @ fake _ encrypt _ 01 nvarchar(max)
DECLARE @ real _ DECLARE _ 01 nvarchar(最大值),@ real _ DECLARE _ 01a nvarchar(最大值)
声明@objtype varchar(2),@ParentName nvarchar(max)
选择@real_decrypt_01a=' '
-提取对象的类型如是存储过程还是函数,如果是触发器,还要得到其父对象的名称
选择@objtype=type,@ parent name=object _ name(parent _ object _ id)
来自sys.objects,其中[对象id]=object_id(@procedure)
-从sys.sysobjvalues里提出加密的imageval记录
SET @real_01=(从sys.sysobjvalues中选择前一个图像值,其中objid=
object _ id(@过程)和valclass=1 order by subobjid)
-创建一个临时表
创建表#输出([ident] [int] IDENTITY (1,1)非空,
[real_decrypt] NVARCHAR(MAX))
-开始一个事务,稍后回滚
开始事务
-更改原始的存储过程,用短横线替换
if @objtype='P '
SET @ fake _ 01=' ALTER PROCEDURE ' @ PROCEDURE ' WITH ENCRYPTION AS select 1
/* */* " REPLICATE(cast(' * ' as nvarchar(max)),数据长度(@ real _ 01)/2-@ ProcNameLength)' */'
else if @objtype='FN '
SET @ fake _ 01=' ALTER FUNCTION ' @ procedure '()以加密作为开始返回一返回(同Internationalorganizations)国际组织
/* */* " REPLICATE(cast(' * ' as nvarchar(max)),数据长度(@ real _ 01)/2-@ ProcNameLength)' */END '
else if @objtype='V '
SET @ fake _ 01=' ALTER view ' @ procedure '带加密AS选择1 AS列