用户可以模拟其他用户或登陆的权限来执行查询,并且在查看用户和登录的权限时,结果会受到模拟上下文的影响。当执行EXECUTE AS命令时,原始用户的安全上下文会进行切换,除了ORIGINAL_LOGIN之外,其他函数都会返回模拟上下文的Login和User信息。

一,指定Session的安全上下文

默认情况下,一个会话在用户登陆时开始,在用户退出时结束,用户的权限决定了用户的操作。当用户使用EXECUTE AS 命令时,当前用户的权限切换到制定的用户或登陆的安全上下文,以模拟对象的权限来执行操作。EXECUTE AS 命令用于设置会话的执行上下文:

{ EXEC | EXECUTE } AS { LOGIN | USER } = 'domain\name' | CALLER
...
REVERT;

把执行上下文切换到指定的Login 或User,参数CALLER 只用于模块内部,以模块调用者的安全上下文来执行。

要结束权限模拟,可以执行命令 REVERT,该命令用于恢复当前用户的原始执行上下文。

当执行EXECUTE AS 命令之后,用户的安全上下文会被切换为指定的用户。ORIGINAL_LOGIN() 返回最原始的Login名称,不受上下文切换的影响:

ORIGINAL_LOGIN( ) 

其他返回用户和Login的函数,都是基于当前上下文的。比如,SESSION_USER返回当前安全上下文的用户名称,如果该函数在EXECUTE AS 命令之后被调用,那么上下文被切换,SESSION_USER返回模拟上下文的用户名称:

SESSION_USER 

二,指定模块的安全上下文

在SQL Server中,你可以定义用户定义模块(内联表值函数、存储过程、queue和触发器)的执行上下文。默认值是CALLER,也就是说,使用模块调用者的安全上下文来执行:

WITH EXECUTE AS { CALLER | SELF | OWNER | 'user_name' }  

参数注释

  • CALLER:以模块调用者的安全上下文来执行,模块的调用者不仅要有调用模块的权限,还要有访问被模块引用的对象的权限。
  • SELF:指定以模块的创建者或修改者的安全上下文来执行
  • OWNER:以模块的所有者(Owner)的安全上下文来执行,如果没有指定对象的Owner,那么以Schema的Owner来执行。

数据库对象的Owner可以通过命令ALTER AUTHORIZATION来修改,常见的class_type是:OBJECT、ROLE、SCHEMA :

ALTER AUTHORIZATION
ON [ <class_type>:: ] entity_name
TO { principal_name | SCHEMA OWNER }

通过指定模块的执行上下文,你可以控制数据库引擎使用哪个用户的安全上下文来验证被模块引用的对象的权限。也就是说,通过使用模块的EXECUTE AS 子句,可以指定以特定的用户来验证数据库对象的权限,而不仅仅是使用模块的调用者。

可以把执行用户定义的模块的权限分为两部分:执行模块和访问被模块引用的对象,一个用户可以只授予执行模块的权限,而不需授予操作被模块引用的对象的权限。对于这种情况,模块的EXECUTE AS 子句必须指定一个用户,该用户有权限访问被模块引用的对象。

对于模块的EXECUTE AS 设置,可以通过 sys.sql_modules 或 sys.service_queues的 execute_as_principal_id来查看,该字段有三种类型的值:

  • NULL: 默认设置,EXECUTE AS CALLER
  • -2:EXECUTE AS OWNER
  • ID 值:特定的Database Principal ID

对于模块的调用者而言,其必须有调用(EXECUTE)模块的权限。当指定特定的模拟用户时,当前用户必须有模拟的权限。

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'CompanyDomain\SqlUser1'

参考文档:

EXECUTE AS Clause (Transact-SQL)

EXECUTE AS (Transact-SQL)

Security8:权限模拟的更多相关文章

  1. Security10:授予访问Object的权限

    1,将访问Object的权限授予Database Role 或 User 的语法如下 GRANT <permission> [ ,...n ] ON [ OBJECT :: ][ sche ...

  2. 域渗透之通过DCSync获取权限并制作黄金票据

    环境背景 账号: admin 没有域管权限 admin02 有域管权限 administrator 有域管权限 模拟渗透过程: 利用任意方法已经登录到client1(Windows 7),在clien ...

  3. Security5:授予权限

    SQL Server授予用户访问对象的权限,通常的模式是:Grants permissions on a securable to a principal(user or login),也就是说,授予 ...

  4. SpringAOP01 利用AOP实现权限验证、利用权限验证服务实现权限验证

    1 编程范式 1.1 面向过程 1.2 面向对象 1.3 面向切面编程 1.4 函数式编程 1.5 事件驱动编程 2 什么是面向切面编程 2.1 是一种编程范式,而不是一种编程语言 2.2 解决一些特 ...

  5. Linux系统文件和目录的属性及权限

    1 文件属性概述 Linux系统中的文件或目录的属性主要包括:索引节点(inode).文件类型.权限属性.硬链接数.所归属的用户和用户组.最近修改时间等内容(文件名严格来说不属于文件的属性): 下面是 ...

  6. 10.17 linux 文件权限

    文件权限模拟练习 [root@wen ~]# groupadd incahome[root@wen ~]# usersdd oldboy -g incahome-bash: usersdd: comm ...

  7. Security Policy:行级安全(Row-Level Security)

    行级安全RLS(Row-Level Security)是在数据行级别上控制用户的访问,控制用户只能访问数据库表的特定数据行.断言是逻辑表达式,在SQL Server 2016中,RLS是基于安全断言( ...

  8. fix orphaned user

    orphan user是某个数据库的user,只有user name而没有login,即,在存在于sys.database_principals 中, 而不存在于 sys.server_princip ...

  9. Index的填充属性:FillFactor 和 PAD_INDEX

    在Create Index时,必须考虑属性FillFactor 和 PAD_INDEX的设置,这两个属性只在create index 或 rebuild index时起作用,表示Index page( ...

随机推荐

  1. Web全栈AngularJS

    百度云盘下载 AngularJS是人类首个大规模使用的MVC框架,能够帮助程序员将绝大部分精力集中在核心业务逻辑上,从而大幅提高开发效率. 阶段2:Controller Controller是Angu ...

  2. [译] React 16.3(.0-alpha) 新特性

    原文地址:What's new in React 16.3(.0-alpha) 原文作者:Bartosz Szczeciński 译文出自:掘金翻译计划 本文永久链接:github.com/xitu/ ...

  3. centos6.5宽带拨号上网

    CentOS6以后要安装rp-pppoe这个软件,centos之前的版本是adsl-setup命令安装. (1)查看是否安装 #rpm -qa|grep rp-pppoe 没有内容输出则没安装,若可以 ...

  4. HR问了我朋友什么是简单工厂模式,竟被质疑是否学过设计模式,是否是计算机专业?

    越是简单的东西,越是容易被忽略,我来带你们好复习一下! 简单工厂模式 简单工厂模式也被称为静态工厂模式;使用简单工厂模式可以将产品的"消费"和生产完全分开,客户端只需要知道自己需要 ...

  5. 2019年2月5日训练日记关于int字节数,long int 字节数的讨论

    今天做到了个非常有意思的题目,是关于int最大最小值.用sizeof(int)查寻,返回四个字节,4个字节计算应该是4*8=32位,其中一位为符号位,且最高为不能为2所以应该减一,2^31-1=214 ...

  6. 数学--数论--HDU1792A New Change Problem(GCD规律推导)

    A New Change Problem Problem Description Now given two kinds of coins A and B,which satisfy that GCD ...

  7. 2019.06.18训练日记(赞FLS)

    之前打了几场比赛,有很多题没做出来,这些题无论是知识点不会,还是说在当时时间和思路的影响下没有做出来,这都应该做出来,至少现在必须做出来,本来打算专心复习,分数高了,好保研,但是想了想如果局限于只把学 ...

  8. P2290 [HNOI2004]树的计数(bzoj1211)

    洛谷P2290 [HNOI2004]树的计数 bzoj1211 [HNOI2004]树的计数 Description 一个有\(n\)个结点的树,设它的结点分别为\(v_1,v_2,\cdots, v ...

  9. 【WPF学习】第六十八章 自定义绘图元素

    上一章分析了WPF元素的内部工作元素——允许每个元素插入到WPF布局系统的MeasureOverride()和ArrangeOverride()方法中.本章将进一步深入分析和研究元素如何渲染自身. 大 ...

  10. Spring Cloud feign GET请求无法用实体传参的解决方法

    代码如下: @FeignClient(name = "eureka-client", fallbackFactory = FallBack.class, decode404 = t ...