关于SQL Server 存储过程的EXECUTE AS CALLER选项

本文介绍了SQL Server 2005及以后版本中的用户-架构分离和执行上下文切换特性,特别是EXECUTE AS CALLER选项在存储过程中的作用。通过一个实验展示了当存储过程和表在同一schema下时,所有权链导致的权限检查被跳过,以及如何通过改变schema来确保权限检查生效。
摘要由CSDN通过智能技术生成

与SQL 2005之前的版本相比,2005及之后的版本对数据库对象的管理及查询的执行上下文行为做了两个重要的改变:

    1. 用户-架构(User-Schema)分离。即用户不再作为数据库对象的直接拥有者(owner),而是在数据库对象和用户之前加了一层schema。Schema即数据库对象的集合,用户可以拥有多个schema,每个用户有一个default schema。

    2. 执行查询的时候可以切换用户上下文。这包括在批处理中通过EXECUTE AS语句直接切换上下文,以及另一个更常见的用法:在创建存储过程或其它模块时指定用户执行的上下文(WITH EXECUTE AS)。

 

关于第二点,有一个有意思的实验:

    1. 创建一个测试数据库及表:

    CREATE DATABASE mydb
    go
    USE mydb
    go
    create table dbo.tbl_TestPer(ID INT, name sysname)

    go

    INSERT INTO tbl_TestPer SELECT 1, 'Iori'

    2. 创建如下存储过程:

    CREATE PROC [dbo].[sp_TestPer1]
    WITH EXECUTE AS CALLER   

    AS
    BEGIN
      SELECT SYSTEM_USER, CURRENT_USER
      SELECT * FROM dbo.tbl_TestPer
    END

    3. 创建一个测试用户并修改其权限࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值