首页  ·  知识 ·  数据库
学习sqlserver2005新特性第四讲:执行上下文
宋立桓  http://www.winmag.com.cn/forum/  MS-SQL  编辑:dezai  图片来源:网络
在SQLServer2005中引入上下文的概念,现在定义存储过程、触发器、用户定义函数时,可以使用子句指定SQLServer使用哪个用户的权限验证对过程引用对
在SQL Server2005中引入上下文的概念,现在定义存储过程、触发器、用户定义函数时,可以使用子句指定SQL Server使用哪个用户的权限验证对过程引用对象和数据的访问。
1. 启动SQL Server Management Studio,连接到数据库服务器实例,新建查询,打开查询编辑器,在代码窗格中,键入 Transact-SQL 语句,首先在pubs数据库下创建marry和scott登录和用户,并授予marry对authors表的 SELECT 权限
use pubs
create login marry with password=񟡂abcd'
create user marry for login marry
create login scott with password=񟡂abcd'
create user scott for login scott
grant create procedure to marry
grant select on dbo.authors to marry
go
2.创建架构,把架构的所属权赋予了marry, 设为marry的默认架构
create schema  marryschema authorization marry
go
alter user marry  with default_schema=marryschema
go
2.运行代码安全上下文切换到marry,marry 创建了一个引用authors表的有参数的存储过程AccessAuthors(动态的SQL),marry不拥有该表,但marry具有对该表的 SELECT 权限。她在 CREATE PROCEDURE 语句中指定了 EXECUTE AS 'Marry'。并且,Marry 授予 Scott 对该存储过程的 EXECUTE 权限。 
Execute as login='marry'
CREATE PROCEDURE AccessAuthors
@firstname varchar(50)
WITH EXECUTE AS 'marry'
AS 
 SELECT * FROM dbo.authors where au_fname=@firstname
go
grant execute on AccessAuthors to scott
4. 当 Scott 执行存储过程时,数据库引擎 将验证他是否具有执行该存储过程的权限;但是将检查 Mary 是否对被引用表具有权限。在此应用场景中,即使 Scott 并不直接对该表具有 SELECT 权限,他也可以通过该过程来访问数据,因为该过程是在 Marry 的上下文中运行的,而 Marry 具有访问该表中数据的权限。
Revert
Execute as login='scott'
go
declare @firstname varchar(50)
set @firstname='Dean'
exec  marryschema.AccessAuthors @firstname
go。
本文作者:宋立桓 来源:http://www.winmag.com.cn/forum/
CIO之家 www.ciozj.com 微信公众号:imciow
    >>频道首页  >>网站首页   纠错  >>投诉
版权声明:CIO之家尊重行业规范,每篇文章都注明有明确的作者和来源;CIO之家的原创文章,请转载时务必注明文章作者和来源;
延伸阅读
也许感兴趣的
我们推荐的
主题最新
看看其它的