《Windows Azure Platform 系列文章目录》

  我们在使用关系型数据的时候,有时候希望:

  -  管理员admin,可以查看到所有的数据

  -  普通用户,某些敏感字段,比如信用卡,电子邮件等字段都是屏蔽的

  在这种情况下,就可以使用Dynamic Data Masking动态数据掩码,对数据表的某些字段进行屏蔽。

  比如我们对用户的信用卡信息、邮箱地址进行屏蔽,可以起到保护用户隐私的作用。

  动态数据屏蔽策略:

  1.不对其进行屏蔽的SQL用户:一组可以在 SQL 查询结果中获取非屏蔽数据的 SQL 用户或 AAD 标识。 始终不会对拥有管理员权限的用户进行屏蔽,这些用户可以看到没有任何屏蔽的原始数据。

  2.屏蔽规则:一组规则,定义将要屏蔽的指定字段,以及使用的屏蔽函数。 可以使用数据库架构名称、表名称和列名称定义指定的字段。

  3.屏蔽函数:一组方法,用于控制不同情况下的数据透露。

屏蔽函数 屏蔽逻辑
默认

根据指定字段的数据类型完全屏蔽

对于字符串数据类型(nchar、ntext、nvarchar),将使用 XXXX;如果字段大小小于 4 个字符,则使用更少的 X。
• 对于数字数据类型(bigint、bit、decimal、int、money、numeric、smallint、smallmoney、tinyint、float、real),将使用零值。
对于日期/时间数据类型(date、datetime2、datetime、datetimeoffset、smalldatetime、time),将使用 1900-01-01。
• 对于 SQL 变量,将使用当前类型的默认值。
• 对于 XML,将使用文档 。
• 对于特殊数据类型(timestamp、table、hierarchyid、GUID、binary、image、varbinary 空间类型),将使用空值。

信用卡

此屏蔽方法公开指定字段的最后四位数,并添加一个信用卡格式的常量字符串作为前缀。

XXXX-XXXX-XXXX-1234

电子邮件

此屏蔽方法公开第一个字母并将域替换为 XXX.com,并使用一个电子邮件地址格式的常量字符串作为前缀。

aXX@XXXX.com

随机数 此屏蔽方法根据选定边界和实际数据类型生成随机数。 如果指定的边界相等,则屏蔽函数将是常数。
自定义文本

此屏蔽方法公开第一个和最后一个字符,并在中间添加一个自定义填充字符串。 如果原始字符串短于公开的前缀和后缀,则只使用填充字符串。
前缀 [填充] 后缀

  准备工作:

  1.准备Azure China账户

  2.下载Azure SQL Server Management Studio:  https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms

  

  1.首先我们登录Azure ARM portal: https://portal.azure.cn

  2.创建一个Azure SQL Database,命名为leisqldbsh。

  同时创建新的Azure SQL Database Server,创建登录用户名:leizhang

  

  3.创建完毕后,请设置SQL Server的IP白名单。

  

  4.使用SSMS链接这个数据库。在leisqldbsh下,

  

  执行以下T-SQL语句

CREATE TABLE [dbo].[UserInfo]([unikey] int NOT NULL IDENTITY(1,1),[FirstName] [nvarchar](50) NOT NULL,[LastName] [nvarchar](50) NOT NULL,[CreditCard] [nvarchar](50) NOT NULL,[Mail] [nvarchar](50) NOT NULL,[CellPhone] [nvarchar](50) NOT NULL,CONSTRAINT [PK_UserInfo] PRIMARY KEY CLUSTERED
([unikey] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON)
)
GOINSERT INTO dbo.UserInfo(FirstName,LastName,CreditCard,Mail,CellPhone)
VALUES ('San','Zhang','4300-0000-0000-0001','sanzhang@msn.com','13900000001'),
('Er','Wang','4300-0000-0000-0002','erwang@msn.com','13900000002'),
('Xiao','Zhang','4300-0000-0000-0003','xiaozhang@msn.com','13900000003'),
('Xiao','Li','4300-0000-0000-0004','xiaoli@msn.com','13900000004'),
('Xiao','Ming','4300-0000-0000-0005','xiaoming@msn.com','13900000005')

  5.如果我们以步骤2中创建的用户leizhang,查询UserInfor表,就可以查询到所有的数据。如下图:

  6.然后我们需要创建另外一个用户untrusteddev。

  在master database下,执行下面的T-SQL命令:

CREATE LOGIN untrusteddev
WITH PASSWORD = 'N0tL0Lc4t5^'
GOCREATE USER untrusteddev
FOR LOGIN untrusteddev
WITH DEFAULT_SCHEMA = [dbo]
GO

  7.在leisqldbsh database下,执行下面的T-SQL

CREATE USER untrusteddev
FOR LOGIN untrusteddev
WITH DEFAULT_SCHEMA = [dbo]
GOEXEC sp_addrolemember N'db_datareader', N'untrusteddev'
GO

  8.然后查看Dynamic Data Masking,如下图:

  

  点击上图的Add Mask。针对CreditCard字段,增加Mask

  

  针对Mail字段,增加Mask

  

  9.这样我们针对数据表的2个字段的Data Masking都设置好了。

  我们回顾一下数据库的链接信息:

Server Name leisqlserversh.database.chinacloudapi.cn leisqlserversh.database.secure.chinacloudapi.cn
Login Name leizhang untrusteddev
Password
说明 sysadmin db_datareader

  10.我们以untrusteddev身份,登录Server:leisqlserversh.database.secure.chinacloudapi.cn (注意这个DNS里面有secure信息)

  查询表UserInfo,信息如下:

  可以看到CreditCard字段和Mail字段都被屏蔽了。

  

  这样就能保护客户的用户隐私了。

转载于:https://www.cnblogs.com/threestone/p/7116498.html

Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码相关推荐

  1. SQL Server 动态数据掩藏(Dynamic Data Masking)探索和实施

    动态数据掩藏(DDM) 是SQL Server 2016 CTP 2.1引入的新功能 数据库加密技术本质上改变了数据存储结构,而DDM只是在返回客户端的时候对数据进行隐藏.sysadmin的成员登陆账 ...

  2. 数据库安全之数据掩码:SQL新功能之动态数据掩码(SQL2016AZURE SQL)

     我们在开发上都有这样的需求:对部分敏感数据进行屏蔽,如身份证信息,名字的一部分等 显示如: 在开发上,一般来是取出相应的文字后进行替换,如可以用下面的方法. function plusXing ...

  3. SQL Server 2016的新功能–动态数据屏蔽

    There are many new features in SQL Server 2016, but the one we will focus on in this post is: SQL Se ...

  4. azure云数据库_在Azure SQL数据库中实现动态数据屏蔽

    azure云数据库 In this article, we will review Dynamic Data Masking in the Azure SQL database. Dynamic Da ...

  5. SQL Server中的动态数据屏蔽

    Security has been one of the prime concerns of database developers since the inception of database m ...

  6. SQL Server的历史– SQL Server功能的演变

    介绍 (Introduction) This article will explain the main features in SQL Server 2017, 2016, 2015, 2014, ...

  7. 在SQL Server 2016中使用动态数据屏蔽来保护敏感数据

    Dynamic Data Masking is a new security feature introduced in SQL Server 2016 that limits the access ...

  8. 利用Contained Database和DAC来开发基于SQL Server Denali和SQL Azure之上的应用程序

    让应用程序的数据层可以在本地SQL Server服务器.私有云.共有云之间方便的部署.移动.升级和管理,正在迅速成为当前云时代的关键技术之一.SQL Server "Denali" ...

  9. sql azure 语法_Azure SQL Server中的CREATE DATABASE语句概述

    sql azure 语法 In this article, we will review CREATE DATABASE statement in the Azure SQL database wit ...

最新文章

  1. 荣耀30pro系统_荣耀30 pro:正式再见!
  2. 虚拟机上SourceInsight访问Linux系统的代码
  3. Spring boot的properties文件编码设置
  4. 网页连接不上java服务端,用Java插入IP时无法连接到服务器
  5. 不可能的工作:在FBX模型导入脚本中生成模型的预置体
  6. java取消_java – 取消之前的请求
  7. 用BusyBox制作Linux根文件系统
  8. 吴恩达深度学习——神经网络基础
  9. android布局自适应小示例(用户反馈界面)
  10. erlang的又一力作——英雄联盟聊天服务器
  11. Ubuntu下将TinyOS移植到CC2430芯片
  12. 数据库中的E—R图画法
  13. 多线程服务器的常用编程模型
  14. 修复win10 服务器失败怎么办,fatal error怎么解决win10 修复Win10系统问题
  15. arduino旋转编码器控制步进电机
  16. vrchat模型房_VRChat之blender教程
  17. HTML实现图片点击放大效果
  18. abort()函数使用
  19. 会议OA项目(六)--- (待开会议、历史会议、所有会议)
  20. Lightroom Classic 9.0安装教程

热门文章

  1. 微信机、网络和java的相关知识点
  2. java哈希_Java Hashtable 类
  3. php设计分布图,MySQL分表实现上百万上千万记录分布存储的批量查询设计模式[图]_MySQL...
  4. scratch做简单跑酷游戏_腾讯游戏学院专家:做一个多线程游戏框架可以多简单?...
  5. java练习_Java基础笔试练习(一)
  6. golang 线程 Java线程_Golang 学习笔记(06)—— 多线程
  7. mybatis plus 链式编程查询
  8. python框架django入门_web框架之Django(python3入门)
  9. linux 引导程序修复工具,技术|Linux下修改引导器的工具:Boot-Repair
  10. java3d box 坐标,3d transform的坐标空间及位置