SQLSERVER对加密的存储过程、视图、触发器进行解
  • 作者:admin
  • 发表时间:2021-03-03 07:52
  • 来源:未知

这篇文章主要介绍了数据库对加密的存储过程、视图、触发器进行解密,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

加密测试的存储过程

如果存在(从系统对象中选择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列