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

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.hqwc.cn/news/526306.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring-cloud-openfeign 3.0.0之前版本(对应spring boot 2.4.x之前版本)feign配置加载顺序

在之前写的文章配置基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 下图为自己整理的

深入浅出计算机网络 day.1 概论② 因特网概述

当你回头看的时候,你会发现自己走了一段,自己都没想到的路 —— 24.3.9 内容概述 01.网络、互连(联)网与因特网的区别与联系 02.因特网简介 一、网络、互连(联)网与因特网的区别与联系 1.若干节点和链路互连…

oracle基础-多表关联查询 备份

一、概述 在实际应用系统开发中会设计多个数据表,每个表的信息不是独立存在的,而是若干个表之间的信息存在一定的关系,当用户查询某一个表的信息时,很可能需要查询关联数据表的信息,这就是多表关联查询。SELECT语句自身…

springcloud第3季 consul服务发现注册,配置中心2

一 consul的作用 1.1 为何使用注册中心 为何要用注册中心? 1.A服务调用B服务,使用ip和端口,如果B服务的ip或者端口发生变化,服务A需要进行改动; 2.如果在分布式集群中,部署多个服务B,多个服…

c++ primer plus 笔记 第十六章 string类和标准模板库

string类 string自动调整大小的功能: string字符串是怎么占用内存空间的? 前景: 如果只给string字符串分配string字符串大小的空间,当一个string字符串附加到另一个string字符串上,这个string字符串是以占用…

selenium-java 通过配置xml文件并发运行类或者方法

1、打开idea允许某个class类,可以在控制台看到运行路径的下的配置文件如下图: 2、将路径复制到本地路径中找到temp-testng-customsuite.xml文件 3、复制该文件到项目的根目录下,可以修改文件名称,如下图 4、如图所示,通…

使用阿里云服务器搭建网站简单吗?超简单教程

使用阿里云服务器快速搭建网站教程,先为云服务器安装宝塔面板,然后在宝塔面板上新建站点,阿里云服务器网aliyunfuwuqi.com以搭建WordPress网站博客为例,来详细说下从阿里云服务器CPU内存配置选择、Web环境、域名解析到网站上线全流…

ELF 1技术贴|在NXP源码基础上适配开发板的按键功能

本次源代码适配是在NXP i.MX6ULL EVK评估板的Linux内核源代码(特定版本号为Linux-imx_4.1.15)的基础中展开的。 首要任务集中在对功能接口引脚配置的精细调整,确保其能无缝匹配至ELF 1开发板。接下来,我们将详细阐述适配过程中关…

什么是C语言?

什么是C语言? 一、C语言简介1.学习C语言必记重点 二、C语言的优点三、C语言的价值1.列举C语言实例 三、C语言程序1.C语言程序扩展名2.C语言程序编辑器 一、C语言简介 C语言是一种较早的程序设计语言,诞生于1972年的贝尔实验室。 1972 年,Denn…

浅谈Redis和分布式系统

浅谈Redis Redis用于存储数据,且在内存当中进行存储。 但是在日常编写代码中,定义一个变量也就属于在内存当中存储一个数据。 Redis主要会在分布式系统当中发挥重要作用,如果只是单机程序,直接通过变量存储数据的方式会比使用Re…

Linux的进程调度实现

经常被问到进程的调度算法有哪些,什么先进先出、短进程优先、时间片轮转、多级反馈多列等等算法能说一大堆?那具体的,linux内核使用了什么样的算法,且来探究一下。 本文所引用源码基于linux内核2.6.34版本。 目录 调度器类 从 s…

【兔子机器人】修改GO电机id(软件方法、硬件方法)

一、硬件方法 利用上位机直接修改GO电机的id号: 打开调试助手,点击“调试”,查询电机,修改id号,即可。 但先将四个GO电机连接线拔掉,不然会将连接的电机一并修改。 利用24V电源给GO电机供电。 二、软件方…