- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章SQLSERVER对加密的存储过程、视图、触发器进行解密(推荐)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
加密测试的存储过程 。
1
2
3
4
5
6
7
8
9
10
11
12
|
IF EXISTS(
SELECT
1
FROM
SYSOBJECTS
WHERE
TYPE=
'P'
AND
NAME
=
'P_TEST'
)
DROP
PROCEDURE
P_TEST
GO
CREATE
PROCEDURE
P_TEST(@USERNAME
VARCHAR
(20),@MSG
VARCHAR
(20)
OUTPUT
)
WITH
ENCRYPTION
AS
BEGIN
IF(
SELECT
COUNT
(1)
FROM
Custs
WHERE
NAME
=@USERNAME)>0
SET
@MSG=
'此用户名存在'
ELSE
SET
@MSG=
'此用户名不存在'
END
|
解密的存储过程 。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
|
Create
PROCEDURE
Decryption(@
procedure
sysname =
NULL
)
AS
SET
NOCOUNT
ON
DECLARE
@intProcSpace
bigint
, @t
bigint
, @maxColID
smallint
,@procNameLength
int
select
@maxColID =
max
(subobjid)
FROM
sys.sysobjvalues
WHERE
objid = object_id(@
procedure
)
--select @maxColID as 'Rows in sys.sysobjvalues'
select
@procNameLength = datalength(@
procedure
) + 29
DECLARE
@real_01 nvarchar(
max
)
DECLARE
@fake_01 nvarchar(
max
)
DECLARE
@fake_encrypt_01 nvarchar(
max
)
DECLARE
@real_decrypt_01 nvarchar(
max
),@real_decrypt_01a nvarchar(
max
)
declare
@objtype
varchar
(2),@ParentName nvarchar(
max
)
select
@real_decrypt_01a =
''
--提取对象的类型如是存储过程还是函数,如果是触发器,还要得到其父对象的名称
select
@objtype=type,@parentname=object_name(parent_object_id)
from
sys.objects
where
[object_id]=object_id(@
procedure
)
-- 从sys.sysobjvalues里提出加密的imageval记录
SET
@real_01=(
SELECT
top
1 imageval
FROM
sys.sysobjvalues
WHERE
objid =
object_id(@
procedure
)
and
valclass = 1
order
by
subobjid)
--创建一个临时表
create
table
#
output
( [ident] [
int
] IDENTITY (1, 1)
NOT
NULL
,
[real_decrypt] NVARCHAR(
MAX
) )
--开始一个事务,稍后回滚
BEGIN
TRAN
--更改原始的存储过程,用短横线替换
if @objtype=
'P'
SET
@fake_01=
'ALTER PROCEDURE '
+ @
procedure
+
' WITH ENCRYPTION AS select 1
/**//*'
+REPLICATE(
cast
(
'*'
as
nvarchar(
max
)), datalength(@real_01) /2 - @procNameLength)+
'*/'
else
if @objtype=
'FN'
SET
@fake_01=
'ALTER FUNCTION '
+ @
procedure
+
'() RETURNS INT WITH ENCRYPTION AS BEGIN RETURN 1
/**//*'
+REPLICATE(
cast
(
'*'
as
nvarchar(
max
)), datalength(@real_01) /2 - @procNameLength)+
'*/ END'
else
if @objtype=
'V'
SET
@fake_01=
'ALTER view '
+ @
procedure
+
' WITH ENCRYPTION AS select 1 as col
/**//*'
+REPLICATE(
cast
(
'*'
as
nvarchar(
max
)), datalength(@real_01) /2 - @procNameLength)+
'*/'
else
if @objtype=
'TR'
SET
@fake_01=
'ALTER trigger '
+ @
procedure
+
' ON '
+@parentname+
'WITH ENCRYPTION AFTER INSERT AS RAISERROR ('
'N'
',16,10)
/**//*'
+REPLICATE(
cast
(
'*'
as
nvarchar(
max
)), datalength(@real_01) /2 - @procNameLength)+
'*/'
EXECUTE
(@fake_01)
--从sys.sysobjvalues里提出加密的假的
SET
@fake_encrypt_01=(
SELECT
top
1 imageval
FROM
sys.sysobjvalues
WHERE
objid =
object_id(@
procedure
)
and
valclass = 1
order
by
subobjid )
if @objtype=
'P'
SET
@fake_01=
'Create PROCEDURE '
+ @
procedure
+
' WITH ENCRYPTION AS select 1
/**//*'
+REPLICATE(
cast
(
'*'
as
nvarchar(
max
)), datalength(@real_01) /2 - @procNameLength)+
'*/'
else
if @objtype=
'FN'
SET
@fake_01=
'CREATE FUNCTION '
+ @
procedure
+
'() RETURNS INT WITH ENCRYPTION AS BEGIN RETURN 1
/**//*'
+REPLICATE(
cast
(
'*'
as
nvarchar(
max
)), datalength(@real_01) /2 - @procNameLength)+
'*/ END'
else
if @objtype=
'V'
SET
@fake_01=
'Create view '
+ @
procedure
+
' WITH ENCRYPTION AS select 1 as col
/**//*'
+REPLICATE(
cast
(
'*'
as
nvarchar(
max
)), datalength(@real_01) /2 - @procNameLength)+
'*/'
else
if @objtype=
'TR'
SET
@fake_01=
'Create trigger '
+ @
procedure
+
' ON '
+@parentname+
'WITH ENCRYPTION AFTER INSERT AS RAISERROR ('
'N'
',16,10)
/**//*'
+REPLICATE(
cast
(
'*'
as
nvarchar(
max
)), datalength(@real_01) /2 - @procNameLength)+
'*/'
--开始计数
SET
@intProcSpace=1
--使用字符填充临时变量
SET
@real_decrypt_01 = replicate(
cast
(
'A'
as
nvarchar(
max
)), (datalength(@real_01) /2 ))
--循环设置每一个变量,创建真正的变量
--每次一个字节
SET
@intProcSpace=1
--如有必要,遍历每个@real_xx变量并解密
WHILE @intProcSpace<=(datalength(@real_01)/2)
BEGIN
--真的和假的和加密的假的进行异或处理
SET
@real_decrypt_01 = stuff(@real_decrypt_01, @intProcSpace, 1,
NCHAR
(UNICODE(
substring
(@real_01, @intProcSpace, 1)) ^
(UNICODE(
substring
(@fake_01, @intProcSpace, 1)) ^
UNICODE(
substring
(@fake_encrypt_01, @intProcSpace, 1)))))
SET
@intProcSpace=@intProcSpace+1
END
--通过sp_helptext逻辑向表#output里插入变量
insert
#
output
(real_decrypt)
select
@real_decrypt_01
--select real_decrypt AS '#output chek' from #output --测试
-- -------------------------------------
--开始从sp_helptext提取
-- -------------------------------------
declare
@dbname sysname
,@BlankSpaceAdded
int
,@BasePos
int
,@CurrentPos
int
,@TextLength
int
,@LineId
int
,@AddOnLen
int
,@LFCR
int
--回车换行的长度
,@DefinedLength
int
,@SyscomText nvarchar(
max
)
,@Line nvarchar(255)
Select
@DefinedLength = 255
SELECT
@BlankSpaceAdded = 0
--跟踪行结束的空格。注意Len函数忽略了多余的空格
CREATE
TABLE
#CommentText
(LineId
int
,Text nvarchar(255)
collate
database_default)
--使用#output代替sys.sysobjvalues
DECLARE
ms_crs_syscom
CURSOR
LOCAL
FOR
SELECT
real_decrypt
from
#
output
ORDER
BY
ident
FOR
READ
ONLY
--获取文本
SELECT
@LFCR = 2
SELECT
@LineId = 1
OPEN
ms_crs_syscom
FETCH
NEXT
FROM
ms_crs_syscom
into
@SyscomText
WHILE @@fetch_status >= 0
BEGIN
SELECT
@BasePos = 1
SELECT
@CurrentPos = 1
SELECT
@TextLength = LEN(@SyscomText)
WHILE @CurrentPos != 0
BEGIN
--通过回车查找行的结束
SELECT
@CurrentPos = CHARINDEX(
char
(13)+
char
(10), @SyscomText,
@BasePos)
--如果找到回车
IF @CurrentPos != 0
BEGIN
--如果@Lines的长度的新值比设置的大就插入@Lines目前的内容并继续
While (
isnull
(LEN(@Line),0) + @BlankSpaceAdded +
@CurrentPos-@BasePos + @LFCR) > @DefinedLength
BEGIN
SELECT
@AddOnLen = @DefinedLength-(
isnull
(LEN(@Line),0) +
@BlankSpaceAdded)
INSERT
#CommentText
VALUES
( @LineId,
isnull
(@Line, N
''
) +
isnull
(
SUBSTRING
(@SyscomText,
@BasePos, @AddOnLen), N
''
))
SELECT
@Line =
NULL
, @LineId = @LineId + 1,
@BasePos = @BasePos + @AddOnLen, @BlankSpaceAdded = 0
END
SELECT
@Line =
isnull
(@Line, N
''
) +
isnull
(
SUBSTRING
(@SyscomText, @BasePos, @CurrentPos-@BasePos + @LFCR), N
''
)
SELECT
@BasePos = @CurrentPos+2
INSERT
#CommentText
VALUES
( @LineId, @Line )
SELECT
@LineId = @LineId + 1
SELECT
@Line =
NULL
END
ELSE
--如果回车没找到
BEGIN
IF @BasePos <= @TextLength
BEGIN
--如果@Lines长度的新值大于定义的长度
While (
isnull
(LEN(@Line),0) + @BlankSpaceAdded +
@TextLength-@BasePos+1 ) > @DefinedLength
BEGIN
SELECT
@AddOnLen = @DefinedLength -
(
isnull
(LEN(@Line),0) + @BlankSpaceAdded)
INSERT
#CommentText
VALUES
( @LineId,
isnull
(@Line, N
''
) +
isnull
(
SUBSTRING
(@SyscomText,
@BasePos, @AddOnLen), N
''
))
SELECT
@Line =
NULL
, @LineId = @LineId + 1,
@BasePos = @BasePos + @AddOnLen, @BlankSpaceAdded =
0
END
SELECT
@Line =
isnull
(@Line, N
''
) +
isnull
(
SUBSTRING
(@SyscomText, @BasePos, @TextLength-@BasePos+1 ), N
''
)
if LEN(@Line) < @DefinedLength
and
charindex(
' '
,
@SyscomText, @TextLength+1 ) > 0
BEGIN
SELECT
@Line = @Line +
' '
, @BlankSpaceAdded = 1
END
END
END
END
FETCH
NEXT
FROM
ms_crs_syscom
into
@SyscomText
END
IF @Line
is
NOT
NULL
INSERT
#CommentText
VALUES
( @LineId, @Line )
select
Text
from
#CommentText
order
by
LineId
CLOSE
ms_crs_syscom
DEALLOCATE
ms_crs_syscom
DROP
TABLE
#CommentText
-- -------------------------------------
--结束从sp_helptext提取
-- -------------------------------------
--删除用短横线创建的存储过程并重建原始的存储过程
ROLLBACK
TRAN
DROP
TABLE
#
output
GO
启用DAC
SP_CONFIGURE
'remote admin connections'
;
GO
----0:仅允许本地连接使用 DAC,1:允许远程连接使用 DAC
SP_CONFIGURE
'remote admin connections'
, 0;
GO
RECONFIGURE
WITH
OVERRIDE;
GO
|
文件——>新建——>数据库引擎查询 。
服务器名称:admin:.或者admin:服务器名称 。
登录进去执行解密操作 。
1
2
3
|
USE TEST
EXEC
Decryption P_TEST
GO
|
为了安全起见,不要在正式环境进行解密,避免在解密过程中将原存储过程损坏! 。
总结 。
以上所述是小编给大家介绍的SQLSERVER对加密的存储过程、视图、触发器进行解密,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢! 。
原文链接:https://blog.csdn.net/weixin_41896770/article/details/103810177 。
最后此篇关于SQLSERVER对加密的存储过程、视图、触发器进行解密(推荐)的文章就讲到这里了,如果你想了解更多关于SQLSERVER对加密的存储过程、视图、触发器进行解密(推荐)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
嗨, 我是 Spark 的新手,我正在尝试使用 ML 推荐。 我的代码 df = sqlContext.createDataFrame( [(0, 0, 4.0), (0, 1, 2.0), (1,
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
平台工程是为软件开发人员创建高效生态系统的过程,帮助他们自主执行软件开发生命周期的端到端操作。平台工程旨在减少开发人员的整体认知负荷并消除流程中的瓶颈,让开发团队的体验更佳。平台工程工具通过改善开发
最近在ubuntu系统中使用自带的firefox浏览器,发现有写问题,比如登陆后,书签,历史记录等,原本在windows下同步的数据无法同步,添加书签的功能也无法使用。 经过查询资料后得知,unb
Remax是蚂蚁开源的一个用React来开发小程序的框架,采用运行时无语法限制的方案。整体研究下来主要分为三大部分:运行时原理、模板渲染原理、编译流程;看了下现有大部分文章主要集中在Reamx的运行
实验室拟态存储的项目需要通过lvs-nat模式通过lvs服务器来区隔内外网的服务,所以安全防护的重心则落在了lvs服务器之上。笔者最终选择通过firewalld放行端口的方式来实现需求,由于fire
如今,随着我们身体各类数据的指数级增长,人们需要接受的信息量越来越大,系统必须处理的难度也是越来越高。而这些正是我们需要通过交互式图表和仪表盘,来实现数据可视化的根本原因。在大幅节省用户的时间和精力
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。 vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、
1、实现memcpy 将src所指向的内容拷贝到dst所指向的位置,拷贝len个字节。 memcpy是内存拷贝函数 memcpy在使用的时候不用考虑类型,以字节为单位进行拷贝
现在有3台服务器 s1(主),s2(从), s3(从)需要实现文件实时同步,我们可以安装Nfs服务端和客户端来实现! 1、安装 NFS 服务器所需的软件包:
本文基于Free Code Camp基本算法脚本“查找字符串中最长的单词”。 在此算法中,我们要查看每个单词并计算每个单词中有多少个字母。然后,比较计数以确定哪个单词的字符最多,并返回最长单词的长
I/O简介 I/O是Input/output的缩写,在java中,对于数据的输入和输出以流的方式进行。java.io包下提供了各种“流”类和接口,用以获取不同种类的数据,并通过标准的方法输入或输出
目录 docker容器源码部署httpd,用存储卷部署网站 创建一个httpd镜像 部署nfs 挂载 创建容器并映射
python代码如下: import webbrowser as wbimport foliumif __name__ == '__main__': loc = [30.679943, 104.0
近日,微软在 Github 上开源了一个 Python 静态类型检查工具:pyright ,引起了社区内的多方关注。 微软在开源项目上的参与力度是越来越大了,不说收购 Github 这种大的战略野
在编写多线程代码时,经常面临线程安全退出的问题。 一般情况下,选择检查标志位的方式: 在线程的while循环中,执行完例程后,都对标志位进行检查,如果标志位指示继续执行则再次执行例程,如果标志
前言 在程序中我们经常可以看到有很多的加密算法,比如说MD5 sha1等,今天我们就来了解下这下加密算法的吧,在了解之前我们需要知道一个模块嘛就是hashlib,他就是目前Python一个提供字符
java 泛型(generics)是 jdk 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。 泛型的本质是参数化类型,也就是说所操作的数据类型
在Python中,当我们有两个字典需要合并的时候,可以使用字典的 update 方法,例如: a = {'a': 1, 'b': 2} b = {'x': 3, 'y': 4}
有的时候我们在获取到目标电脑时候如果对方电脑又python 编译环境时可以利用python 反弹shell 主要用到python os库和sokect库 这里的服务端在目标机上运行
我是一名优秀的程序员,十分优秀!