关于加密存储过程

如何简单的创建一个加密存储过程:
None.gif create   proc  Test
None.gif(参数列表)
None.gif
with  encription
None.gif
as
None.gif主体
None.gif
go

为了演示,现在我们创建一个具备各种参数类型的存储过程作为测试:
None.gif create   proc  Test 
None.gif(
None.gif    @x 
int   =   3 ,
None.gif    @s 
nvarchar ( 20 ),
None.gif    @y 
int  output
None.gif)
None.gif
None.gif
with  encryption
None.gif
as
None.gif
None.gif
select  @x, @s
None.gif
set  @y  =   5
None.gif
return   1
None.gif
go
这个存储过程具备了输入参数,输出参数,返回值。
(关于返回值的题外话:返回值只能是 int 类型或者没有。默认情况下,系统存储过程都返回 0 表示调用成功,其他非零值表示失败。用户自定义的存储过程可以返回任意整数值)

现在调用一下这个存储过程试试:
None.gif declare  @y  int , @r  int
None.gif
exec  @r  =  test  9 ' Hello ' , @y output
None.gif
select  @y
None.gif
select  @r

再来看一下这个存储过程的注释:
None.gif SELECT  c.id, c. text  
None.gif
FROM  syscomments c  INNER   JOIN  sysobjects o
None.gif   
ON  c.id  =  o.id
None.gif
WHERE  o.name  =   ' Test '
可以发现是一些加密了之后的乱码。

如何得到加密存储过程的参数列表信息呢?有两个办法:
方法A:
None.gif select   *   from  information_schema.parameters
None.gif
where  specific_name  =   ' Test '
这个方法返回的结果集里没有包含返回值的信息。

方法B:
None.gif sp_procedure_params_rowset  ' Test ' 1 ' dbo '
这个语句返回的比上面那个多一行返回值信息。

注意到他们返回的其他列信息也不同。比如 PROCEDURE_NAME(存储过程名),方法B返回的是:
Test;1
后面这个 1 表示 Group Number.

参考:
http://sqljunkies.com/WebLog/roman/archive/2004/10/08/4539.aspx

转载于:https://www.cnblogs.com/RChen/archive/2005/03/18/120981.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值