概述
本实验介绍了适用于 Enterprise Manager 的 Oracle 数据屏蔽和子集 (DMS) 包的各种特性和功能。 它使用户有机会学习如何配置这些功能,以便在非生产环境中保护他们的敏感数据。
此实验申请地址在这里,时间为60分钟。
本实验也是DB Security Advanced研讨会的的第8个实验,即Lab 8: Data Masking and Subsetting (DMS)。此产品的中文名称为“数据脱敏与子集包”
实验帮助在这里。
本实验使用的产品为Oracle Enterprise Manager 13.5。
本实验只生成1个实例,既包括Enterprise Manager,也包括源数据库。我的特定环境为:
- 158.101.1.3 DBSEC-LAB
登录OEM(Oracle Enterprise Manager 13c)的信息为:
- URL:https://<DBSEC-LAB IP地址>:7803/em (即 https://158.101.1.3:7803/em)
- 用户名:SYSMAN
- 口令:Oracle123
Task 1: Import Schema Structure
登录OEM。
进入Enterprise > Quality Management > Application Data Modeling
菜单。
简要回顾安全测试数据管理图表以熟悉该过程:
然后单击Create以增加新的ADM(Application Data Model),其属性如下:
- ADM名称:Employee_ADM
- 源数据库:cdb1_PDB1
- Application Suite type:Custom Application Suite
- Create One Application For Each Schema:选中
注意,其也支持Oracle Enterprise Business Suite (EBS) 和 Fusion Applications应用类型。
单击Continue,如图,使用预定义用户DMS_ADMIN(口令为Oracle123)登录。注意:也可以使用 SYS用户。在生产环境中,您可以将 DMS_ADMIN 的权限限制为仅执行其职责所需的包。
为ADM选中EMPLOYEESEARCH_DEV schema。
单击Continue,单击Submit。提交任务(任务名METADATA_COLLECTION_85)。
任务的最初状态:
作业完成后,EMPLOYEE_ADM 将不再处于锁定、不可编辑状态。 通过刷新此页面(刷新图标)检查状态,并在 Employee_ADM 的最新工作状态为“Succeeded”时继续。
Task 2: Enhance the Meta-Model
选中ADM Employee_ADM
并单击Edit。
Credential Name选中DMS_ADMIN后,单击Continue。
在 Edit Application Data Model 屏幕中,请注意 EMPLOYEESEARCH_DEV 的应用程序已基于模式创建。
现在通过单击Referential Relationships选项卡查看在 ADM 中捕获的参考关系。 现在 OEM知道外键,它会自动将相同的格式掩码应用于子表
如果数据库管理引用关系,ADM 将自动捕获这些。 如果这些由应用程序管理,您将需要手动定义这些。但此处就不演示了。
Task 3: Use Pre-Defined Sensitive Column Types
进入Enterprise > Quality Management > Application Data Modeling
菜单。
展开Actions菜单,选择子菜单 Sensitive Column Types子菜单。
查看随DMS提供的默认的敏感列发现模板。
把鼠标放到列上,可以看到敏感列的默认定义。
注:
- 此过程使用Oracle正则表达式,它与IEEE便携式操作系统接口(POSIX)正则表达式标准和Unicode联盟- 的Unicode正则表达式指南兼容
在这种情况下,搜索类型已设置为Or条件,因此如果满足上述任何条件,将导致匹配
Task 4: Create a New Sensitive Column Type
单击Create,创建一个新的敏感列类型:
Task 5: Create a New Sensitive Column Type using Pre-Defined Templates
选择EMAL_ID,选择Create Like…
。然后输入红框中的部分,其它都是自动显示的。
Task 6: Create a New Masking Format
进入菜单Enterprise > Quality Management > Data Masking Formats Library
。查看默认的Data Masking Format:
单击Create,输入下图中上部信息后,再在右侧通过点击Add下拉框中选择Random Strings添加Format Entries。然后单击Go。通过2次添加,最终结果如下:
注:
- EMAIL_ORA是之前创建的敏感列类型
- 当您使用这种掩蔽算法时,它将用一个新值替换初始值,该值是由开头的6到8个字符的随机字符串拼接固定值@ercoal而成的。
- 在底部,您可以看到将使用的新值的示例
Task 7: Manually Identify Sensitive Columns
进入菜单Enterprise > Quality Management > Application Data Modeling
。
选中ADM Employee_ADM
后,单击Edit
。
数据库秘钥选择DMS_ADMIN
。单击Continue
。
选择Sensitive Columns
标签页。目前,没有发现敏感列,因此您必须启动搜索。单击Create Discovery Job…
选项。
选中EMPLOYEESEARCH_DEV
schema,列的话排除EMAIL_ID, ISBN_10, ISBN_13, and UNIVERSAL_PRODUCT_CODE 共4列。然后单击Continue
。单击Submit。
任务完成后,单击Discover Results…,展开视图(View->Expand All),可以发现目前这些列的敏感状态为Undefined。
我们必须将所有要屏蔽的列的敏感状态设置为敏感。复选中以下列(格式为表名.列名):
- DEMO_HR_SUPPLEMENATL_DATA.PAYMENT_ACCT_NO
- DEMO_HR_EMPLOYEES.EMAIL
- DEMO_HR_USERS.EMAIL
- DEMO_HR_EMPLOYEES.FIRST_NAME
- DEMO_HR_EMPLOYEES.LAST_NAME
- DEMO_HR_SUPPLEMENATL_DATA.ROUTING_NUMBER
单击Set Sensitive Status。
注意到,状态变为sensitive了:
最终结果如下,总共有6个敏感列:
最后,单击Save and Return
。
Task 8: Create Data Masking Definitions
进入Enterprise > Quality Management > Data Masking Definitions
菜单。单击Create创建数据脱敏定义。
如下图输入信息,选中ADM Employee_ADM
。单击Add。
如果需要口令,请选择Named中的DMS_ADMIN
,并点击Login。
单击Search,下方会显示之前标准的6个敏感列,选中所有,然后单击Add。
先点击OK保存以下,后续在定义脱敏格式。
Task 9: Format Columns Using the Format Library and Masking Primitive
接上一任务。接下来对敏感列定义脱敏格式:
要使用格式库中的现有格式,请单击[Import format]按钮,然后选择之前定义的Mask Oracle Corp Email
:
单击Sample下的图标可生成示例数据:
单击OK。
接下来用另一种方式操作第2列,可以看到第1列定义完后,图标也变了。
我们用新的方法,在线定义脱敏格式,如下图:
选择Shuffle,单击Add后,单击OK。
第3列DEMO_HR_EMPLOYEES.LASTNAME,也选择Shuffle。
最后,点击OK保存。
Task 10: Generate Data Masking Scripts
在步骤 9 中定义所有数据屏蔽格式后,屏蔽定义的状态为“脚本未生成”(Script Not Generated)。
单击Generate Script生成脚本。秘钥仍选择DMS_ADMIN。
在Script Generation Options部分,选择Mask In-Database,这表示:通过用掩码数据替换数据库中的敏感数据来脱敏指定的数据库(通常从生产中复制)。
而另一个选项Mask In-Export表示:使用 Oracle 数据泵从指定的源数据库(通常是生产)导出屏蔽数据。
最后单击Submit。
在脚本生成过程中。状态会由Script Generation Job Scheduled,变为Generating Script,最终为Script Generated。
查看脚本:
如下:
说明:
- Oracle Data Masking Pack 执行一系列验证步骤,以确保数据脱敏过程顺利完成且没有错误。它执行的一项检查是验证脱敏格式。这是数据脱敏过程中的必要步骤,以确保选择的脱敏格式满足数据库和应用程序完整性要求
- 这些要求可能包括因为唯一性约束为被脱敏的列生成唯一值,或生成满足列长度或类型要求的值
- 成功完成验证检查后,Oracle Data Masking Pack 会生成基于 PL/SQL 的脱敏脚本,该脚本会传输到目标数据库执行
- Oracle Data Masking Pack 使用高效且稳健的机制来创建脱敏数据
- Oracle Data Masking Pack 执行批量操作以使用包含脱敏数据的相同表快速替换包含敏感数据的表,同时保留原始数据库约束、引用完整性和相关访问结构(例如 INDEX 和 PARTITION)以及访问权限(例如 GRANT)
- 与传统上因为执行表更新而速度较慢的屏蔽过程不同,Oracle Data Masking Pack 利用数据库中的内置优化来禁用数据库日志记录并并行执行以快速创建原始表的屏蔽替换
- 包含敏感数据的原始表从数据库中完全删除,不再可访问
小技巧:
- 该脚本可以在具有完全相同schema结构的其他目标上执行
- 您可以通过单击 [Save Script] 在本地保存脚本
Task 11: Execute the Data Masking Scripts
要执行 Data Masking 脚本,您需要一个 SSH 密钥对,不要使用 putty 密钥对,而是按照以下说明创建一个 RSA 密钥对。
cd ~
ssh-keygen -b 2048 -t rsa
cd .ssh
cat id_rsa >/tmp/rsa_priv
cat id_rsa.pub >>authorized_keys
使用新的 SSH 密钥更新命名凭据(Named Credentials)。
进入Enterprise > Quality Management > Data Masking Definitions
菜单。单击EMPLOYEE_DATA_MASK,选择Edit进行更新。
此略,其实就是设置oracle用户通过private key登录。
进入Enterprise > Quality Management > Data Masking Definitions
菜单。选中 EMPLOYEE_DATA_MASK,单击Schedule Job。
选中Mask In-Databas。并勾选The selected target is not a production database.。
脚本目录和脚本名称设为如下:
- /home/oracle/DBSecLab/livelabs/dms
- mask_empdata_in-db_20220522.sql
Host Credentials部分,选择Named以及之前设置的OS_ORACLE_SSH。
数据库的秘钥仍选择DMS_ADMIN。
单击Submit,最后确定任务成功,如下图:
Task 12: Compare the Pre-Masked Data vs. the Post-Masked Data
作业成功完成后,在开发和生产环境中查询脱敏数据进行前后对比。
Task 13: Create Data Subsetting Definitions
Task 14: Execute Data Subsetting Scripts
Task 15: Compare the Pre-Subsetted Data vs. the Post-Subsetted Data
Task 16: (Optional) Reset the Labs Environment
Appendix: About the Product
概述
Oracle Data Masking Pack for Enterprise Manager 是 Oracle 全面的数据库安全解决方案组合的一部分,可帮助组织遵守数据隐私和保护要求,例如 Sarbanes-Oxley (SOX)、支付卡行业 (PCI) 数据安全标准 (DSS)、健康 保险流通与责任法案 (HIPAA)、欧盟通用数据保护条例 (GDPR) 和即将出台的加州消费者隐私法案 (CCPA),以及许多限制使用实际客户数据的法律。
使用 Oracle Data Masking,信用卡或社会保险号等敏感信息可以替换为实际值,从而允许生产数据安全地用于开发、测试或与外包或离岸合作伙伴共享以用于其他非生产目的。 Oracle Data Masking 使用模板库和格式规则,一致地转换数据以保持应用程序的引用完整性。
数据屏蔽(也称为数据加扰和数据匿名化)是使用基于屏蔽规则的真实但经过清理的数据替换从生产数据库复制到测试或非生产数据库的敏感信息的过程。 数据屏蔽几乎适用于所有需要与其他非生产用户共享机密或受监管数据的情况; 例如,内部用户(如应用程序开发人员)或外部业务合作伙伴(如离岸测试公司或供应商和客户)。 这些非生产用户需要访问一些原始数据,但不需要查看每个表的每一列,尤其是在信息受到政府法规保护的情况下。
数据屏蔽允许组织生成具有与原始数据相似特征的真实且功能齐全的数据,以替换敏感或机密信息。这与加密或Virtual Private Database形成对比,后者只是隐藏数据,允许使用适当的访问权限或密钥检索原始数据。通过数据屏蔽,无法检索或访问原始敏感数据。姓名、地址、电话号码和信用卡详细信息是需要保护信息内容免受不当可见性的数据示例。实时生产数据库环境包含有价值的机密数据——对这些信息的访问受到严格控制。但是,**每个生产系统通常都有复制的开发副本,并且对此类测试环境的控制不那么严格。这大大增加了数据可能被不当使用的风险。**数据屏蔽可以修改敏感的数据库记录,使它们保持可用,但不包含机密或个人身份信息。然而,脱敏的测试数据在外观上与原始数据相似,以确保应用程序的完整性。
为什么需要数据屏蔽?
您需要它有几个原因,基于以下挑战:
- 个人可识别和敏感数据正在与开发和测试组中没有业务需要了解的各方共享。
- 使用包含个人信息或任何其他敏感信息的操作数据库用于测试目的。 所有已识别的敏感细节和内容在使用前都应删除或修改到无法辨识。
- 在分发到开发和 QA 环境之前,在敏感生产数据的脱敏和清理方面没有既定的、记录在案的程序和数据清理标准的执行。
- 为开发和 QA 环境提供正确脱敏的数据所需的步骤和过程非常耗时、手动且不一致。
实现使用 DMS 的好处
- 通过屏蔽敏感信息实现数据的商业价值最大化
- 通过不扩散敏感的生产信息来最小化合规边界
- 通过子集数据降低测试和开发环境的存储成本
- 自动发现敏感数据和父子关系
- 提供全面的屏蔽格式、屏蔽转换、子集技术和选择应用程序模板
- 在数据库中或在文件上(通过从源数据库中提取数据)执行数据脱敏和子集
- 脱敏与数据子集支持Oracle 和非 Oracle 数据库
- 脱敏和子集托管在 Oracle 云上的 Oracle 数据库
- 在脱敏和子集化期间保持数据完整性,并提供更多独特功能
- 与选定的 Oracle 测试、安全和集成产品集成。
Want to Learn More?
文档:Oracle Data Masking & Subsetting Pack 12.2
视频:Oracle Data Masking & Subsetting - Advanced Use Cases (June 2019)
Acknowledgements
作者为Hakim Loumi,数据库安全的PM。贡献者为Rene Fontcha。