zoukankan      html  css  js  c++  java
  • Azure SQL Database (23) Azure SQL Database Dynamic Data Masking动态数据掩码

      《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)
    )
    GO
    
    
    INSERT 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^'
    GO
    
    
    CREATE 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]
    GO
    
    EXEC 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字段都被屏蔽了。

      

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

  • 相关阅读:
    响应式布局和BootStrap 全局CSS样式
    javascript中的undefined与null的区别
    before(),after(),prepend(),append()等新DOM方法简介
    解决文字和text-decoration:underline下划线重叠问题
    CSS3 linear-gradient线性渐变实现虚线等简单实用图形
    用Javascript获取页面元素的位置
    rem、px、em(手机端h5页面屏幕适配的几种方法)
    用flex和rem实现移动端页面
    HTML5新增的form属性简介(转载至张鑫旭)
    vue实现图片放大
  • 原文地址:https://www.cnblogs.com/threestone/p/7116498.html
Copyright © 2011-2022 走看看