循序渐进丨MogDB 数据库特性之动态数据脱敏机制

news2024/11/19 5:30:16

aeb7f61b7c96e270f0dfb6c6849418d1.jpeg

数据脱敏是行之有效的数据库隐私保护方案之一,可以在一定程度上限制非授权用户对隐私数据的窥探。动态数据脱敏机制是一种通过定制化脱敏策略来实现对隐私数据保护的技术,可以在保留原始数据的前提下有效地解决非授权用户对敏感信息访问的问题。当管理员指定待脱敏对象和定制数据脱敏策略后,用户所查询的数据库资源如果关联到对应的脱敏策略时,则会根据用户身份和脱敏策略进行数据脱敏,从而限制非授权用户对隐私数据的访问。事实上,MogDB 数据库自1.1.0版本就引入了动态数据脱敏机制。

函数名
示例
creditcardmasking‘4880-9898-4545-2525’将会被脱敏为‘xxxx-xxxx-xxxx-2525’,该函数仅对后4位之前的数字进行脱敏。
basicemailmaskingabcd@gmail.com将会被脱敏为xxxx@gmail.com,对出现第一个'@'之前的文本进行脱敏。
fullemailmaskingabcd@gmail.com将会被脱敏为xxxx@xxxxx.com,对出现最后一个'.'之前的文本(除'@'符号外)进行脱敏。
alldigitsmasking‘alex123alex’将会被脱敏为‘alex000alex’,仅对文本中的数字进行脱敏。
shufflemasking‘hello word’将会被随机打乱顺序脱敏为‘hlwoeor dl’,该函数通过字符乱序排列的方式实现,属于弱脱敏函数,语义较强的字符串不建议使用该函数脱敏。
randommasking‘hello word’将会被脱敏为‘ad5f5ghdf5’,将文本按字符随机脱敏。
regexpmasking需要用户顺序输入四个参数:reg为被替换的字符串;replace_text为替换后的字符串;pos为目标字符串开始替换的初始位置,为整数类型;reg_len为替换长度,为整数类型。reg、replace_text可以用正则表达,pos如果不指定则默认为0,reg_len如果不指定则默认为-1,即pos后所有字符串。如果用户输入参数与参数类型不一致,则会使用maskall方式脱敏。CREATE MASKING POLICY msk_creditcard regexpmasking(’[\d+]’, ‘x’, 5, 9) ON LABEL(label_for_creditcard);
maskall‘4880-9898-4545-2525’将会被脱敏为‘xxxxxxxxxxxxxxxxxxx’。

特性约束

  • 动态数据脱敏策略需要由具备POLADMIN或SYSADMIN属性的用户或初始用户创建,普通用户没有访问安全策略系统表和系统视图的权限。

  • 动态数据脱敏只在配置了脱敏策略的数据表上生效,而审计日志不在脱敏策略的生效范围内。

  • 在一个脱敏策略中,对于同一个资源标签仅可指定一种脱敏方式,不可重复指定。

  • 不允许多个脱敏策略对同一个资源标签进行脱敏,除以下脱敏场景外:使用FILTER指定策略生效的用户场景,包含相同资源标签的脱敏策略间FILTER生效场景无交集,此时可以根据用户场景明确辨别资源标签被哪种策略脱敏。

  • Filter中的APP项建议仅在同一信任域内使用,由于客户端不可避免的可能出现伪造名称的情况,该选项使用时需要与客户端联合形成一套安全机制,减少误用风险。一般情况下不建议使用,使用时需要注意客户端仿冒的风险。

  • 对于带有query子句的INSERT或MERGE INTO操作,如果源表中包含脱敏列,则上述两种操作中插入或更新的结果为脱敏后的值,且不可还原。

  • 在内置安全策略开关开启的情况下,执行ALTER TABLE EXCHANGE PARTITION操作的源表若在脱敏列则执行失败。

  • 对于设置了动态数据脱敏策略的表,需要谨慎授予其他用户对该表的trigger权限,以免其他用户利用触发器绕过脱敏策略。

  • 最多支持创建98个动态数据脱敏策略。

  • 仅支持使用上述预置脱敏策略。

  • 仅支持对只包含COLUMN属性的资源标签做脱敏。

  • 仅支持对基本表的列进行数据脱敏。

  • 仅支持对SELECT查询到的数据进行脱敏。

实际案例

开启安全策略

MogDB=# alter system set enable_security_policy=on;
ALTER SYSTEM SET
MogDB=# show enable_security_policy;
 enable_security_policy 
------------------------
 on
(1 row)

参数说明: 安全策略开关,控制统一审计和数据动态脱敏策略是否生效。

1. 证件保留尾号脱敏(creditcardmasking)

MogDB=# create user mask_user password 'Password#123';
NOTICE:  The encrypted password contains MD5 ciphertext, which is not secure.
CREATE ROLE
MogDB=# alter user mask_user sysadmin;
ALTER ROLE
 
[omm@master01 ~]$ gsql -r -d postgres -U mask_user -W "Password#123"
gsql ((MogDB 5.0.4 build 070c88a0) compiled at 2023-11-25 12:57:09 commit 0 last mr 1804 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.


MogDB=> CREATE TABLE creditcard_info (id_number int, name varchar(100),credit_card varchar(19));
CREATE TABLE
MogDB=> INSERT INTO creditcard_info values(1,'Wusx','4880-9898-4545-2525');
INSERT 0 1
MogDB=> CREATE RESOURCE LABEL label_for_creditcard ADD COLUMN(mask_user.creditcard_info.credit_card);
CREATE RESOURCE LABEL
MogDB=> CREATE MASKING POLICY mask_creditcard creditcardmasking ON LABEL(label_for_creditcard);
CREATE MASKING POLICY
MogDB=> select * from mask_user.creditcard_info;
 id_number | name |     credit_card     
-----------+------+---------------------
         1 | Wusx | xxxx-xxxx-xxxx-2525

2、邮箱地址前缀脱敏(basicemailmasking)

[omm@master01 ~]$ gsql -r -d postgres -U mask_user -W Password#123
gsql ((MogDB 5.0.4 build 070c88a0) compiled at 2023-11-25 12:57:09 commit 0 last mr 1804 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.


MogDB=> create table mail_list(id_number int, name varchar(100),mail_addr varchar(200));
CREATE TABLE
MogDB=> INSERT INTO mail_list values(1,'Wusx','shixing.wu@enmotech.com');
INSERT 0 1
MogDB=> CREATE RESOURCE LABEL label_for_mail_list ADD COLUMN(mask_user.mail_list.mail_addr);
CREATE RESOURCE LABEL
MogDB=> CREATE MASKING POLICY mask_mail_list basicemailmasking ON LABEL(label_for_mail_list);
CREATE MASKING POLICY
MogDB=> select * from mask_user.mail_list;
 id_number | name |        mail_addr        
-----------+------+-------------------------
         1 | Wusx | xxxxxxxxxx@enmotech.com
(1 row)

3、邮箱地址前缀+域名脱敏(fullemailmasking)

[omm@master01 ~]$ gsql -r -d postgres -U mask_user -W Password#123
gsql ((MogDB 5.0.4 build 070c88a0) compiled at 2023-11-25 12:57:09 commit 0 last mr 1804 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
MogDB=> drop MASKING POLICY mask_mail_list;
DROP MASKING POLICY
MogDB=> CREATE MASKING POLICY mask_mail_list fullemailmasking ON LABEL(label_for_mail_list);
CREATE MASKING POLICY
MogDB=> select * from mask_user.mail_list;
id_number | name |        mail_addr        
-----------+------+-------------------------
1 | Wusx | xxxxxxxxxx@xxxxxxxx.com
(1 row)

4、数字脱敏(alldigitsmasking)

MogDB=> create table account_detail(id_number int, name varchar(100),balance_detail varchar(2000));
CREATE TABLE
MogDB=> INSERT INTO account_detail values(1,'Wusx','余额:9999888800');
INSERT 0 1
MogDB=> CREATE RESOURCE LABEL label_for_account_detail ADD COLUMN(mask_user.account_detail.balance_detail);
CREATE RESOURCE LABEL
MogDB=> CREATE MASKING POLICY mask_account_detail alldigitsmasking ON LABEL(label_for_account_detail);
CREATE MASKING POLICY
MogDB=> select * from mask_user.account_detail;
 id_number | name |  balance_detail  
-----------+------+------------------
         1 | Wusx | 余额:0000000000
(1 row)

5、乱序脱敏(shufflemasking)

[omm@master01 ~]$ gsql -r -d postgres -U mask_user -W Password#123
gsql ((MogDB 5.0.4 build 070c88a0) compiled at 2023-11-25 12:57:09 commit 0 last mr 1804 )
Non-SSL connection (SSL connection is recommended when requiring high-security)
Type "help" for help.
MogDB=>
MogDB=> INSERT INTO account_detail values(2,'Thomas Anderson','余额:9999888800');
INSERT 0 1
MogDB=> CREATE RESOURCE LABEL label_for_account_detail_name ADD COLUMN(mask_user.account_detail.name);
CREATE RESOURCE LABEL
MogDB=> CREATE MASKING POLICY mask_account_detail_name shufflemasking ON LABEL(label_for_account_detail_name);
CREATE MASKING POLICY
MogDB=> select id_number,name from mask_user.account_detail where id_number=2;
id_number |      name       
-----------+-----------------
2 | or ssAanToendhm
(1 row)
MogDB=> select id_number,name from mask_user.account_detail where id_number=2;
id_number |      name       
-----------+-----------------
2 | sdmTosne Aanohr
(1 row)
MogDB=> select id_number,name from mask_user.account_detail where id_number=2;
id_number |      name       
-----------+-----------------
2 | ods rTamhAneosn
(1 row)

6、随机字符替代脱敏(randommasking)

MogDB=> drop MASKING POLICY mask_account_detail_name;
DROP MASKING POLICY
MogDB=> CREATE MASKING POLICY mask_account_detail_name randommasking ON LABEL(label_for_account_detail_name);
CREATE MASKING POLICY
MogDB=> select id_number,name from mask_user.account_detail where id_number=2;
 id_number |      name       
-----------+-----------------
         2 | b3b0b109ff5e150
(1 row)

7、正则表达式脱敏(regexpmasking)

MogDB=> drop MASKING POLICY mask_account_detail_name;
DROP MASKING POLICY
MogDB=> CREATE MASKING POLICY mask_account_detail_name regexpmasking('Thomas', 'Halo', 0, 9 )  ON LABEL(label_for_account_detail_name);
CREATE MASKING POLICY
MogDB=> select id_number,name from mask_user.account_detail where id_number=2;
 id_number |     name      
-----------+---------------
         2 | Halo Anderson
(1 row)

8、全遮蔽脱敏(maskall)

MogDB=> drop MASKING POLICY mask_account_detail_name;
DROP MASKING POLICY
MogDB=> CREATE MASKING POLICY mask_account_detail_name maskall ON LABEL(label_for_account_detail_name);
CREATE MASKING POLICY
MogDB=> select id_number,name from mask_user.account_detail where id_number=2;
 id_number |      name       
-----------+-----------------
         2 | xxxxxxxxxxxxxxx
(1 row)

关于作者

许玉晨,云和恩墨 MogDB 技术支持工程师,有12年左右的金融、保险、政府、地税、运营商等业务关键型系统的运维经验,曾担任公司异常恢复东区接口人,负责紧急异常恢复工作,目前负责国产化 MogDB 数据库的推广工作。

859b4ff2eb5352d871cad4d66e82d37a.gif

数据驱动,成就未来,云和恩墨,不负所托!


云和恩墨创立于2011年,以“数据驱动,成就未来”为使命,是智能的数据技术提供商。我们致力于将数据技术带给每个行业、每个组织、每个人,构建数据驱动的智能未来。

云和恩墨在数据承载(分布式存储、数据持续保护)、管理(数据库基础软件、数据库云管平台、数据技术服务)、加工(应用开发质量管控、数据模型管控、数字化转型咨询)和应用(数据服务化管理平台、数据智能分析处理、隐私计算)等领域为各个组织提供可信赖的产品、服务和解决方案,围绕用户需求,持续为客户创造价值,激发数据潜能,为成就未来敏捷高效的数字世界而不懈努力。

198b9318e2e2ad496d913fae15955172.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1505756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#,蛇梯问题(Snake and Ladder Problem)的算法与源代码

1 蛇梯问题 Snake and Ladder Problem 给定一个蛇梯板,找出从源单元格或第一个单元格到达目标单元格或最后一个单元格所需的最小掷骰次数。基本上,玩家可以完全控制掷骰子的结果,并希望找出到达最后一个单元格所需的最小掷骰次数。 如果玩…

基于鳑鲏鱼优化算法(Bitterling Fish Optimization,BFO)的无人机三维路径规划

一、无人机路径规划模型介绍 无人机三维路径规划是指在三维空间中为无人机规划一条合理的飞行路径,使其能够安全、高效地完成任务。路径规划是无人机自主飞行的关键技术之一,它可以通过算法和模型来确定无人机的航迹,以避开障碍物、优化飞行…

gradle下载太慢者超时!国内镜像可以直接下载

# 解决Gradle下载过慢问题的有效方式:使用国内镜像站点 在开发过程中,我们经常会遇到Gradle下载速度缓慢或超时的问题。作为一个强大而流行的构建工具,Gradle是许多项目中必不可少的一部分。然而,由于官方下载地址可能受网络限制…

Windows10/11配置WSL(Ubuntu)环境

文章目录 WSL介绍WSL部署扩展:辅助工具Windosw Terminal安装下载 WSL介绍 传统方式获取Linux操作系统,是安装完整的虚拟机及镜像环境,例如虚拟机VMware 而使用WSL,可以以非常轻量化的方式,得到Linux系统环境 它无需单独虚拟一套硬…

React 19 Cheat Sheet

React 19让构建网站和应用程序变得更容易,更好。有了很酷的新东西,比如React编译器、Actions API和更好的Hooks,编写代码变得更快,管理应用程序的数据变得更简单 React 19让构建网站和应用程序变得更容易,更好。有了很…

vue组件之间通信方式汇总

方式1&#xff1a;props和$emit props和$emit仅仅限制在父子组件中使用 1.props&#xff1a;父组件向子组件传递数据 1.1 代码展示 <template><div><!-- 这是父组件 --><div>父组件中的基本数据类型age的值是:{{this.age}}</div><div>…

C++的一些基础语法

前言&#xff1a; 本篇将结束c的一些基础的语法&#xff0c;方便在以后的博客中出现&#xff0c;后续的一些语法将在涉及到其它的内容需要用到的时候具体展开介绍&#xff1b;其次&#xff0c;我们需要知道c是建立在c的基础上的&#xff0c;所以c的大部分语法都能用在c上。 1.…

【Docker】容器的概念

容器技术&#xff1a;容器技术是基于虚拟化技术的&#xff0c;它使应用程序从一个计算机环境快速可靠地转移到另一个计算机环境中&#xff0c;可以说是一个新型地虚拟化技术。 一、docker容器 Docker:是一个开源地容器引擎Docker 是一种轻量级的容器化技术&#xff0c;其主要原…

雷赛控制卡获取轴当前位置的值不正确问题处理

现像 从雷赛控制卡中获取当前轴位置值时发现轴在向零点的右边走时显示的值是负数。正常来就一般是要反馈正数的。一般轴零点右边是正方向&#xff0c;限位是正限位&#xff0c;反馈的位置也应该是正数。 如果雷赛软件中的【单轴参数】中的基本设置中的【脉冲模式】设置的是对的…

【神经网络与深度学习】LSTM(Long Short-Term Memory)神经网络模型

概述 LSTM&#xff08;Long Short-Term Memory&#xff09;是一种特殊的循环神经网络&#xff08;RNN&#xff09;结构&#xff0c;通常被用于处理和学习时间序列数据。因此&#xff0c;LSTM属于深度学习领域中的一种神经网络模型。 在深度学习中&#xff0c;LSTM被广泛应用于…

【轮式平衡机器人】——TMS320F28069片内外设之eCAP

引入 TMS320F28069的eCAP&#xff08;增强型捕获模块&#xff09;是一个强大的外设&#xff0c;用于精确测量和捕获输入信号的事件和时间戳。 在电机控制、传感器数据采集和信号处理等应用中&#xff0c;eCAP模块可以用于测量霍尔传感器、编码器或其他数字输入信号的周期、频…

MySQL 的基础操作

数据库的基础操作 1. 库操作2. 表的操作3. 数据类型 数据库是现代应用程序中至关重要的组成部分&#xff0c;通过数据库管理系统&#xff08;DBMS&#xff09;存储和管理数据。 1. 库操作 创建数据库 创建数据库是开始使用数据库的第一步。下面是一些常见的创建数据库的示例&a…

为什么在镀膜时要测薄膜折射率?

在芯片制造中&#xff0c;镀膜工序&#xff08;PVD,CVD&#xff09;是必不可少的关键环节&#xff0c;薄膜的质量直接影响了芯片的性能。对这些薄膜的精细控制又离不开对其折射率的深入理解和精确测量。今天将对芯片制造中薄膜折射率的概念、测量方法&#xff0c;以及它在整个制…

Unmanaged PowerShell

简介 在渗透测试当中经常会使用到PowerShell来执行脚本, 但是直接使用PowerShell.exe是一个非常敏感的行为, EDR等产品对PowerShell.exe进程的创建监控的很密切, 并且随着PowerShell的渗透测试工具的普及, 越来越多的EDR会利用微软提供的AMSI接口对PS脚本进行扫描, 但是对于低…

力扣最热100题——56.合并区间

吾日三省吾身 还记得梦想吗 正在努力实现它吗 可以坚持下去吗 目录 吾日三省吾身 力扣题号&#xff1a;56. 合并区间 - 力扣&#xff08;LeetCode&#xff09; 题目描述 Java解法一&#xff1a;排序然后原地操作 具体代码如下 Java解法二&#xff1a;new一个list&#xf…

Pytorch学习 day04(Totensor、Normalize、Resize、Compose)

Totensor 把一个PIL格式的图片&#xff0c;或者ndarray格式的图片转换为tensor格式使用方法&#xff0c;如下&#xff1a; from PIL import Image from torchvision import transforms from torch.utils.tensorboard import SummaryWriterimg Image.open("images/00130…

算法——滑动窗口之找到字符串中所有的字母异位词,串联所有单词的子串

6.找到字符串中所有的字母异位词 题目:. - 力扣&#xff08;LeetCode&#xff09; 6.1如何快速判断两个字符串是否是异位词 假设现在有s1 aabca,s2 abaca,那么这两个就是异位词,容易想到的判断方法就是将两个字符串按照字典序排序,再依次比较,但是时间复杂度很高;我们看看…

python并发编程:IO模型比较分析

blocking和non-blocking的区别在哪&#xff0c;synchronous IO和asynchronous IO的区别在哪。 blocking vs non-blocking&#xff1a;调用blocking IO会一直block住对应的进程直到操作完成&#xff0c;而non-blocking IO在kernel还准备数据的情况下会立刻返回。 synchronous …

【R语言爬虫实战】抓取省市级城市常务会议内容

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

mysql如何开启手动提交事务

在mysql中&#xff0c;有一个变量autocommit&#xff0c;表示自动提交&#xff0c;默认为1&#xff0c;表示开启自动提交。通过以下命令查询 select autocommit;当autocommit为1时&#xff0c;任何一条sql语句都是一个事务&#xff0c;执行完由mysql自动提交。如果想自己决定什…