微软已经在Azure SQL数据库推出了预览版行级安全性(RLS)。行级安全性使客户能够根据执行查询的用户特征(用户组成员属性或执行环境)对数据库表启用访问控制。 本文将介绍如何实现RLS。这个简单的示例扩展了微软RLS在线文档。
这个例子可以帮助用户理解它的基本概念。更详细信息请参见微软开发者网络网站中关于创建安全策略的文档。 首先,我们将在Azure SQL数据库中创建一些表,并且添加一些数据。我们将创建一个“Order”(订单)表和“Mapper”(映射器)表(如图1所示)。
Mapper表的作用是将特定类型的订单与特定的用户相关联。 图1:Order(订单)与Mapper(映射器)表 接下……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
微软已经在Azure SQL数据库推出了预览版行级安全性(RLS)。行级安全性使客户能够根据执行查询的用户特征(用户组成员属性或执行环境)对数据库表启用访问控制。
本文将介绍如何实现RLS。这个简单的示例扩展了微软RLS在线文档。这个例子可以帮助用户理解它的基本概念。更详细信息请参见微软开发者网络网站中关于创建安全策略的文档。
首先,我们将在Azure SQL数据库中创建一些表,并且添加一些数据。我们将创建一个“Order”(订单)表和“Mapper”(映射器)表(如图1所示)。Mapper表的作用是将特定类型的订单与特定的用户相关联。
图1:Order(订单)与Mapper(映射器)表
接下来,我们将创建几个用户,然后给他们分配读取这些表的访问权限(如图2所示)。
图2:给用户分配表的访问权限
我们将在一个单独的模式中创建一个内联表赋值函数(如图3所示)。如果表中附加的安全字段(这里是“User”)与规定的USER_NAME相同,或者USER_NAME为特定的用户名“Manager”,那么这个函数将返回“True”。注意,我们定义了一个泛型条件,它没有引用一个具体的表。
图3:内联表赋值函数
接下来,我们将新建一条安全策略,它使用前面创建的函数,并且将这个过滤器添加到Mapper表上(如图4所示)。命令中的“STATE = ON”的作用就是启用这个安全策略。在这段代码中,这个策略将应用于一个指定的表上。如果有多个表(这里使用了“User”字段)使用了相同的过滤条件,那么它们都会受到同一个策略影响。最好的做法是将函数和策略保存在不同的模式中,一是为了组织方便的考虑,二是限制用户在安全环境中所能看到的数据。
图4:创建一条安全策略
我们来测试一下。(如图5所示)。
图5:运行这个安全策略
现在,我们禁用这个安全策略。这实际上会禁用这个表的RLS。第一个SELECT *语句将会返回所有行,因为这时策略已经禁用。再执行第二个语句只会返回头信息(如图6所示)。
图6:禁用安全策略
在我们创建的Order表中,可以增加一个User字段,但是我们想利用Mapper表中已有的数据。所以,如果联合这两个表,那么结果就是经过过滤的(如图7所示)。另外,还可以尝试查询“Sales2”和“Manager”。
图7:联合Order和Mapper表
这种方法的主要问题是,它要求修改应用程序代码才能保证将Order表与Mapper表联合。如果不联合Order和Mapper表,我们就不能使用RLS。为了避免这个问题,下一步就是添加一个视图,从Order和Mapper表中选择一些行(如图8所示)。
图8:添加一个视图
我们现在可以使用一个视图来替代RLS的表格(如图9所示)。它同样适用于Sales2和Manager用户。
图9:使用一个视图
在启用RLS的过程中,与联合Mapper表相比,使用视图在编码上会更自然一些。然而,使用视图替代表的一般做法也同样适用。
在这一点上,显然RLS仍然需要很多的工作。当然,这种实现需要一定的工作;然而,上面介绍的视图方法很可能是我们应该考虑的首选方法。微软的RLS实现还提供了另一个更高效的方法。
接下来,我们将基于“辅助”表来建立安全性(如图10所示)。这时,辅助表就是Mapper表。我们要根据这个表来创建一个安全函数。
图10:使用Mapper表来创建安全性
然后,我们通过策略来将这个安全函数应用到Order表中(如图11所示)。
图11:将一个安全函数应用到Order表上
在实现RLS及相应的安全函数和策略之后,我们就可以在不需要视图的前提下查询Order表。换而言之,即使不直接联合Order表和Mapper表,我们仍然能够使用RLS安全性。
图12:在不使用视图的前提下查询Order表
翻译
TechTarget中国特约技术编辑,某高校计算机科学专业教师和网络实验室负责人,曾任职某网络国际厂商,关注数据中心、开发运维、数据库及软件开发技术。有多本关于思科数据中心和虚拟化技术的译著,如《思科绿色数据中心建设与管理》和《基于IP的能源管理》等。
相关推荐
-
不安全的Firebase数据库使关键数据面临风险
当开发人员无法对支持其移动应用程序的数据库或云实例执行身份验证时,这里会发生一种最简单且最具破坏性的安全事件。 […]
-
SQL Server 2017将Python视为首选分析工具
Python不再被微软数据库排除在外。SQL Server 2017发布的第二个预览版本,支持使用Python编程语言与R语音用于分析。
-
数据库工程师2015年9月刊:微软数据库的新时代
当我们刚刚熟悉SQL Server 2014新功能的时候,微软下一代旗舰级数据库平台SQL Server 2016正缓步向我们走来。
-
数据库产品巡礼:微软SQL Server 2014概述
Windows下的Microsoft SQL Server 2014可以用来构建,部署以及管理本地和云应用程序。