sp_set_session_context存储过程和SESSION_CONTEXT函数出现在了SQL Server 2016 CTP3.0上。它俩配合起来的作用是sp_set_session_context用于设置一个键值作为会话的上下文(最大不超过256kb),而这个上下文的内容可以通过定义好的键名称在会话内任何时候读取。

比如:

EXEC sp_set_session_context 'user_id', 4;
SELECT SESSION_CONTEXT(N'user_id');

这东西到底有什么用呢?

这东西非常有用。我们都知道用户的身份就代表了当前会话的安全上下文,那是基于Windows身份认证的应用程序才是这样的。在大型的项目中,我们不可能为每个用户去新建一个SQL Server Login。那么这东西对于那些通过应用程序中间层的项目来说就非常有用了,因为是应用程序用特定的用户身份连接到SQL Server数据库,每个用户的身份都是相同。那么有了这个sp_set_session_context存储过程和SESSION_CONTEXT函数的出现,我们就可以为每个连接设定好它们自己的安全上下文。比如说每个用户登录账户、密码和类别属性的信息是存储在数据库表中的,那么应用程序获取用户身份登录信息之后用同样的SQL Server Login账户开启连接到SQL Server数据库查询数据,但是为每个用户设定属于他们各自的安全上下文。

---------------- update 2016/02/20 --------------------------------------------------------------

这里有个安全的隐患,就是每个用户都有权限调用sp_set_session_context存储过程设置他们自己的会话安全上下文,这样很容易出现身份盗用。比如我可以设置任何人都可以设置自己是Manager或者CEO。这层的安全控制需要应用程序中间层的配合完成。就像如果SQL Server启用了连接池(Connection Pooling)后需要应用程序每次在开启新会话的时候重新设置SET OPTIONS这些信息一样,也是由应用程序中间层在初始化会话的时候调用sp_set_session_context设置用户的安全上下文。

这里又有另外一个问题,假设我采用中间层应用程序的方法来连接数据库,但是SQL Server Audit中却没有记录会话上下文的信息。SQL Server Audit只告诉我们SQL Server Login和Database User的名称。这里我提交了一个建议给微软,希望可以把会话上下文的信息加入到SQL Server Audit文件中。

https://connect.microsoft.com/SQLServer/feedback/details/2382291

参考:

SESSION_CONTEXT (Transact-SQL)

sp_set_session_context (Transact-SQL)

SQL Server ->> SQL Server 2016新特性之 -- sp_set_session_context存储过程和SESSION_CONTEXT函数的更多相关文章

  1. SQL Server ->> 深入探讨SQL Server 2016新特性之 --- Temporal Table(历史表)

    原文:SQL Server ->> 深入探讨SQL Server 2016新特性之 --- Temporal Table(历史表) 作为SQL Server 2016(CTP3.x)的另一 ...

  2. SQL Server 2016新特性:列存储索引新特性

    SQL Server 2016新特性:列存储索引新特性 行存储表可以有一个可更新的列存储索引,之前非聚集的列存储索引是只读的. 非聚集的列存储索引支持筛选条件. 在内存优化表中可以有一个列存储索引,可 ...

  3. SQL Server 2016新特性:DROP IF EXISTS

    原文:SQL Server 2016新特性:DROP IF EXISTS  在我们写T-SQL要删除某个对象(表.存储过程等)时,一般会习惯先用IF语句判断该对象是否存在,然后DROP,比如: 旧 ...

  4. SQL Server ->> 深入探讨SQL Server 2016新特性之 --- Row-Level Security(行级别安全控制)

    SQL Server 2016 CPT3中包含了一个新特性叫Row Level Security(RLS),允许数据库管理员根据业务需要依据客户端执行脚本的一些特性控制客户端能够访问的数据行,比如,我 ...

  5. Entity Framework 6 Code First新特性:支持存储过程

    Entity Framework 6提供支持存储过程的新特性,本文具体演示Entity Framework 6 Code First的存储过程操作. Code First的插入/修改/删除存储过程 默 ...

  6. SQL Server 2016新特性:Live Query Statistics

    SSMS可以提供可以查看正在执行的计划.live query plan可以查看一个查询的执行过程,从一个查询计划操作到另外一个查询计划操作.live query plan提供了整体的查询运行进度和操作 ...

  7. SQL Server 2016新特性:In-Memory OLTP

    存储格式修改 在2014,2016中修改了内存优化表的存储格式,新的格式是序列的并且the database is restarted once during database recovery.   ...

  8. SQL Server ->> SQL Server 2016新特性之 --- Query Store

    前言 SQL Server 2016引入新的查询语句性能监控.调试和优化工具/功能 -- Query Store.以前我们发现一条查询语句性能突然下降,我们要去找出问题的所在往往需要通过调用一些DMV ...

  9. SQL Server ->> SQL Server 2016新特性之 -- Dynamic Data Masking

    Dynamic Data Masking是为了防止敏感数据暴露给未经授权的用户,以一种最小开销和维护成本的形式.Dynamic Data Masking用于表的字段,相当于盖住字段数据的一部分.比如一 ...

随机推荐

  1. Spring异常:Annotation-specified bean name.. for bean class ...

    Spring重命名问题.对照项目中的注解,查找@Service是否重重名.由于Spring是在注解下按配置扫描的方式去创建对象的,那么两个重名的注解也就不成立了. 备注,特别注意test包下有没有通过 ...

  2. SpringBoot项目中获取applicationContext对象

    ApplicationContext 对象是Spring开源框架的上下文对象实例,也就是我们常说的Spring容器,一般情况下我们是不用手动来管理它,而是由Spring框架自己来维护bean之间的关系 ...

  3. java NIO学前准备

    之前一直对NIO感兴趣,无奈对IO的很多概念很模糊,所以对于NIO的学习也是一直半解,最近在网上查阅了很多资料,发现有很多概念是需要反复理解的,有的时候甚至当时理解了,但一段时间后又忘记了,所以决定自 ...

  4. WCF系列教程之初识WCF

    本随笔参考自WCF编程系列(一)初识WCF,纯属读书笔记,加深记忆. 1.简介:Windows Communication Foundation(WCF)是微软为构建面向服务的应用程序所提供的统一编程 ...

  5. C# 特性(Attribute)之Flag特性

    本文参考自C# 位域[flags],纯属读书笔记,加深记忆 [Flags]的微软解释是“指示可以将枚举作为位域(即一组标志)处理.”其实就是在编写枚举类型时,上面附上Flags特性后,用该枚举变量是既 ...

  6. javascript记住用户名和登录密码

    javascript记住用户名和登录密码 下面主要通过代码给大家展示下javascript记住用户名和登录密码,具体代码内容请看下文. <script type="text/javas ...

  7. 取消文件与svn服务器的关联

    在使用svn项目管理工具的时候,经常遇到这样的情况: 我从svn下载下来了一个版本,后面不在需要和svn进行同步版本管理,但是文件夹的上面总是有一个勾,显示同步状态,强迫症真的受不了. 效果见小图: ...

  8. Error opening zip file or JAR manifest missing的解决方法

    错误描述: MyEclipse中启动Tomcat(debug)的时候就出现Error starting Tomcat : A configuration error occured during st ...

  9. C#中引用类型和值类型的区别,分别有哪些

    C#的值类型包括:结构体(数值类型,bool型,用户定义的结构体),枚举,可空类型. C#的引用类型包括:数组,用户定义的类.接口.委托,object,字符串. 数组的元素,不管是引用类型还是值类型, ...

  10. 五、cent OS防火墙常用命令

    查看防火墙开闭状态systemctl status firewalld 开启防火墙systemctl start firewalld 关闭防火墙systemctl stop firewalld 查看已 ...