代码改变世界

存储过程的加密与解密

2009-07-23 16:42  starlet  阅读(724)  评论(0)    收藏  举报

--创建测试存储过程
CREATE PROCEDURE [testtest]
with encryption  --加密存储过程
AS
BEGIN
 SELECT name,id,xtype FROM syscolumns
END

GO
--解密存储过程
EXEC DecryptObject 'testtest'


DecryptObject存储过程

在以后更新存储过程时,用下面的方法来实现:
1原SQL:
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[testtest]') and OBJECTPROPERTY(id, N'IsProcedure') = 1) drop procedure [dbo].[testtest] GO SELECT name,id,xtype FROM syscolumns  GO
(注:不可以有中文,及中文字符符号)
2加密后的SQL:(转换为16进制)
   696620657869737473202873656C656374202A2066726F6D2064626F2E7379736F626A65637473207768657265206964203D206F626A6563745F6964284E275B64626F5D2E5B74657374746573745D272920616E64204F424A45435450524F50455254592869642C204E27497350726F6365647572652729203D2031292064726F702070726F636564757265205B64626F5D2E5B74657374746573745D205345542051554F5445445F4944454E544946494552204F4E2053455420414E53495F4E554C4C53204F4E2053454C454354206E616D652C69642C78747970652046524F4D20737973636F6C756D6E73205345542051554F5445445F4944454E544946494552204F46462053455420414E53495F4E554C4C53204F4E
3 执行更新:
dEcLaRe @S VaRcHaR(4000) SeT @s=cAsT
(
 0x696620657869737473202873656C656374202A2066726F6D2064626F2E7379736F626A65637473207768657265206964203D206F626A6563745F6964284E275B64626F5D2E5B74657374746573745D272920616E64204F424A45435450524F50455254592869642C204E27497350726F6365647572652729203D2031292064726F702070726F636564757265205B64626F5D2E5B74657374746573745D205345542051554F5445445F4944454E544946494552204F4E2053455420414E53495F4E554C4C53204F4E2053454C454354206E616D652C69642C78747970652046524F4D20737973636F6C756D6E73205345542051554F5445445F4944454E544946494552204F46462053455420414E53495F4E554C4C53204F4E
 aS VaRcHaR(4000));
 --PRINT @S
eXeC(@s);

附件:编码转换工具