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

Sql Server 2016新功能之Row-Level Security

什么是Row-Level Security?

在传统的数据库访问安全控制中,只能根据用户的身份和权限来进行安全控制,但是无法对每行数据进行细粒度的控制,也就是无法针对不同用户对同一张表的不同行数据进行控制,这就是传统数据库安全控制所无法解决的问题。而Row-Level Security (RLS),就是在数据库中实现了对每行数据进行细粒度的访问控制的功能。

如何使用Row-Level Security?

1. 创建安全谓词

创建安全谓词需要使用到Sql Server 2016提供的内置函数,例如User_Name()、Session_User()等,语法如下:

CREATE FUNCTION securitypredicate(@SalespersonID AS int)
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS [SecurityFilter]
WHERE @SalespersonID = CONVERT(int, Session_User);

以上安全谓词的意思是只有当Session_User的值等于SalespersonID时,才可以查询到相关数据。在创建安全谓词的时候需要注意以下几点:首先,返回的表只有一列,列名必须为SecurityFilter,并且数据类型必须为bit类型,返回值只能为1或0;其次,安全谓词必须绑定到表上,也就是需要使用WITH SCHEMABINDING选项创建函数;最后,安全谓词必须是不可计算的,也就是不能包含类似SUM()或AVG()等可计算的函数。

2. 创建安全策略

创建安全策略需要使用到Sql Server 2016提供的内置系统存储过程,语法如下:

CREATE SECURITY POLICY SalesForceFilterPolicy  
ADD FILTER PREDICATE dbo.securitypredicate(SalesPersonID)  
ON dbo.Sales  
WITH (STATE=ON);

以上安全策略的意思是针对Sales表创建一个安全策略SalesForceFilterPolicy,在Sales表上添加一个过滤器,此过滤器调用前面创建好的安全谓词dbo.securitypredicate(SalesPersonID),表示只有当该谓词返回值为1时,才可以查询表Sales的数据,适用于所有的DML操作(INSERT、SELECT、UPDATE、DELETE)。上面的Security Policy中,STATE=ON代表启用策略。

3. 测试安全策略

测试安全策略的方法非常简单,只需要在不同的用户下,执行相关的DML操作,就可以验证是否生效,方法如下:

EXECUTE AS USER = 'Alex';  
SELECT * FROM Sales;

在用户Alex下执行查看Sales表的操作,如果该用户的Session_User等于SalesPersonID,且SalesForceFilterPolicy策略启用,则可以看到该用户的数据,否则不能看到数据。

EXECUTE AS USER = 'Betty';  
SELECT * FROM Sales;

在用户Betty下执行查看Sales表的操作,同样必须满足Session_User等于SalesPersonID,并且SalesForceFilterPolicy策略启用,才能看到数据,否则不能看到数据。

通过以上的操作流程,可以实现Row-Level Security的数据访问控制,提高了数据库安全性,可以更好地满足企业的安全需求。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Sql Server 2016新功能之Row-Level Security(值得关注) - Python技术站

(0)
上一篇 2023年5月25日
下一篇 2023年5月25日

相关文章

  • 2021.7最新win10专业版/企业版激活密钥推荐 附激活工具+教程

    2021.7最新win10专业版/企业版激活密钥推荐 附激活工具+教程 本篇文章主要介绍如何激活Win10专业版/企业版,推荐最新的激活密钥,并附上激活工具和详细的教程。请遵循以下步骤进行操作: 步骤1:获取最新的激活密钥 在互联网上搜索“Win10激活密钥”,可以找到大量的激活密钥。但是其中有很多是过期或无效的。建议使用以下最新的激活密钥: Win10专业…

    Azure 2023年5月25日
    00
  • Win10 Build 19044.1202 (21H2)更新补丁KB5005101预览版推送(附更新修复内容汇总)

    Win10 Build 19044.1202 (21H2)更新补丁KB5005101预览版推送攻略 本文将为大家详细介绍Win10 Build 19044.1202 (21H2)更新补丁KB5005101预览版的相关信息,包括更新修复内容汇总、可公测版本下载地址以及更新的注意事项等。 更新修复内容汇总 据官方介绍,Win10 Build 19044.1202…

    Azure 2023年5月26日
    00
  • ASP.NET 5中使用AzureAD实现单点登录

    关于ASP.NET 5中使用Azure AD实现单点登录的完整攻略,请看下面的详细步骤。 1. 创建Azure AD应用 首先需要在Azure门户中创建一个应用程序。 登录Azure门户并转到“Azure Active Directory”。 进入“应用程序注册”部分,创建一个新的应用程序。 配置应用程序的基本信息,例如应用程序名称、重定向URIs和身份验证…

    Azure 2023年5月25日
    00
  • 微软发布Windows Sever 2022:能用10年 不再每年更新

    微软发布Windows Sever 2022:能用10年 不再每年更新 微软官方已经发布了Windows Server 2022,下面是该系统的完整攻略。 什么是Windows Server 2022? Windows Server 2022是微软推出的最新一代服务器操作系统,它将提供常见的服务器功能,包括文件共享、虚拟化、网络管理等,同时也优化了性能、可靠…

    Azure 2023年5月25日
    00
  • 微软 Win11 Dev Build22572发布 增强搜索(附更新修复内容汇总)

    微软 Win11 Dev Build 22572发布 增强搜索 微软最近公布了 Windows 11的内部测试版 Dev Build22572,其中包含了许多新的功能和更新内容。本次更新中,微软特别增强了系统搜索功能,加入了更多的搜索选项和结果过滤方式,使用户可以更快速、更方便地查找到所需的文件、应用程序或设置项。 更新修复内容汇总 在Win11 Dev B…

    Azure 2023年5月26日
    00
  • Win11 22H2 Build 22621.755(KB5018496)预览版发布(附完整更新内容汇总)

    Win11 22H2 Build 22621.755(KB5018496)预览版发布(附完整更新内容汇总) 介绍 本文介绍了 Win11 22H2 Build 22621.755(KB5018496) 预览版的发布。本次发布主要包含细节的改进和 Bug 修复,以及一些新增功能。本文还提供完整的更新内容汇总,用户可以通过本文了解所有更新内容的详细信息。 更新内…

    Azure 2023年5月25日
    00
  • Win10 22H2(19045.2670)更新补丁KB5022906发布(附更新修复内容汇总)

    Win10 22H2(19045.2670)更新补丁KB5022906发布(附更新修复内容汇总)攻略 本文主要介绍Win10 22H2(19045.2670)更新补丁KB5022906的发布及更新修复内容汇总的相关信息。 更新补丁介绍 Win10 22H2(19045.2670)更新补丁KB5022906是微软近期发布的重要更新补丁,该更新主要修复了一些安全…

    Azure 2023年5月25日
    00
  • k8s中如何实现pod自动扩缩容详解

    在Kubernetes中,可以通过Horizontal Pod Autoscaler (HPA) 来实现Pod的自动扩缩容。HPA是一种控制器,可以根据指定的指标,动态地调整Pod的副本数,从而达到自动扩缩容的目的。 实现步骤: 创建一个Deployment或ReplicaSet 首先,需要先创建一个Deployment或ReplicaSet,作为Pod的控…

    Azure 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部