Security8:权限模拟
用户可以模拟其他用户或登陆的权限来执行查询,并且在查看用户和登录的权限时,结果会受到模拟上下文的影响。当执行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)
Security8:权限模拟的更多相关文章
- Security10:授予访问Object的权限
1,将访问Object的权限授予Database Role 或 User 的语法如下 GRANT <permission> [ ,...n ] ON [ OBJECT :: ][ sche ...
- 域渗透之通过DCSync获取权限并制作黄金票据
环境背景 账号: admin 没有域管权限 admin02 有域管权限 administrator 有域管权限 模拟渗透过程: 利用任意方法已经登录到client1(Windows 7),在clien ...
- Security5:授予权限
SQL Server授予用户访问对象的权限,通常的模式是:Grants permissions on a securable to a principal(user or login),也就是说,授予 ...
- SpringAOP01 利用AOP实现权限验证、利用权限验证服务实现权限验证
1 编程范式 1.1 面向过程 1.2 面向对象 1.3 面向切面编程 1.4 函数式编程 1.5 事件驱动编程 2 什么是面向切面编程 2.1 是一种编程范式,而不是一种编程语言 2.2 解决一些特 ...
- Linux系统文件和目录的属性及权限
1 文件属性概述 Linux系统中的文件或目录的属性主要包括:索引节点(inode).文件类型.权限属性.硬链接数.所归属的用户和用户组.最近修改时间等内容(文件名严格来说不属于文件的属性): 下面是 ...
- 10.17 linux 文件权限
文件权限模拟练习 [root@wen ~]# groupadd incahome[root@wen ~]# usersdd oldboy -g incahome-bash: usersdd: comm ...
- Security Policy:行级安全(Row-Level Security)
行级安全RLS(Row-Level Security)是在数据行级别上控制用户的访问,控制用户只能访问数据库表的特定数据行.断言是逻辑表达式,在SQL Server 2016中,RLS是基于安全断言( ...
- fix orphaned user
orphan user是某个数据库的user,只有user name而没有login,即,在存在于sys.database_principals 中, 而不存在于 sys.server_princip ...
- Index的填充属性:FillFactor 和 PAD_INDEX
在Create Index时,必须考虑属性FillFactor 和 PAD_INDEX的设置,这两个属性只在create index 或 rebuild index时起作用,表示Index page( ...
随机推荐
- 移动端上传图片(引入exif-js,图片被压缩为base64)
<template> <div class="vue-box"> <img :src="imgUrl" alt="&qu ...
- spark下dataframe转为rdd格式
dataframe可以实现很多操作,但是存储到本地的时候,只能存 parquest格式 需要存储源格式,需要转换为rdd类型 将dataframe中的每一行都map成有逗号相连的string,就变为了 ...
- 百度云BaaS体系揭秘,突破共识机制、单机计算和串行处理三大瓶颈
区块链作为去中心化的技术机制拥有广泛的应用场景与市场潜能.自2017年爆发式增长后,区块链虽然已经进入平稳期,但仍然存在概念混淆.技术性能制约.智能合约制约.共识机制.网络建设等痛点.为了打破行业壁垒 ...
- 【阅读笔记】Ranking Relevance in Yahoo Search (四 / 完结篇)—— recency-sensitive ranking
7. RECENCY-SENSITIVE RANKING 作用: 为recency-sensitive的query提高排序质量: 对于这类query,用户不仅要相关的还需要最新的信息: 方法:rece ...
- 一个epoll的简单例子
epoll事件机制的触发方式有两种:LT(电平触发)和ET(边沿触发) EPOLLIN事件: 内核中的socket接收缓冲区 为空(低电平) 内核中的socket接受缓冲区 不为空(高电平) EPOL ...
- C语言程序报告五
C程序设计实验报告 姓 名:赖瑾 实验地点:家 实验时间: 2020年4月21日 实验项目:6.3.1练习1 编写由三角形三边求面积的函数 6.3.1练习2 编写求N阶乘的函数 6.3.1练习3 求两 ...
- Kubernetes笔记(二):了解k8s的基本组件与概念
前文 Kubernetes笔记(一):十分钟部署一套K8s环境 介绍了如何快速搭建一个k8s系统.为了继续使用k8s来部署我们的应用,需要先对k8s中的一些基本组件与概念有个了解. Kubernete ...
- 利用vue-cli + vant搭建一个移动端开发模板
本文系原创,转载请附带作者信息.项目地址: https://github.com/momozjm/vant-project.git 前言 在项目开发过程中,一个新的项目需要我们从零开始搭建框架,这个时 ...
- 推荐算法_CIKM-2019-AnalytiCup 冠军源码解读
最近在帮一初创app写推荐系统,顺便学习一波用户兴趣高速检索的冠军算法. 写总结前贴出冠军代码的git地址:https://github.com/ChuanyuXue/CIKM-2019-Analyt ...
- 值得学习的C/C++开源项目 持续更新
值得学习的C语言开源项目 持续更新 文章目录 值得学习的C语言开源项目 持续更新 - 1. Webbench - 2. Tinyhttpd - 3. cJSON - 4. CMockery - 5. ...