数据库管理-第258期 23ai:Oracle Data Redaction(20241104)

数据库管理258期 2024-11-04

  • 数据库管理-第258期 23ai:Oracle Data Redaction(20241104)
    • 1 简介
    • 2 应用场景与有点
    • 3 多租户环境
    • 4 特性与能力
      • 4.1 全数据编校
      • 4.2 部分编校
      • 4.3 正则表达式编校
      • 4.4 随机编校
      • 4.5 空值编校
      • 4.6 无编校
      • 4.7 不同数据类型上不同类型校验的对比
    • 总结

数据库管理-第258期 23ai:Oracle Data Redaction(20241104)

作者:胖头鱼的鱼缸(尹海文)
Oracle ACE Pro: Database(Oracle与MySQL)
PostgreSQL ACE Partner
10年数据库行业经验,现主要从事数据库服务工作
拥有OCM 11g/12c/19c、MySQL 8.0 OCP、Exadata、CDP等认证
墨天轮MVP、年度墨力之星,ITPUB认证专家、专家百人团成员,数盟会长老会成员,OCM讲师,PolarDB开源社区技术顾问,HaloDB外聘技术顾问,OceanBase观察团成员,青学会MOP技术社区(青年数据库学习互助会)技术顾问
圈内拥有“总监”、“保安”、“国产数据库最大敌人”等称号,非著名社恐(社交恐怖分子)
公众号:胖头鱼的鱼缸;CSDN:胖头鱼的鱼缸(尹海文);墨天轮:胖头鱼的鱼缸;ITPUB:yhw1809。
除授权转载并标明出处外,均为“非法”抄袭

在这里插入图片描述

上周在整理Oracle DB 23.6新特性的时候,看到了一个不那么熟悉的特性,即本篇介绍的Oracle Data Redaction。本篇针对Oracle DB 23ai版本。

1 简介

Oracle Data Redaction,可以译作Oracle数据编校,能够隐藏查询返回的数据,而不会直接影响数据。这是通过在呈现结果之前对数据库查询的结果进行编校(有选择地删除或隐藏敏感或机密信息)来实现的。可以将数据编校策略应用于表、视图或物化视图。然后,将表上的策略应用于表中的特定列。
可以使用以下方法之一来编校列数据:

  • Full redaction。全编校,编校了列数据的所有内容。返回给查询用户的编校值取决于列的数据类型和完整编校值的设置。默认情况下,NUMBER数据类型的列用零(0)编校,字符数据类型用单个空格编校。但是,这些值可以使用UPDATE_FULL_REDACTION_VALUES进行更改。
  • Partial redaction。部分编校,编校列数据的一部分。例如,您可以用星号(*)编校社会保障号码,但最后4位数字除外。
  • Regular expressions。正则表达式,可以使用正则表达式来查找要编校的数据模式。例如,您可以使用正则表达式来编校电子邮件地址,这些地址可以有不同的字符长度。它仅设计用于字符数据。
  • Random redaction。随机编校,根据列的数据类型,每次显示时,呈现给查询用户的编校数据都会显示为随机生成的值。
  • Nullify redation。空值编校,编校列中的所有数据,并将其替换为null值。
  • No redaction。无编校类型选项使您能够测试编校策略的内部操作,而不会影响对定义了策略的表的查询结果。可以使用此选项在将编校策略定义应用于生产环境之前对其进行测试。

数据编校对最终用户是透明的,因为它保留了原始数据类型和(可选)格式。它对数据库是透明的,因为数据在缓冲区、缓存和存储中保持不变,只在SQL查询结果返回给调用者之前的最后一刻发生变化。使用编校策略访问表或视图的所有查询都会一致地执行编校。可以通过检查通过SYS_CONTEXT函数传递到数据库中的用户信息来指定哪些用户应该只看到经过编校的数据;您可以根据当前数据库的属性编校数据;您可以在给定的编校策略中实现多个逻辑条件。此外,数据编校的实现方式最大限度地降低了性能开销。这些特性使Oracle数据编校特别适合共享通用生产数据库的一系列应用程序、分析工具、报告工具和监控工具使用。
Oracle数据库在用户访问数据时(即在查询执行时)在运行时应用编校。该解决方案在生产系统中运行良好。在数据编校间,所有数据处理都正常执行,后端引用完整性约束也得到了保留。
数据编校可以根据需要限制对持卡人数据或个人身份信息的访问,从而帮助您遵守行业、政府和组织的要求。

2 应用场景与有点

与Data Masking不同,数据屏蔽通过用虚构但真实的数据永久替换敏感数据来屏蔽敏感数据,数据编校在从数据库接收数据时对其进行编校,使数据库中的数据保持不变。数据编校使能够使用多种不同的编校样式轻松伪装数据。
Oracle数据编校特别适用于呼叫中心应用程序、即席报告和分析工作负载,在这些工作负载中,数据仅以只读格式提供给最终用户。但是,在将Oracle数据编校与执行数据库更新的应用程序一起使用时要小心,因为编校后的数据可以写回此数据库。
当您使用Oracle数据编校来保护数据时,它提供了几个好处:

  • 在运行时应用编校,对底层数据或存储要求没有影响
  • 运行时对性能影响很小或没有影响
  • 不需要更改应用程序
  • 使您能够通过PL/SQL API或使用Oracle Enterprise Manager用户WEB界面指定和管理数据重做策略
  • 既可用于本地数据库,也可用于云数据库

3 多租户环境

Oracle数据编校策略在PDB级别创建和应用,并且仅适用于该PDB中的对象。无法在CDB根目录中创建编校策略。
您无法为多租户容器数据库(CDB)创建数据重做策略;您只能在PDB级别创建数据重设策略。这是因为为其创建数据编校策略的对象通常位于PDB中。

4 特性与能力

使用DBMS_REDACT包创建并启用数据编校策略,指定编校策略的SCHEMA、对象(Object)和列(Column)。

  • SCHEMA级别指定了指定需要被编校对象的一列或多列的确切SCHEMA。
  • Object级别包括应用Orace数据编校作策略的表、视图和物化视图。每个对象最多可以应用一个策略。
  • Column级别包括编校功能的操作位置。创建编校策略时,可以在一列上定义编校函数。然后,如果需要,您可以编校策略,使用不同的功能编校对象中的其他列。

下面是一个在HR.EMPLOYEES表中SALARY列的数据编校策略的示例:

BEGINDBMS_REDACT.ADD_POLICY(object_schema       => 'hr', object_name         => 'employees', column_name         => 'salary',policy_name         => 'hr_emp_redact_comp_pol', function_type       => DBMS_REDACT.FULL,expression          => '1=1');
END;

在该示例中,使用DBMS_REDACT包中的ADD_POLICY过程来定义一个名为hr_emp_redact_comp_pol的Oracle数据编校策略。函数类型DBMS_REDACT.FULL指定对薪资列中的检索值时执行所有的数据编校,这意味着默认情况下,数字数据类型在输出文本中替换为零(0)。表达式参数设置策略,以便在计算结果为TRUE (1=1)时执行编校。

4.1 全数据编校

全数据编校对表或视图的指定列的全部内容进行编校。
默认情况下,输出显示如下:

  • 字符数据类型:输出为单个空格。
  • 数字数据类型:输出为零(0)。
  • 日期时间数据类型:输出设置为2001年1月的第一天,显示为01-JAN-2001。

在执行DBMS_REDACT.ADD_POLICY过程时通过设置function_type来指定全编校:

function_type    => DBMS_REDACT.FULL

全编校是默认设置,只要数据编校策略指定了列但省略了function_type参数设置,就会使用全编校。
可以使用DBMS_REDACT.UPDATE_FULL_REDACION_VALUES过程,将完整的编校输出更改为不同的值。您可以通过查询REDACTION_VALUES_FOR_TYPE_FULL数据字典视图来查找当前值。

4.2 部分编校

在部分数据编校中,可以编校显示输出的部分内容。
可以设置实际数据中开始编校的位置、从该位置开始编校的字符数以及要使用的编校字符。(实际数据是受保护的表或视图中的数据。实际数据的一个示例可能是数字123456789,此数字的编校数据版本可能是999996789。)这种类型的编校对于希望查看数据的人明显看到它以某种方式被编校的情况非常有用。通常,您会对信用卡号码或身份证号码使用这种类型的编校。
请注意,部分数据编校要求您的数据宽度保持固定。如果要对包含可变长度字符串值的列进行编校,则必须使用正则表达式编校。
要指定部分编校,必须设置DBMS_REDACT.ADD_POLICY或DBMS_REDACT.ALTER_POLICY过程function_type参数到DBMS_REDACT.PARTIAL,并使用function_parameters参数定义部分编校行为。
部分数据编校的显示输出如下:

  • 字符数据类型:当部分编校时,可以编校值为987-65-4320的社会保障号码(表示为字符数据类型中的连字符字符串),使其显示如以下示例所示。右侧的代码指定了如何编校字符数据:它指定了实际数据的预期输入格式、用于显示编校输出的格式、用于编校的字符、开始编校的起始位置以及要编校的字符数。第一个示例对字符数据类型社会保障号码使用预定义的格式(在以前的版本中称为快捷方式),第二个示例将前五个数字替换为星号(*),同时保留数字之间的连字符(-)。
    • function_parameters => DBMS_REDACT.REDACT_US_SSN_F5 的结果为 XXX-XX-4320
    • function_parameters => ‘VVVFVVFVVVV,VVV-VV-VVVV,*,1,5’ 的结果为 ****-**-4320
      在这些示例中,V描述了每个可能被编校的字符,F描述了每个要使用格式化字符格式化的字符。
  • 数字数据类型:部分编校的数字数据类型显示,一些数字被指定字符替换。例如,存储为987654321的社会安全号码可能显示如下。两者都对前五位数字进行了编校。第一个示例使用为NUMBER数据类型中的社会保障号码设计的预定义格式,第二个示例从第一个数字开始用数字9替换前五个数字。
    • function_parameters => DBMS_REDACT.REDACT_NUM_US_SSN_F5 的结果为 XXXXX4321
    • function_parameters => ‘9,1,5’ 的结果为 999994321
  • 日期时间数据类型:部分编校的日期时间值可以简单地显示为不同的日期。例如,日期 29-AUG-11 10.20.50.000000 AM 可能显示如下。在第一个示例中,一个月中的某一天被编校为02(使用设置d02),在第二个示例中该月被编校为DEC(使用m12)。大写值显示实际日期(D)、实际月份(M)、实际年份(Y)、实际小时(H)、实际分钟(M)和实际秒(S)。
    • function_parameters => ‘Md02YHMS’ 的结果为 02-AUG-11 10.20.50.000000 AM
    • function_parameters => ‘m12DYHMS’ 的结果为 29-DEC-11 10.20.50.000000 AM

4.3 正则表达式编校

正则表达式根据模式搜索编校列数据值中的特定数据。您可以使用正则表达式来编校不同长度的字符串列。
例如,您可以编校电子邮件地址的用户名,以便只显示域(例如,替换电子邮件地址中的hprestonhpreston@example.com使用[redacted],使其显示为[redacte]@example.com)。要执行编校,请设置DBMS_REDACT.ADD_POLICY或DBMS_REDACT.ALTER_POLICY过程function_type参数到DBMS_REDACT.REGEXP或DBMS_REDACT.REGEXP_WIDTH,然后使用以下参数构建正则表达式:

  • 字符串搜索模式(即要搜索的值),例如:
regexp_pattern => '(.+)@(.+\.[A-Za-z]{2,4})' 

此设置查找以下形式的模式:

one_or_more_characters@one_or_more_characters.2-4_characters_in_range_A-Z_or_a-z
  • 替换字符串,用于替换与regexp_pattern设置匹配的值。替换字符串可以包含对主正则表达式模式的子表达式的反向引用。以下示例将@符号之前的数据(来自regexp_pattern设置)替换为文本[redacted]。\2设置是指regexp_pattern设置中的第二个匹配组,即(.+.[A-Za-z]{2,4})。
regexp_replace_string => '[redacted]@\2'
  • 字符串搜索字符串的起始位置,例如数据的第一个字符,例如:
regexp_position => DBMS_REDACT.RE_BEGINNING

如果未指定,则此值为默认值。

  • 要执行的搜索和替换操作的类型,例如第一次出现、每五次出现或所有出现,例如:
regexp_occurrence => DBMS_REDACT.RE_ALL

如果未指定,则此值为默认值。

  • 搜索和替换操作的默认匹配行为,例如搜索是否区分大小写(i将其设置为不区分大小写):
regexp_match_parameter => 'i'

除了默认参数外,您还可以使用一组预定义的格式,使您能够对电话号码、电子邮件地址和信用卡号码使用常用的正则表达式。

4.4 随机编校

在随机数据编校中,通过将其替换为随机值来编校整个值。
每次应用程序用户运行查询时,查询结果集中显示的编辑值都会随机更改。
这种类型的编校在您不希望数据被明显编校的情况下很有用。它尤其适用于数字和日期时间数据类型,在这些数据类型中很难区分随机数据和真实数据。
随机值的显示输出会根据编校列的数据类型而变化,如下所示:

  • 字符数据类型:随机输出是字符的混合(例如,HTU[G{\pjkEWcK)。它对CHAR和VARCHAR2数据类型的行为不同,如下所示:
    • CHAR数据类型:编校后的输出始终与列的字符集位于同一字符集中。编校输出的字节长度始终与列定义长度相同(即,在创建表时提供的列长度)。例如,如果列是CHAR(20),则在用户查询的编校输出中提供20个随机字符的字符串。
    • VARCHAR2数据类型:对于VARCHAR数据类型的随机编校,编校后的输出始终与列的字符集位于同一字符集中。根据列中实际数据的长度,编校输出的长度是有限的。不显示超过实际数据长度的字符。例如,如果列是VARCHAR2(20),并且被编校的行包含长度为12的实际数据,则用户对该行的查询的编校输出中会提供一个由12个随机字符(不是20个)组成的字符串。
  • 数字数据类型:每个实际数值都会被修改为随机的非负数。这种编校产生的随机数不会超过实际数据的精度。例如,可以通过将数字987654321替换为数字12345678、13579、0或987654320中的任何一个来编校它,但不能将其替换为数字98765432 1、99987654321或-1中的任何数字。数字-123可以通过用数字122、0或83替换它来编校,但不能用数字123、1123或-2中的任何一个替换它。
    上述情况的唯一例外是实际值是-1到9之间的整数。在这种情况下,通过将实际数据替换为模为十(10)的随机非负整数来对其进行编校。
  • 日期时间数据类型:当使用随机数据编校操作对日期数据类型的值进行编校时,Oracle数据库会使用始终与实际数据不同的随机日期显示它们。
    通过下面配置实现随机编校:
function_type => DBMS_REDACT.RANDOM

4.5 空值编校

您可以创建Oracle数据编校策略,通过在查询结果中仅显示空值来编校列数据。
此功能使您能够使用DBMS_REDACT.NULLIFY函数用于隐藏表或视图列中的所有敏感数据,并将其替换为空值。您可以使用DBMS_REDACT的function_type参数设置此函数DBMS_REDACT.ADD_POLICY或DBMS_REDACT.ALTER_POLICY程序。

function_type => DBMS_REDACT.NULLIFY

4.6 无编校

可以创建不执行编校的数据编校策略。这使您能够在测试期间在应用程序中包含编校策略,然后在将应用程序移至生产环境时将这些策略应用于数据。
这对于您有一个经过编校的基表,但希望特定应用程序用户拥有一个始终显示实际数据的视图的情况非常有用。默认情况下,在已编校表上创建的视图将使用与基表相同的策略进行编校。但是,您可以为视图定义单独的编校策略。您可以创建已编校表的新视图,然后为此视图定义数据编校策略。当应用程序查询视图时,将应用在视图上定义的策略。该策略仍然存在于基表上,但只要DBMS_REDACT.NONE function_type设置用于在视图上创建策略,当应用程序使用视图进行查询时,就不会执行任何编校。

4.7 不同数据类型上不同类型校验的对比

这里可以通过以下网址中的列表进行查看:

https://docs.oracle.com/en/database/oracle/oracle-database/23/dbred/comparison-full_-partial_-and-random-redaction-based-data-types.html

总结

本期简单介绍了下Oracle数据编校,后面将在Oracle 23ai Free版本中进行实际测试。
老规矩,知道写了些啥。

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

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

相关文章

基于SpringBoot的医药管理系统+LW示例参考

1.项目介绍 系统角色:管理员、收银员功能模块:管理员(收银员信息管理、药品管理、药品类别、出库信息管理、入口信息。药品库存图表)、收银员(药品库存图表、会员积分信息等)技术选型:SpringBo…

PH热榜 | 2024-11-07

DevNow 是一个精简的开源技术博客项目模版,支持 Vercel 一键部署,支持评论、搜索等功能,欢迎大家体验。 在线预览 1. SWE-Kit 标语:打造你自己的“德文”——一个像软件工程师一样的智能助手! 介绍:SWE-K…

(蓝桥杯C/C++)——基础算法(下)

目录 一、时空复杂度 1.时间复杂度 2.空间复杂度 3.分析技巧 4.代码示例 二、递归 1.递归的介绍 2.递归如何实现 3.递归和循环的比较 4.代码示例 三、差分 1.差分的原理和特点 2.差分的实现 3.例题讲解 四、枚举 1.枚举算法介绍 2.解空间的类型 3. 循环枚举解…

echarts功能五 --geo地理组件、VisualMap图例组件

利用geoJson文件生成geo地理组件,如下图所示: 三个颜色区域分别代表了3个区域图层;淡蓝色代表了线条;正中心是geo地理组件;右下角展示图例,是VisualMap视觉映射组件。 共包含以下功能: &#…

WordCloudStudio:AI生成模版为您的文字云创意赋能 !

在信息泛滥的时代,如何有效地将文字内容变成生动的视觉元素?WordCloudStudio为您提供了答案。无论您是市场营销专家、教育工作者、数据分析师,还是创意设计师,WordCloudStudio都能帮助您轻松创建引人注目的文字云。更重要的是&…

25-RVIZ CARLA插件

RVIZ插件(RVIZ plugin)提供了一个基于RVIZ(RVIZ) ROS包的可视化工具。 用RVIZ运行ROS桥接 RVIZ插件需要一个名为ego_vehicle的自车。要查看ROS-bridge使用RVIZ的示例,请在运行CARLA服务器的情况下执行以下命令: 1. 启用RVIZ启动ROS桥接: # …

FP7209单节锂电升压恒流80V,PWM控制调光调色应急电源驱动方案,支持LED开路保护、LED短路保护、开关NMOS过电流保护、过温保护、过热保护

FP7209是针对LED驱动器的升压拓扑开关调节器。它提供了内置的门驱动销,用于驱动外部N-MOSFET。误差放大器的非反相输入端连接到一个0.25V的参考电压。如UVP、OVP、OCP等,保护系统电路有三个功能。LED电流可以通过一个连接到DIM针脚的外部信号来调整。DIM…

JS常用数组方法 reduce filter find forEach

文章目录 reduce应用:数据扁平化 filterfind从数组 [1,2,3,4,5,6] 中找出值为 2 的元素 forEach用于遍历,forEach 方法没有返回值,它总是返回 undefined。 reduce 数组变量名.reduce((sum,value) > { // 向sum变量上累加值 // 一定要retur…

精选报告| 2024年,5份必读的“虚仿教育”行业报告合集

以3D/XR应用为主的虚拟仿真实验教学课程,在教育信息化建设过程中已成为必选的技术方案。通过构建虚拟教育环境,允许学习者在数字空间中进行互动学习,这种方法在基础教育、职业培训、远程教育等关键教育领域已经展现出前所未有的变革潜力&…

Ethernet 系列(8)-- 基础学习::ARP

目录 1. ARP的目的: 1.1 什么是ARP 1.2 什么时候用ARP 2. ARP如何工作: 2.1 主机-主机的直接通信 2.2 主机-路由-主机的间接通信 3. ARP header: 1. ARP的目的: 1.1 什么是ARP: ARP-地址解析协议,是第3层地址&#xff…

uniapp组件实现省市区三级联动选择

1.导入插件 先将uni-data-picker组件导入我们的HBuilder项目中&#xff0c;在DCloud插件市场搜索uni-data-picker 点击下载插件并导入到我们的项目中 2.组件调用 curLocation &#xff1a;获取到的当前位置&#xff08;省市区&#xff09; <uni-data-picker v-slot:defa…

软件分享丨火绒应用商店

【资源分享】 资源名&#xff1a;火绒应用商店 官方网址&#xff1a;点击跳转 火绒应用商店是由火绒安全推出的一款独立软件。它提供了海量的应用程序&#xff0c;涵盖办公、社交、游戏、视频、工具等多种领域和类别&#xff0c;方便用户轻松找到所需的应用并进行一键下载安装…

信息化运维方案,实施方案,开发方案,信息中心安全运维资料(软件资料word)

1 编制目的 2 系统运行维护 2.1 系统运维内容 2.2 日常运行维护方案 2.2.1 日常巡检 2.2.2 状态监控 2.2.3 系统优化 2.2.4 软件系统问题处理及升级 2.2.5 系统数据库管理维护 2.2.6 灾难恢复 2.3 应急运行维护方案 2.3.1 启动应急流程 2.3.2 成立应急小组 2.3.3 应急处理过程 …

鸿蒙ArkTS中的布局容器组件(Column、Row、Flex、 Stack、Grid)

在鸿蒙ArkTS中&#xff0c;布局容器组件有很多&#xff0c;常见的有&#xff1a;   ⑴ Column&#xff1a;&#xff08;垂直布局容器&#xff09;&#xff1a;用于将子组件垂直排列。   ⑵ Row&#xff1a;&#xff08;水平布局容器&#xff09;&#xff1a;用于将子组件水…

RPC核心实现原理

目录 一、基本原理 二、详细步骤 三、额外考虑因素 RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;是一种计算机通信协议&#xff0c;也是一种用于实现分布式系统中不同节点之间进行通信和调用的技术。其实现原理主要可以分为以下几个步骤&…

Android Studio加载旧的安卓工程项目报错处理

文章目录 Invalid Gradle JDK configuration foundNDK not configuredCMake 3.10.2 was not found安装cmake适配cmake版本号 com.intellij.openapi.externalSystem.model.ExternalSystemExceptiongradle版本过低或下载不了下载gradle与依赖库超时替换gradle国内源替换Maven 仓库…

全星魅-物联网定位终端-北斗定位便携终端-北斗有源终端

在当今快速发展的物流运输行业中&#xff0c;精准定位与实时监控已成为确保货物安全与高效运输的关键因素。为了满足这一需求&#xff0c;QMCZ10作为一款集4G&#xff08;LTE Cat1&#xff09;通讯技术与智能定位功能于一体的终端产品&#xff0c;应运而生。它不仅具备普通定位…

银行卡二要素核验 API 对接说明

本文将介绍一种 银行卡二要素核验 API 对接说明&#xff0c;它可用于校验姓名和银行卡号的真实性和一致性。 接下来介绍下 银行卡二要素核验 API 的对接说明。 注册链接 点击链接注册&#xff0c;即可使用&#xff01; 申请流程 要使用 API&#xff0c;需要先到 银行卡二要…

关于elementui el-radio 赋值问题

今天遇到这样的问题&#xff1a; 点击的时候&#xff0c;同时选中 照抄官网&#xff01; 后来发现了问题&#xff1a; 也就是说如果你的版本太低&#xff0c;就不能用value&#xff0c;而得用label&#xff0c;于是修改 <el-radio-group v-model"searchTime"&g…

查缺补漏---子网划分方法(定长与不定长子网)

第一类题型&#xff1a; 方法&#xff1a;切蛋糕 例1&#xff1a; 现将一个 IP 网络划分成4个子网&#xff0c;若其中一个子网是 172.16.1.128/26&#xff0c;则下列网络中&#xff0c;不可能是另外三个子网之一的是&#xff08;&#xff09; A.172.16.1.0/25 B.172…