Sql Server 2016新功能之Row-Level Security(值得关注)

 更新时间:2016年11月07日 16:21:28   作者:神崎橙  
Sql Server 2016 有一个新功能叫 Row-Level Security 。下面通过实例给大家介绍Sql Server 2016新功能之Row-Level Security,感兴趣的朋友一起看看吧

Sql Server 2016 有一个新功能叫 Row-Level Security ,大概意思是行版本的安全策略(原来我是个英语渣_(:з」∠)_)

直接上例子。这个功能相当通过对表添加一个函数作为过滤规则,使得拥有不同条件的用户(或者登录名) 之类的,只能获取到符合条件的数据。相对来说是提供了那么一点的便捷性,当然也增加了数据的安全性,相当于每个用户连接进来只能看到

符合规则的数据(当然,这里的用户只是一个举例。其实是可以通过编写过滤函数来实现的)

举个例子

有三个用户 Sales1 ,Sales 2 ,Manager 3个数据库用户,然后用一个Sales的表来寄存他们的订单记录

CREATE TABLE Sales 
( 
OrderID int, 
SalesRep sysname, 
Product varchar(10), 
Qty int 
); 
INSERT Sales VALUES 
(1, 'Sales1', 'Valve', 5), 
(2, 'Sales1', 'Wheel', 2), 
(3, 'Sales1', 'Valve', 4), 
(4, 'Sales2', 'Bracket', 2), 
(5, 'Sales2', 'Wheel', 5), 
(6, 'Sales2', 'Seat', 5); 
-- View the 6 rows in the table 
SELECT * FROM Sales; 
go

这是全部表的数据的截图

然后添加3个用户,分别就是Sales1 Sales2 Manager 3个用户,分别对他们的赋予Sales表的查询和删除(用于测试删除功能) 的权限。

CREATE USER Manager WITHOUT LOGIN; 
CREATE USER Sales1 WITHOUT LOGIN; 
CREATE USER Sales2 WITHOUT LOGIN;
GRANT SELECT,delete ON Sales TO Manager; 
GRANT SELECT,delete ON Sales TO Sales1; 
GRANT SELECT,delete ON Sales TO Sales2; 

然后以下是这个功能的核心部分。首先我们创建一个过滤函数,然后将这个过滤函数添加到这个表的安全策略里面,就可以看到效果了。

函数逻辑很简单,传入一个@SalesRep 的名称,用于匹配当前的 User_Name。匹配了才返回数据

然后下面一行是创建了一个安全策略,并且在Sales 的表里面使用函数 fn_securitypredicate 作为表的筛选器。传入函数的参数选定为 SalesRep 字段(也就是我们建表的那个销售代表字段了)

CREATE FUNCTION fn_securitypredicate(@SalesRep AS sysname) 
RETURNS TABLE 
WITH SCHEMABINDING 
AS 
RETURN SELECT 1 AS fn_securitypredicate_result 
WHERE @SalesRep = USER_NAME() OR USER_NAME() = 'Manager'; 
CREATE SECURITY POLICY SalesFilter 
ADD FILTER PREDICATE dbo.fn_securitypredicate(SalesRep) 
ON dbo.Sales 
WITH (STATE = ON); 

然后我们看下查询的结果

EXECUTE AS USER = 'Sales1'; 
SELECT * FROM Sales; 
REVERT; 
EXECUTE AS USER = 'Sales2'; 
SELECT * FROM Sales; 
REVERT; 
EXECUTE AS USER = 'Manager'; 
SELECT * FROM Sales; 
REVERT; 

效果就是这样,当然如果是要设置不同的过滤条件,设置不同的字段的时候,是可以通过上文的函数里面的代码和安全策略进行设置的。按照这个过滤情况,如果登录用户非Sales1 Sales2 Manager 3个其中之一,是什么都查询不了的。

另外,用户无法删除被过滤的数据。比方说 Sales1 不能删除或修改OrderID = 3 的数据。

RLS的出现也是能帮助我们减轻一定功能上面的实现的~

PS:下面看下SQL Server 2016新功能特性

1、PolyBase:更简单高效的管理关系型和非关系型的T-SQL数据;

2、AlwaysOn增强功能:实现高可用和性能次之,包括高达3个同步复制、DTC支持和次级的Round-Robin负载均衡;

3、Row Level Security(层级安全性控管):让客户基于用户特征控制数据访问,功能已内置至数据中,无须再修改应用;

4、Dynamic Data Masking(动态数据屏蔽):有助于保护未被加密的数据;

5、原生JSON支持:实现轻松解析和存储,以及输出关系型数据;

6、Temporal数据库支持:可跟踪历史数据变化;

7、数据历史记录查询,以便DBA可精确定位;

8、MDS增强功:提供主数据服务器的服务器管理能力;

9、增强的Azure混合备份功能:在Azure虚拟机中可实现更快的备份和恢复。

重要改进:

1、始终加密(Always Encrypted)

数据的存储和使用都将采用由微软研究院所开发的技术进行加密;

2、弹性数据库(Stretch Database)

SQL Server用户将能够把数据动态延伸至Microsoft Azure,以便增强其性能;

3、实时业务分析与内存中联机事务处理(Real-time Operational Analytics & In-Memory OLTP)

该分析技术于2014年首次引入,现在已变得更加先进(更高的实时性能);

4、内置高级分析(Built-in Advanced Analytics)、PolyBase和Mobile BI

在SQL Server 2016上,数据分析和PolyBase等技术会更易使用。此外,Mobile BI将被用于移动设备上的图形展示。

以上所述是小编给大家介绍的Sql Server 2016新功能之Row-Level Security(值得关注),希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

相关文章

  • Sql Server的一些知识点定义总结

    Sql Server的一些知识点定义总结

    这篇文章主要给大家总结介绍了关于Sql Server的一些知识点定义文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • SQL Server降权运行 SQL Server 2000以GUESTS权限运行设置方法

    SQL Server降权运行 SQL Server 2000以GUESTS权限运行设置方法

    由于sql注入问题比较常见,很多黑客都是通过sqlserver数据库漏洞直接获取系统权限,所以sqlserver的安全设置尤为重要,简单简单分享下sqlserver低权限运行方法
    2014-07-07
  • SQL Server通过重建方式还原master数据库

    SQL Server通过重建方式还原master数据库

    这篇文章主要为大家详细介绍了SQL Server通过重建方式还原master数据库的相关资料,需要的朋友可以参考下
    2016-09-09
  • SqlServer生成连续数字根据指定的数字操作

    SqlServer生成连续数字根据指定的数字操作

    这篇文章主要介绍了SqlServer生成连续数字根据指定的数字操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-10-10
  • 详解partition by和group by对比

    详解partition by和group by对比

    这篇文章主要介绍了详解partition by和group by对比,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • SQL SERVER日志进行收缩的图文教程

    SQL SERVER日志进行收缩的图文教程

    这篇文章主要给大家介绍了关于SQL SERVER日志进行收缩的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者使用SQL SERVER具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2019-10-10
  • 如何创建支持FILESTREAM的数据库示例探讨

    如何创建支持FILESTREAM的数据库示例探讨

    FILESTREAM使用一种特殊类型的文件组,因此在创建数据库时,必须至少为一个文件组指定 CONTAINS FILESTREAM 子句接下来为你详细介绍下如何创建支持 FILESTREAM 的数据库
    2013-03-03
  • having的用法以及与where区别介绍

    having的用法以及与where区别介绍

    having子句可以让我们筛选成组后的各种数据,having子句在查询过程中慢于聚合语句,接下来通过实例介绍下,感兴趣的你可以参考下,希望可以帮助到你
    2013-03-03
  • 在SQL中使用convert函数进行日期的查询的代码

    在SQL中使用convert函数进行日期的查询的代码

    在SQL中使用convert函数进行日期的查询的代码...
    2007-08-08
  • SQL Server日志恢复还原数据的操作流程

    SQL Server日志恢复还原数据的操作流程

    有时开发过程中由于不小心或者程序出现错误导致错误删除数据,或者由于计算机以外引起数据遭到破坏,这时候可以采用日志进行恢复,所以本文给大家介绍了SQL Server日志恢复还原数据的操作流程,需要的朋友可以参考下
    2024-09-09

最新评论