SQL SERVER 2005 存储过程签名实现
use tempdb
go
-- 创建测试存储过程
CREATE PROCEDURE [dbo].[T_1]
AS
BEGIN
SET NOCOUNT ON;
exec ('SELECT * from dbo.User_Log')
END
GO
-- 创建数据库主密钥,以使用证书
create MASTER KEY ENCRYPTION BY PASSWORD = 'password'
go
-- 创建证书
CREATE CERTIFICATE c_T1
WITH SUBJECT = 'exec t1 select table t1',
START_DATE = '01/01/2008' , EXPIRY_DATE = '12/31/2018'
go
-- 用证书对存储过程签名
add signature to t_1 by certificate c_T1;
GO
-- 用证书创建用户
create user u_T1 from certificate c_T1;
go
-- 对证书用户进行授权(这里是对表的select权限)
grant select on dbo.User_Log to u_T1
go
-- 授权“用户1”可执行 t_1 存储过程
grant exec on dbo.t_1 to 用户1
go
-- 测试 --
execute as login = '用户1';exec dbo.t_1;revert;
go
-- delete test data --
DROP PROC dbo.t_1
DROP CERTIFICATE c_T1
DROP USER u_T1
use tempdb
go
-- 创建测试存储过程
CREATE PROCEDURE [dbo].[T_1]
AS
BEGIN
SET NOCOUNT ON;
exec ('SELECT * from dbo.User_Log')
END
GO
-- 创建数据库主密钥,以使用证书
create MASTER KEY ENCRYPTION BY PASSWORD = 'password'
go
-- 创建证书
CREATE CERTIFICATE c_T1
WITH SUBJECT = 'exec t1 select table t1',
START_DATE = '01/01/2008' , EXPIRY_DATE = '12/31/2018'
go
-- 用证书对存储过程签名
add signature to t_1 by certificate c_T1;
GO
-- 用证书创建用户
create user u_T1 from certificate c_T1;
go
-- 对证书用户进行授权(这里是对表的select权限)
grant select on dbo.User_Log to u_T1
go
-- 授权“用户1”可执行 t_1 存储过程
grant exec on dbo.t_1 to 用户1
go
-- 测试 --
execute as login = '用户1';exec dbo.t_1;revert;
go
-- delete test data --
DROP PROC dbo.t_1
DROP CERTIFICATE c_T1
DROP USER u_T1
SQL Server 2005 存储过程签名
本文介绍如何在SQL Server 2005中为存储过程T_1创建签名,包括创建主密钥、证书、用户及权限分配等步骤,并通过示例演示整个过程。
117

被折叠的 条评论
为什么被折叠?



