欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-24 20:10:18
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

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

这是全部表的数据的截图

然后添加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; 

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

效果就是这样,当然如果是要设置不同的过滤条件,设置不同的字段的时候,是可以通过上文的函数里面的代码和安全策略进行设置的。按照这个过滤情况,如果登录用户非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(值得关注),希望对大家有所帮助