为了兑现卡宴LS我们需求预备上面多个地点【澳门太陽城集团登录网址】

背景

假使我们有着重数据存款和储蓄在四个表里面,举例人口表中蕴含职员和工人、部门和报酬音信。只同意用户访谈各自部门的音讯,但是无法访谈别的机构。一般大家都以在先后端达成那几个功效,而在sqlserver二零一四以往也能够平素在数据库端完结这几个职能。

解决

有惊无险已经是三个数据方面包车型地铁焦点难点,每一代的MS数据库都有关于安全地方的新效率,那么在Sql
Server 2014,也是有相当多那方面包车型大巴提高,举例‘Row Level Security’, ‘Always
Encrypted’, ‘Dynamic Data Masking’, 和‘Enhancement of Transparent Data
Encryption’ 等等都会起到安全方面包车型地铁效率。本篇小编将介绍有关Row Level
Security (WranglerLS–行等第安全), 能够调节表中央银行的拜候权限。CRUISERLS
能使大家依据实行查询人的属性来调控基础数据,进而援救大家轻便地为分裂用户提透明的访谈数据。行级安全性使客户能够基于实施查询的用户的风味决定数据库中的行。

为了落到实处OdysseyLS大家须求预备上面多个地方:

  1. 谓词函数
  2. 有惊无险谓词
  3. 安全攻略

逐个描述方面四个地点

谓词函数

谓词函数是三个放权的表值函数,用于检查用户试行的询问访谈数据是不是基于其论理定义。那一个函数再次来到二个1来代表用户能够访问。

安然谓词

安全谓词便是将谓词函数绑定到表里面,路虎极光LS提供了二种安全谓词:过滤谓词和阻挠谓词。过滤谓词就是在采取SELECT,
UPDATE, 和
DELETE语句询问数据时只是过滤数据只是不会报错。而阻止谓词正是在行使违反谓词逻辑的多少时,呈现地报错何况阻止用户使用
AFTE福特Explorer INSERT, AFTEPRADO UPDATE, BEFORE UPDATE, BEFORE DELETE 等操作。

安全攻略

安全计谋对象特别为行等第安全创制,分组所有关乎谓词函数的长治谓词。

实例

实例中我们创制二个Person表和测验数据,最后大家让不领悟用户访谈各自部门的新闻,代码如下:

Create table dbo.Person

(

PersonId INT IDENTITY(1,1),

PersonName varchar(100),

Department varchar(100),

Salary INT,

User_Access varchar(50)

)

GO

INSERT INTO Person (PersonName, Department, Salary, User_Access)

SELECT 'Ankit', 'CS', 40000, 'User_CS'

UNION ALL

SELECT 'Sachin', 'EC', 20000, 'User_EC'

UNION ALL

SELECT 'Kapil', 'CS', 30000, 'User_CS'

UNION ALL

SELECT 'Ishant', 'IT', 50000, 'User_IT'

UNION ALL

SELECT 'Aditya', 'EC', 45000, 'User_EC'

UNION ALL

SELECT 'Sunny', 'IT', 60000, 'User_IT'

UNION ALL

SELECT 'Rohit', 'CS', 55000, 'User_CS'

GO

 

 

此时表已经被创建,况且插入了测验数据,推行下边语句检索有是部分记录:

SELECT * FROM Person

澳门太陽城集团登录网址 1

正如所示,近些日子有四个部门department(CS,EC,IT),並且User_Access列表示各自的用户组。让我们创设七个测验用户数据的账户语句如下:

--For CS department

CREATE USER User_CS WITHOUT LOGIN

--For EC department

CREATE USER User_EC WITHOUT LOGIN

-- For IT Department

CREATE USER User_IT WITHOUT LOGIN

 

在开创了用户组以往,授权读取权限给地点是哪些新建的用户,施行语句如下:

---授予select权限给所有的用户

GRANT SELECT ON Person TO User_CS

GRANT SELECT ON Person TO User_EC

GRANT SELECT ON Person TO User_IT

为了兑现卡宴LS我们需求预备上面多个地点【澳门太陽城集团登录网址】。 

当今我们创立多个谓词函数,该函数是对此查询用户是不可知的。

----Create function

CREATE FUNCTION dbo.PersonPredicate

( @User_Access AS varchar(50) )

RETURNS TABLE

WITH SCHEMABINDING

AS

RETURN SELECT 1 AS AccessRight

WHERE @User_Access = USER_NAME()

GO

 

 

以此函数是只回去行,假若正在实践查询的用户的名字与User_Access
列相称,那么用户同意访问钦定的行。在创建该函数后,还要求成立一个安全计策,使用方面包车型客车谓词函数PersonPredicate来对表实行过滤逻辑的绑定,脚本如下:

--安全策略

CREATE SECURITY POLICY PersonSecurityPolicy

ADD FILTER PREDICATE dbo.PersonPredicate(User_Access) ON dbo.Person

WITH (STATE = ON)

 

为了兑现卡宴LS我们需求预备上面多个地点【澳门太陽城集团登录网址】。 

State(状态)为ON技巧是政策生效,假如准备关闭战略,你能够变动状态为OFF。

再来看一下询问结果:

澳门太陽城集团登录网址 2

这一次询问未有回来任何行,那意味着谓词函数的定义和宗旨的创制后,用户查询供给具备相应权限技术重回行,接下去使用不一样用户来询问那些数目,首先,大家用用户User_CS来查询一下结出:

EXECUTE AS USER = 'User_CS'

SELECT * FROM dbo.Person

REVERT

 

澳门太陽城集团登录网址 3

 

为了兑现卡宴LS我们需求预备上面多个地点【澳门太陽城集团登录网址】。正如所示,大家看看只有三行数据数据该用户,User_CS,已经搜求出来。因而,过滤函数将其余不属于该用户组的多少过滤了。

骨子里这一个查询实行的进程正是数据库内部调用谓词函数,如下所示:

SELECT * FROM dbo.Person

WHERE User_Name() = ‘User_CS’

任何两组用户的查询结果是形似的此处就不一一演示了。

为了兑现卡宴LS我们需求预备上面多个地点【澳门太陽城集团登录网址】。故此,我们能见到实行查询依据用的例外获得只属于钦赐用户组的钦命数量。那正是我们要到达的指标。

到如今截至,大家已经演示了过滤谓词,接下去大家演示一下怎么堵住谓词。实施如下语句来授权DML操作权限给用户。

--授权DML 权限

GRANT INSERT, UPDATE, DELETE ON Dbo.Person TO User_CS

GRANT INSERT, UPDATE, DELETE ON Dbo.Person TO User_EC

GRANT INSERT, UPDATE, DELETE ON Dbo.Person TO User_IT

为了兑现卡宴LS我们需求预备上面多个地点【澳门太陽城集团登录网址】。 

大家用用户User_IT实践插入语句,并且插入用户组为UserCS的,语句如下:

EXECUTE AS USER = 'User_IT'

INSERT INTO Person (PersonName, Department, Salary, User_Access)

SELECT 'Soniya', 'CS', 35000, 'User_CS'

REVERT

 

but,竟然未有报错,插入成功了。

让大家在检查一下用户数据插入的图景:

EXECUTE AS USER = 'User_IT'

SELECT * FROM dbo.Person

REVERT

 

出人意料,新插入行并从未加塞儿到该用户组’User_IT’中。而是出现在了‘User_CS’
的用户组数据中。

--插入数据出现在了不同的用户组

EXECUTE AS USER = 'User_CS'

SELECT * FROM dbo.Person

REVERT

 

澳门太陽城集团登录网址 4

经过地点的事例大家开掘,过滤谓词不不会阻碍用户插入数据,因而尚未不当,那是因为从没在安全计策中定义阻止谓词。让大家参预阻止谓词来显示报错,有多个阻止谓词AFTE索罗德INSERT, AFTE奔驰M级 UPDATE, BEFORE UPDATE, 和 BEFORE
DELETE能够利用。我们这里测量检验使用AFTELacrosse INSERT
谓词。这几个谓词阻止用户插入记录到未有权力查看的多少用户组。

增加谓词阻止的安全计策,代码如下:

--添加阻止谓词

ALTER SECURITY POLICY PersonSecurityPolicy

ADD BLOCK PREDICATE dbo.PersonPredicate(User_Access)

ON dbo.Person AFTER INSERT

 

明天我们用事先类似代码再试一下,是不是能够插入数据:

EXECUTE AS USER = 'User_CS'

INSERT INTO Person (PersonName, Department, Salary, User_Access)

SELECT 'Sumit', 'IT', 35000, 'User_IT'

REVERT

 

澳门太陽城集团登录网址 5

* *

擦,果然此番错误出提醒出现了,阻止了差异权限用户的插入。由此大家能说通过足够阻止谓词,未授权用户的DML操作被限定了。

只顾:在例子中各类机关只有三个用户结成。要是在多个机构包括八个用户的景色下,大家必要创建分支登陆为每一个用户都分配要求的权限,因为谓词函数应用于用户基础还要安全战术取决于谓词函数。

 

行等第安全的界定

这边有几个行等第安全的限定:

  1. 谓词函数供给求满含WITH
    SCHEMABINDING关键词,就算函数未有该重大字则绑定安全战略时会抛出特别。
  2. 在进行了行等级安全的表上无法创设索引视图。
  3. 内存数据表不辅助
  4. 全文索引不补助

总结

含蓄行等级安全成效的SQLServer二〇一六,我们能够不通过应用程序等第的代码修改来达成数据记录的权杖调整。行等第安全通过动用谓词函数和安全计谋完毕,无需修改各样DML代码,伴随着水保代码就能够完成。

You may also like...

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图