动态数据掩码

2024-01-20 22:58
文章标签 掩码 动态数据

本文主要是介绍动态数据掩码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

动态数据掩码(Dynamic Data Masking,简称为DDM)能够防止把敏感数据暴露给未经授权的用户。DDM作用于数据表的字段上,在查询结果中隐藏敏感数据。启用DDM不会修改表中的数据,只是把查询结果对未经授权的用户屏蔽,使未授权用户看到的查询结果是被掩码的,例如,第二列是号码列,前7个数字被掩码,只暴露后三位数字:

动态数据屏蔽在 SQL Server 2016 (13.x) 和 Azure SQL Database中开始提供,使用 Transact-SQL 命令进行配置。

一,定义动态数据掩码规则

对于数据表的列定义屏蔽规则,有4种掩码函数:

  • Default:对于字符串类型,使用XXXX来做掩码;对于数值类型,使用0值来做掩码;对于date和time类型,使用01.01.1900 00:00:00.0000000来做掩码;对于binary类型,使用0来做掩码。
  • Email:作用于字符串类型,首字符、@和 .com 不做掩码,其他字符替换为XXXX来做掩码。
  • Random:作用于数值类型,使用随机值来替换原始数字作为掩码
  • Custom String:作用于字符串类型,把中间的字符替换为掩码,两端的字符显示出来。对于prefix和 suffix中间的字符,使用padding来扩展,如果原始字符太短,不能掩码,那么prefix和suffix中间的字符不会暴露。

屏蔽函数的语法规则:

MASKED WITH (FUNCTION = 'default()')
MASKED WITH (FUNCTION = 'email()')
MASKED WITH (FUNCTION = 'random(start, end)')
MASKED WITH (FUNCTION = 'partial(prefix,[padding],suffix)')

启用DDM,有两种方式:

方式1:在创建表时定义屏蔽规则

Email varchar(100) MASKED WITH (FUNCTION = 'email()') NULL

方式2:向现有表添加屏蔽规则,通过ALTER TABLE命令修改列的定义:

ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()') NULL

二,权限控制

一个用户只有被授予在该列上的UNMASK 权限,才可以查看该列的原始数据,否则,返回的是掩码之后的数据。

1,创建和修改mask的权限

在使用动态数据屏蔽来创建表时,不需任何特殊权限,只需要具有CREATE TABLE 权限以及对架构的 ALTER 权限。

当需要添加、替换或删除对列的屏蔽时,需要 ALTER ANY MASK 权限以及对表的 ALTER 权限,可以将 ALTER ANY MASK 权限授予安全负责人。

具有表的 SELECT 权限的用户可以查看表数据,列在被定义为“已屏蔽”后,将显示屏蔽后的数据。对于需要从定义了屏蔽的列中检索数据的用户,可授予其 UNMASK 权限,使其可以看到原始数据。

针对 数据库的 CONTROL 权限包括 ALTER ANY MASK 和 UNMASK 权限。

2,更新mask列的权限

在一列上创建mask不会阻止该列上的数据更新,如果用户有write权限,那么该用户即使没有该列上的UNMASK的权限,也可以修改该列的数据。为了避免该情况的发生,应该通过其他权限来控制用户对屏蔽列的修改。

3,屏蔽复制

使用 SELECT INTO 或 INSERT INTO ,把数据从一个屏蔽列复制到另一个表中,这会使得屏蔽数据复制到新表中。

在执行SQL Server Import 和 Export时,也会把屏蔽复制到新的表中。

4,授权查看屏蔽数据

把UNMASK  的权限授权给用户,那么该用户就可以查看屏蔽列的原始值:

GRANT UNMASK TO TestUser;  
EXECUTE AS USER = 'TestUser';  
SELECT * FROM Membership;  
REVERT;   -- Removing the UNMASK permission  
REVOKE UNMASK TO TestUser; 

三,屏蔽列操作

用户可以对屏蔽列进行查询、增加、修改和删除操作。

1,查询屏蔽列

查看数据库中已经创建的屏蔽列:

SELECT tbl.name AS table_name,c.name AS column_name,c.is_masked,c.masking_function  
FROM sys.masked_columns AS c  
INNER JOIN sys.tables AS tbl   ON c.[object_id] = tbl.[object_id]  
WHERE is_masked = 1

2,增加屏蔽列

对现有表增加屏蔽列

ALTER TABLE Membership  
ALTER COLUMN LastName ADD MASKED WITH (FUNCTION = 'partial(2,"XXX",0)') NULL; 

3,修改屏蔽列

对现有的屏蔽列进行修改

ALTER TABLE Membership  
ALTER COLUMN LastName varchar(100) MASKED WITH (FUNCTION = 'default()');  

4,删除屏蔽列

把列上的屏蔽删除,删除掩码规则,不会删除该列的值:

ALTER TABLE Membership   
ALTER COLUMN LastName DROP MASKED; 

参考文档:

Dynamic Data Masking

这篇关于动态数据掩码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/627624

相关文章

通配符掩码

1. 基本概念 在计算机网络中,通配符掩码(Wildcard Mask)通常与子网掩码一起使用,用于在配置网络设备(如路由器或交换机)时指定要匹配的IP地址范围。通配符掩码实际上是子网掩码的反码(bitwise NOT)。 子网掩码用于指定IP地址中的哪些位表示网络部分,哪些位表示主机部分。通配符掩码则用于指定在路由或访问控制列表(ACL)中哪些位必须匹配,哪些位可以忽略。 2. 通配符掩码

Oracle(104)如何实现数据掩码?

要实现数据掩码(Data Masking),可以使用多种数据库管理系统(DBMS)提供的功能。以下是使用Oracle数据库的DBMS_REDACT包来实现数据掩码的详细步骤和代码示例。 实现数据掩码的步骤 创建示例表和数据定义掩码策略验证掩码 详细步骤和代码示例 假设我们有一个示例表employees,包含以下列:employee_id, name, ssn(社会安全号码), salary

Python编程实例-NumPy中的掩码数组用于处理缺失数据

NumPy中的掩码数组用于处理缺失数据 文章目录 NumPy中的掩码数组用于处理缺失数据1、数据数组2、掩码数组4、 掩码数组的优势5、使用NumPy中的掩码数组处理缺失数据5.1 简单示例5.2 分析来自多个传感器的温度数据 6、总结 想象一下,试图解决一个缺少碎片的拼图游戏。这可能会让人感到沮丧,对吧?在处理不完整数据集时,这是一个常见的情况。NumPy中的掩码数组是特殊的数

Numpy布尔索引与掩码

NumPy 是用于科学计算和处理多维数组数据的最流行的 Python 库之一。NumPy 提供了强大的功能,可以根据布尔条件从数组中索引和提取元素,这称为布尔索引或掩码。掌握布尔索引和掩码可以使用 NumPy 进行高效的数据操作和分析。 本综合指南将解释你需要了解的有关 NumPy 中布尔索引和掩码的所有信息,包括关键概念、用法和示例,以帮助你在自己的项目中利用这些技术。 NSDT工具推

【功能实现】axios实现动态数据

1.安装axios npm i axios 2.axios调取数据 import { onMounted,ref } from "vue"const titleList=ref([])//获取数据库数据,将数据赋值给titleListconst getArticles = async () => {const result = await axios.get('http://127.0.0.

密文域可逆信息隐藏与掩码自动编码器(MAE)

原文题目:Reversible data hiding in encrypted images based on pixel-level masked autoencoder and polar code Source: Signal Processing Authors: Zhangpei Cheng, Kaimeng Chen , Qingxiao Guan 发表年份:2024年

X-AnyLabeling系列:掩码转多边形坐标点

掩码转多边形坐标点 代码参考: X-AnyLabeling中的.\X-AnyLabeling\ tools\polygon_mask_conversion.py。这里主要拆分出掩码转成多边形坐标点存储在json文件的部分,同时增加了参数和支持带有中文名的路径。 代码示例 import osimport cv2import jsonimport numpy as npdef get_im

Unity3d动态数据管理(1)Export AssetBundles

我们在使用unity3d制作大型场景的时候,往往需要加载大容量的数据文件,特别是对于三维数据而言,模型、材质、贴图、特效等资源都是组成项目不可或缺的一部分。数据体量越大,数据加载就越明显。对于良好的人机交互体验而言,让用户处于长时间的等待,是一种非常差的体验感,很多用户很可能就是因为没有耐心等待,就直接关闭你的应用,离开。 所以,做任何的项目之前,必须要先解决场景数据管理的问题。针对Unity3

java判断某个ip是否在一个网段(ip+掩码)内

大学学的计算机网络已经忘了一大半,今天接到一个需求,需要判断用户的请求ip是否在办公网网段,如果是,那么就要做出相应的提示。 一开始我以为,办公网段就只需要截取前三位就行,比如:22.3.4.6 所在网段就是22.3.4就可以。 可是安全管理员给我发的却不是这样。而是以下这样的。 192.168.1.64/26 192.168.0.0/23 192.168.0.0/24 192.168

【位操作笔记】位合并 通过掩码

位合并(Merge bits) 通过掩码 通过掩码把两个数进行位合并。例如一个数为0x23,另一个数为0x65,假设合并的数要取第一个数的高4位,第二个数的低4位,那么合并后的数就是0x25。 算法说明 该算法使用了异或来实现,比普通的实现方式节省一次操作。 实现代码 non_masked_val和masked_val是两个要进行合并的数,mask是掩码。 non_masked_val