SQL Server的行级安全性是什么

发布时间:2023-04-17 10:50:55 作者:iii
来源:亿速云 阅读:129

这篇文章主要介绍了SQL Server的行级安全性是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇SQL Server的行级安全性是什么文章都会有所收获,下面我们一起来看看吧。

一、前言

行级别安全性使您能够使用组成员身份或执行上下文来控制对数据库表中行的访问。

行级别安全性 (RLS) 简化了应用程序中的安全性设计和编码。RLS 可帮助您对数据行访问实施限制。例如,您可以确保工作人员仅访问与其部门相关的数据行。另一个示例是将客户的数据访问限制为仅与其公司相关的数据。

访问限制逻辑位于数据库层中,而不是远离另一个应用程序层中的数据。每次尝试从任何层访问数据时,数据库系统都会应用访问限制。这通过减少安全系统的表面积,使您的安全系统更加可靠和强大。

通过使用创建安全策略 Transact-SQL 语句和作为内联表值函数创建的谓词实现 RLS。

行级别安全性首次引入 SQL Server 2016 (13.x)。

SQL Server的行级安全性是什么

二、描述

RLS 支持两种类型的安全谓词。

对表中行级数据的访问受定义为内联表值函数的安全谓词的限制。然后,安全策略调用和强制执行该函数。对于筛选器谓词,应用程序不知道从结果集中筛选的行。如果筛选了所有行,则将返回空集。对于块谓词,任何违反谓词的操作都将失败并显示错误。

从基表中读取数据时应用筛选器谓词。它们影响所有获取操作:选择、删除和更新。用户无法选择或删除已筛选的行。用户无法更新筛选的行。但是,可以更新行,以便以后对其进行筛选。块谓词会影响所有写入操作。

筛选器和阻止谓词以及安全策略都具有以下行为:

筛选器谓词具有以下行为:

块谓词具有以下行为:

三、权限

创建、更改或删除安全策略需要“更改任何安全策略”权限。创建或删除安全策略需要对架构具有 ALTER 权限。

此外,添加的每个谓词都需要以下权限:

安全策略适用于所有用户,包括数据库中的 dbo 用户。Dbo 用户可以更改或删除安全策略,但可以审核他们对安全策略的更改。如果高特权用户(如 sysadmin 或 db_owner)需要查看所有行以排除故障或验证数据,则必须编写安全策略以允许这样做。

如果使用 创建安全策略,则要查询目标表,用户必须对谓词函数以及谓词函数中使用的任何其他表、视图或函数具有 SELECT 或 EXECUTE 权限。如果使用 (默认值) 创建安全策略,则当用户查询目标表时会绕过这些权限检查。

四、安全说明:侧信道攻击

(1)恶意安全策略管理器。

请务必注意,恶意安全策略管理器具有在敏感列上创建安全策略的足够权限,并有权创建或更改内联表值函数,但可以与对表具有选择权限的其他用户串通,通过恶意创建旨在使用侧通道攻击推断数据的内联表值函数来执行数据泄露。此类攻击需要串通(或授予恶意用户的过多权限),并且可能需要多次迭代修改策略(需要删除谓词的权限以破坏架构绑定)、修改内联表值函数以及在目标表上重复运行 select 语句。我们建议您根据需要限制权限,并监视任何可疑活动。应监视活动,例如不断更改的策略和与行级别安全性相关的内联表值函数。

(2)精心设计的查询。

通过使用利用错误的精心设计的查询,可能会导致信息泄露。

五、跨功能兼容性

六、示例

向数据库进行身份验证的用户的方案。创建三个用户,并创建并填充一个包含六行的表。然后,它为表创建一个内联表值函数和安全策略。然后,该示例演示如何为各种用户筛选 select 语句。

(1)创建三个将演示不同访问功能的用户帐户。

CREATE USER Manager WITHOUT LOGIN;
CREATE USER SalesRep1 WITHOUT LOGIN;
CREATE USER SalesRep2 WITHOUT LOGIN;
GO

(2)创建一个表来保存数据。

CREATE SCHEMA Sales
GO
CREATE TABLE Sales.Orders
    (
    OrderID int,
    SalesRep nvarchar(50),
    Product nvarchar(50),
    Quantity smallint
    );

(3)用六行数据填充表,显示每个销售代表的三个订单。

INSERT INTO Sales.Orders  VALUES (1, 'SalesRep1', 'Valve', 5);
INSERT INTO Sales.Orders  VALUES (2, 'SalesRep1', 'Wheel', 2);
INSERT INTO Sales.Orders  VALUES (3, 'SalesRep1', 'Valve', 4);
INSERT INTO Sales.Orders  VALUES (4, 'SalesRep2', 'Bracket', 2);
INSERT INTO Sales.Orders  VALUES (5, 'SalesRep2', 'Wheel', 5);
INSERT INTO Sales.Orders  VALUES (6, 'SalesRep2', 'Seat', 5);
-- View the 6 rows in the table
SELECT * FROM Sales.Orders;

(4)向每个用户授予对表的读取访问权限。

GRANT SELECT ON Sales.Orders TO Manager;
GRANT SELECT ON Sales.Orders TO SalesRep1;
GRANT SELECT ON Sales.Orders TO SalesRep2;
GO

(5)创建新架构和内联表值函数。当列中的行与执行查询的用户 相同或执行查询的用户是经理用户时,该函数返回。此用户定义的表值函数示例可用于用作下一步中创建的安全策略的筛选器。

CREATE SCHEMA Security;
GO
  
CREATE FUNCTION Security.tvf_securitypredicate(@SalesRep AS nvarchar(50))
    RETURNS TABLE
WITH SCHEMABINDING
AS
    RETURN SELECT 1 AS tvf_securitypredicate_result
WHERE @SalesRep = USER_NAME() OR USER_NAME() = 'Manager';
GO

(6)创建将函数添加为筛选器谓词的安全策略。必须将状态设置为ON才能启用策略。

CREATE SECURITY POLICY SalesFilter
ADD FILTER PREDICATE Security.tvf_securitypredicate(SalesRep)
ON Sales.Orders
WITH (STATE = ON);
GO

(7)允许对函数的 SELECT 权限。

GRANT SELECT ON Security.tvf_securitypredicate TO Manager;
GRANT SELECT ON Security.tvf_securitypredicate TO SalesRep1;
GRANT SELECT ON Security.tvf_securitypredicate TO SalesRep2;

(8)更改安全策略以禁用该策略。

ALTER SECURITY POLICY SalesFilter
WITH (STATE = OFF);

(9)连接到 SQL 数据库清理练习资源。

DROP USER SalesRep1;
DROP USER SalesRep2;
DROP USER Manager;

DROP SECURITY POLICY SalesFilter;
DROP TABLE Sales.Orders;
DROP FUNCTION Security.tvf_securitypredicate;
DROP SCHEMA Security;
DROP SCHEMA Sales;

关于“SQL Server的行级安全性是什么”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“SQL Server的行级安全性是什么”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

推荐阅读:
  1. sql server如何转换mysql
  2. 如何分析SQL Server 数据库的设计

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

sql server

上一篇:React onBlur回调中怎么使用document.activeElement返回body

下一篇:怎么掌握React组件树遍历技巧

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》