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. 如何让一个div居于页面正中间

    如何让一个div居于页面正中间 如何让一个div居于页面中间,我今天说的是让一个div水平居中同时垂直居中,而不是简单的top:50%,left:50%.当然,我们就按一开始的思路写一下:top,le ...

  2. Java 的多态

    1    多态的概念 多态(?) 可以理解为多种状态/多种形态 同一事物,由于条件不同,产生的结果不同   程序中的多态 同一引用类型,使用不同的实例而执行结果不同的. 同:同一个类型,一般指父类. ...

  3. php中die(),exit(),return的区别

    die()停止程序运行,输出内容exit是停止程序运行,不输出内容return是返回值die是遇到错误才停止exit是直接停止,并且不运行后续代码,exit()可以显示内容.return就是纯粹的返回 ...

  4. 安装 VMware Tools

    参考帮助文档 错误#1: tar: vmware-tools-distrib: Cannot mkdir: Read-only file system 解决方法: mkdir /mnt/cdrom m ...

  5. JMeter工具接口性能压力测试分析与优化

    最近公司做的项目,要求对相关接口做性能压力测试,在这里记录一下分析解决过程. 压力测试过程中,如果因为资源使用瓶颈等问题引发最直接性能问题是业务交易响应时间偏大,TPS逐渐降低等.而问题定位分析通常情 ...

  6. Git创建版本库和添加文件

    创建版本库: 首先新建一个目录,然后通过 $ git init命令把这个目录变成Git可管理的仓库,例如: 在"C:\AmyPersonal\AmyGit"路径下新建文件夹Git1 ...

  7. elastic 常用操作

    前缀搜索

  8. Android开发环境搭建步骤-【Android】

    本教程是android开发环境在windows下的安装配置,经本人测试完全正确无误.这个教程是史上最详细的android开发环境搭建教程. 工具/原料 Eclipse 3.7.0.Java Jdk6. ...

  9. ZOJ 2856 Happy Life

    Problem Description Do you know Utopia? It's a perfect world in which everyone leads a happy life. A ...

  10. viewport其实没那么难理解

    在学习移动端布局的时候,你肯定听说过"viewport"这个词,然后去问度娘或谷歌.你会惊奇的发现,这个viewport不简单,居然有那么多兄弟——layout viewport. ...