我的编程空间,编程开发者的网络收藏夹
学习永远不晚

SQLServer动态掩码的案例分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

SQLServer动态掩码的案例分析

这篇文章给大家分享的是有关SQLServer动态掩码的案例分析的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。

动态数据掩码(DDM)是SQL Server 2016引入的一个新功能。目的就是限制没有权限的人去看到一些隐私信息。管理员用户能够决定哪些字段是需要被掩码的,那么如何在不改变应用程序代码的基础上掩码?还要保证无论如何访问数据,都是一致的。

这是Azure SQL数据库中首次引入的特性,它在云上接受用户的测试,并已迁移到本地产品。我想很多其他的新特性也会遵循这条方式(云--本地)。

需要注意的是与我之前的行级别数据安全一样,这些都是数据安全相关内容(推荐课程:MySQL教程)

列数据掩码

首先创建一个在一些数据上带有掩码版的表。我将在表定义中开始的一个字段中添加一个掩码。注意,这样做的方式是在数据类型之后使用“mask with()”格式,但是在NULL和默认选项之前,要在圆括号内包含FUNCTION = ",它指定了我们的函数。在引号内,我们指定掩码。CREATE TABLE语句如下

CREATE TABLE MyTable
  ( MySSN VARCHAR (10) MASKED WITH (FUNCTION = 'default()') DEFAULT ('0000000000' )
 , MyName VARCHAR (200) DEFAULT ( ' ')
 , MyEmail VARCHAR (250) DEFAULT ( '')
 , MyInt int
)
GO
INSERT dbo. MyTable
 ( MySSN , MyName, MyEmail , MyInt)
VALUES
 ( '1234567890', 'Steve Jones', 'SomeSteve@SomeDomain.com', 10 )

如果创建者查询这个表,就会看到一个普通的表。我得到所有的数据,当它被插入时。这是因为我是一个有权限的用户。同理那些具有dbo特权(db_owner或sysadmin角色)的用户将不会看到屏蔽数据。现在创建一个正常的用户没有高权限的用户。当然,我需要授予普通的SQL Server权限来查看表中的数据。

CREATE USER mytest WITHOUT LOGIN
GRANT SELECT ON mytable TO mytest

现在我们可以用这个用户查询这个表,看一下有什么不同。

SQLServer动态掩码的案例分析

我们可以看到第一列包含掩码数据。只有x出现在数据的位置。这就实现了我想要的,即对非特权用户隐藏数据。注意,磁盘上的数据没有更改。数据只有在返回给非特权用户时才会被屏蔽。
我可以在执行计划的最后一部分看到这种情况。我需要授予用户查看计划的权限,但是当我这样做时,我看到的是用户的计划,使用的是上面相同的查询。

SQLServer动态掩码的案例分析

我可以在表上定义其他类型的掩码。有一个自定义的掩码格式,允许控制显示的内容,一个电子邮件地址的遮罩,和一个随机的数字遮罩。我们将在另一篇文章中详细讨论这些问题。

现在可以添加掩码到另一列上面,比如邮件MyEmail列,可以使用邮件掩码的格式,具体代码如下:

ALTER TABLE dbo.MyTable
 ALTER COLUMN MyEmail VARCHAR(250) MASKED WITH (FUNCTION='email()')
GO

然后查询结果如下:

SQLServer动态掩码的案例分析

也可以对多个和列进行掩码

CREATE TABLE MySecondTable (
  MyEmail VARCHAR( 250) MASKED WITH (FUNCTION= 'email()')
, MySSN VARCHAR (10) MASKED WITH (FUNCTION ='default()')
, MyID INT MASKED WITH (FUNCTION ='random(1,4)')
)GOINSERT MySecondTable VALUES
   ( 'myname@mydomain.com', '1234567890', 100 )
 , ( 'abrother@mycorp.com' , '0123456789' , 555)
 , ( 'somesister@somecompany.org' , '9876543210' , 999)

查询结果如下:

SQLServer动态掩码的案例分析

正如我们所看到的,我从不同的行得到不同的掩码,每个掩码应用于特定行的数据。

允许用户看到掩码真实数据

SQL Server 2016中有一个新的DDM权限。这是UNMASK权限,它和其他任何权限一样被授予。让我们来看看这是如何工作的。我将创建一个具有与现有用户相同权限的新用户。然后我将查询该表。

SQLServer动态掩码的案例分析

与之前相似的结果,然后我们在给用授权打开掩码。

SQLServer动态掩码的案例分析

现在我们可以看到数据的显示方式与特权用户的显示方式相同。对于NewTester用户,所有的数据都是“未屏蔽的”。
然而,这也有不利的一面。UNMASK权限在数据库范围内授予用户。没有按表或列划分的粒度。如果用户具有UNMASK,他们可以查看存储在数据库中的表中具有SELECT权限的所有数据。我们可以通过使用Newtest查询第一个表来看到这一点。

SQLServer动态掩码的案例分析

移除掩码

代码如下:

ALTER TABLE dbo.MySecondTable
  ALTER COLUMN MySSN DROP MASKED;

一旦我这样做,用户将直接看到真实数据。

SQLServer动态掩码的案例分析

MySSN列的数据是未屏蔽的,但是MyEmail和MyID的数据仍然是屏蔽的

动态数据屏蔽是一个很好的新特性,旨在更容易地保护数据不受非特权用户的影响。这可以在数据库中实现,而不需要更改任何应用程序代码,从而允许您以最小的成本和工作量对应用程序用户屏蔽敏感数据。我还要提醒您,这并不是真正的安全特性。存储在磁盘和表中的数据不会以任何方式更改。这仍然是纯文本数据,如果用户能够查询系统,他们仍然可以潜在地查询您的数据并发现其值。

感谢各位的阅读!关于SQLServer动态掩码的案例分析就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到吧!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

SQLServer动态掩码的案例分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++中存储方案和动态分配的示例分析

这篇文章主要介绍了C++中存储方案和动态分配的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。存储方案和动态分配在之前的文章当中,我们讨论了C++用来为变量分配内存的5
2023-06-22

C#动态数组的示例分析

小编给大家分享一下C#动态数组的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!C#动态数组的详解实例:ArrayList AL = new ArrayLi
2023-06-17

VB.NET动态事件的示例分析

这篇文章主要介绍VB.NET动态事件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!“大李哥,”我不免为自己问了如此多的问题而不好意思起来,“您刚才所说的事件的委托是怎么回事呀?”大李显然是明白我会提问的:“
2023-06-17

Angular动态组件的示例分析

这篇文章主要介绍了Angular动态组件的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。使用场景我们先明确下动态组件的使用场景,在代码运行时要动态加载组件,换成普通人
2023-06-15

Hive中静态分区与动态分区的示例分析

这篇文章给大家分享的是有关Hive中静态分区与动态分区的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。  分区是hive存放数据的一种方式。将列值作为目录来存放数据,就是一个分区。这样查询时使用分区列进行
2023-06-02

Linux动态库和静态库的示例分析

今天就跟大家聊聊有关Linux动态库和静态库的示例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。函数库分为静态库和动态库两种。创建Linux静态库和Linux动态库和使用它们在这
2023-06-16

java访问者模式的静态动态及伪动态分派实例分析

今天小编给大家分享一下java访问者模式的静态动态及伪动态分派实例分析的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。1 使用
2023-07-02

ASP动态include文件的示例分析

这篇文章主要介绍ASP动态include文件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完! 经常有这样的要求,根据不同的需求要求include不同的文件如各个人的不同设置,所以要求能动态include文件受
2023-06-14

JDK中动态代理的示例分析

这篇文章将为大家详细讲解有关JDK中动态代理的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。动态代理步骤1.创建一个实现接口InvocationHandler的类,它必须实现invoke方法2.创
2023-06-15

C语言动态内存管理实例代码分析

这篇文章主要介绍了C语言动态内存管理实例代码分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C语言动态内存管理实例代码分析文章都会有所收获,下面我们一起来看看吧。1.动态内存开辟的原因常见的内存开辟方式int
2023-07-02

java静态和动态绑定的实例对比分析

这篇文章主要介绍了java静态和动态绑定的实例对比分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇java静态和动态绑定的实例对比分析文章都会有所收获,下面我们一起来看看吧。不同绑定的比较1、静态绑定发生在编
2023-06-30

Java中动态代理和静态代理的示例分析

这篇文章主要介绍了Java中动态代理和静态代理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。0、代理模式为什么要学习代理模式?这是SpringAOP的底层【Spri
2023-06-29

C语言中的动态内存分配实例分析

本篇内容主要讲解“C语言中的动态内存分配实例分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“C语言中的动态内存分配实例分析”吧!什么是动态内存分配我们目前已经知道的内存开辟的方式有:int v
2023-07-02

编程热搜

目录