怎样加密存储过程,表,视图,触发器等等?

ymhmax 2003-07-06 06:02:51
...全文
487 53 打赏 收藏 转发到动态 举报
写回复
用AI写文章
53 条回复
切换为时间正序
请发表友善的回复…
发表回复
laurecn 2003-12-01
  • 打赏
  • 举报
回复
关注
97866 2003-12-01
  • 打赏
  • 举报
回复
http://www.csdn.net/Develop/article/22%5C22088.shtm
witzgf2 2003-08-28
  • 打赏
  • 举报
回复
WITH ENCRYPTION
kingting 2003-08-28
  • 打赏
  • 举报
回复
老兄,Vergil(国王)
你的都编译不过呀…
好运 2003-07-30
  • 打赏
  • 举报
回复
good
wenyongjie 2003-07-30
  • 打赏
  • 举报
回复
up
Vergil 2003-07-29
  • 打赏
  • 举报
回复
下面这个存储过程,是怎样解密视图、过程、触发器(原文出自一外文网站),经过加工过。

CREATE PROCEDURE sys_decrypt2K
@objName varchar(50)
AS
DECLARE
@a nvarchar(4000),
@b nvarchar(4000),
@c nvarchar(4000),
@d nvarchar(4000),
@i int,
@t bigint,
@tablename varchar(255),
@trigtype varchar(6),
@type varchar(2)
BEGIN TRAN
IF EXISTS(SELECT id FROM syscomments WHERE id = object_id(@objName) and encrypted = 1)
AND EXISTS(SELECT name FROM dbo.sysobjects WHERE name = @objName and xtype in ('V','P','TR'))
BEGIN
SET @type=(select xtype from dbo.sysobjects where name = @objName)
SET @type=UPPER(@type)
END ELSE
BEGIN
ROLLBACK TRAN
RETURN
END

IF @type='TR'
BEGIN
SET @tablename=(SELECT sysobjects_1.name FROM dbo.sysobjects INNER JOIN
dbo.sysobjects sysobjects_1 ON dbo.sysobjects.parent_obj = sysobjects_1.id
WHERE (dbo.sysobjects.type = 'TR') AND (dbo.sysobjects.name = @objName))
SET @trigtype=(SELECT CASE WHEN dbo.sysobjects.deltrig > 0 THEN 'DELETE'
WHEN dbo.sysobjects.instrig > 0 THEN 'INSERT'
WHEN dbo.sysobjects.updtrig > 0 THEN 'UPDATE' END
FROM dbo.sysobjects INNER JOIN
dbo.sysobjects sysobjects_1 ON dbo.sysobjects.parent_obj = sysobjects_1.id
WHERE (dbo.sysobjects.type = 'TR') AND (dbo.sysobjects.name = @objName))
END

--get encrypted data
SET @a=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b=case @type
WHEN 'P' THEN 'ALTER PROCEDURE '+ @objName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)
WHEN 'V' THEN 'ALTER VIEW ' + @objName +' WITH ENCRYPTION AS SELECT dbo.dtproperties.* FROM dbo.dtproperties'+REPLICATE('-', 4000-150)
WHEN 'TR' THEN 'ALTER TRIGGER ' + @objName +' ON '+ @tablename+' WITH ENCRYPTION FOR '+@trigtype+' AS PRINT ''a'''+REPLICATE('-', 4000-150)
END
EXECUTE (@b)

--get encrypted bogus SP
SET @c=(SELECT ctext FROM syscomments WHERE id = object_id(@objName))
SET @b=case @type
WHEN 'P' THEN 'CREATE PROCEDURE '+ @objName +' WITH ENCRYPTION AS '+REPLICATE('-', 4000-62)
WHEN 'V' THEN 'CREATE VIEW ' + @objName +' WITH ENCRYPTION AS SELECT dbo.dtproperties.* FROM dbo.dtproperties'+REPLICATE('-', 4000-150)
WHEN 'TR' THEN 'CREATE TRIGGER ' + @objName +' ON '+ @tablename+' WITH ENCRYPTION FOR '+@trigtype+' AS PRINT ''a'''+REPLICATE('-', 4000-150)
END

--start counter
SET @i=1
--fill temporary variable
SET @d = replicate(N'A', (datalength(@a) / 2))
--loop
WHILE @i<=datalength(@a)/2
BEGIN
--xor original+bogus+bogus encrypted
SET @d = stuff(@d, @i, 1, NCHAR(UNICODE(substring(@a, @i, 1)) ^
(UNICODE(substring(@b, @i, 1)) ^
UNICODE(substring(@c, @i, 1)))))
SET @i=@i+1
END

--drop original SP
IF @type='P'
EXECUTE ('DROP PROCEDURE '+ @objName)
ELSE IF @type='V'
EXECUTE ('DROP VIEW '+ @objName)
ELSE IF @type='TR'
EXECUTE ('DROP TRIGGER '+ @objName)

--remove encryption
--try to preserve case
SET @d=REPLACE((@d),'WITH ENCRYPTION', '')
SET @d=REPLACE((@d),'With Encryption', '')
SET @d=REPLACE((@d),'with encryption', '')
IF CHARINDEX('WITH ENCRYPTION',UPPER(@d) )>0
SET @d=REPLACE(UPPER(@d),'WITH ENCRYPTION', '')
--Replace SP
execute(@d)
COMMIT TRAN
GO
klan 2003-07-29
  • 打赏
  • 举报
回复
WITH ENCRYPTION
klan 2003-07-29
  • 打赏
  • 举报
回复
WITH ENCRYPTION
Vergil 2003-07-29
  • 打赏
  • 举报
回复
一次性加密所有存储过程和试图:
1、先将所有存储过程和试图生成SQL脚本,
2、EditPlus下进行替换
替换(选择匹配全字词)
as

WITH ENCRYPTION as
替换(正常模式)
WITH ENCRYPTION as

as
3.重新生成SQL脚本
----------------------------------------------------------
RE: 此方式一点也不适用:
1、假如我的视图是嵌套视图,存储过程中也有嵌套了其它存储过程.
请问你怎能保证视图、过程执行的先后顺序。
因为是嵌套视图,如不能保证先后顺序,运行SQL脚本时肯定要出错,
虽然多运行几次SQL脚本,错误就不再出现了,但此方式肯定不好了,
特别是SQL脚本不在SQL分析器中运行时。
2. 另处,你怎么去判断 WITH ENCRYPTION 将要插入视图、过程、触发器的位置。
仅判断AS后的字符,就插入 WITH ENCRYPTION,谁能做到?
3.........

谁能分解:select ctext from syscomments
一次性加密所有存储过程和试图,即可解决.

ADWARDS00 2003-07-28
  • 打赏
  • 举报
回复
搞了半天如何解还没说啊
jossred 2003-07-27
  • 打赏
  • 举报
回复
up
yxbyxbwj 2003-07-26
  • 打赏
  • 举报
回复
up
root3646 2003-07-26
  • 打赏
  • 举报
回复
关注一下!
wqqueen 2003-07-26
  • 打赏
  • 举报
回复
shxhark的SQLExplorer.exe功能真的不错。
给个注册码吧!
WilliamXiaoLiang 2003-07-26
  • 打赏
  • 举报
回复
pengdali(大力 V2.0)
使用 WITH ENCRYPTION 选项
完全同意!
关注中!
superhasty 2003-07-25
  • 打赏
  • 举报
回复
能不能探讨一下SQL 是如何加密的?就是其算法怎样的?我觉得这个比较有意义--授人以渔。
payzq 2003-07-24
  • 打赏
  • 举报
回复
up
johnma 2003-07-23
  • 打赏
  • 举报
回复
用三层架构吧
qxm 2003-07-23
  • 打赏
  • 举报
回复
GZ
加载更多回复(33)

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧