计算机等级考试辅导:数据库加密存储过程
![](http://www.onekao.net/templets/default/images/content_ad.gif)
如何简单的创建一个加密存储过程:
create proc Test
(参数列表)
with encription
as
主体
go
为了演示,现在我们创建一个具备各种参数类型的存储过程作为测试:
create proc Test
(
@x int = 3,
@s nvarchar(20),
@y int output
)
with encryption
as
select @x, @s
set @y = 5
return 1
go这个存储过程具备了输入参数,输出参数,返回值。
(关于返回值的题外话:返回值只能是 int 类型或者没有。默认情况下,系统存储过程都返回 0 表示调用成功,其他非零值表示失败。用户自定义的存储过程可以返回任意整数值)
现在调用一下这个存储过程试试:
declare @y int, @r int
exec @r = test 9, ’Hello’, @y output
select @y
select @r
再来看一下这个存储过程的注释:
SELECT c.id, c.text
FROM syscomments c INNER JOIN sysobjects o #
ON c.id = o.id
WHERE o.name = ’Test’可以发现是一些加密了之后的乱码。
如何得到加密存储过程的参数列表信息呢?有两个办法:
方法A:
select * from information_schema.parameters
where specific_name = ’Test’这个方法返回的结果集里没有包含返回值的信息。
方法B:
sp_procedure_params_rowset ’Test’, 1, ’dbo’这个语句返回的比上面那个多一行返回值信息。
注意到他们返回的其他列信息也不同。比如 PROCEDURE_NAME(存储过程名),方法B返回的是:
Test;1
后面这个 1 表示 Group Number. #