Oracle Data Redaction 是 Oracle Database 12c 引入的一个新特性。这个新特性是 Advanced Security 选件的一部分,可以实时保护显示给用户的数据,无需更改应用。
Oracle Database 12c 在执行查询时应用保护。存储的数据保持不变,要显示的数据则在离开数据库前动态转换。
不要将此特性与自版本 11g 起提供的 Oracle Data Masking 混淆。采用 Oracle Data Masking 时,将以屏蔽形式处理数据,更新后的数据存储在新数据块中。因此,Data Masking 更适合非生产环境。
下面是已有的其他一些有助于提高数据安全性的特性:
从许可角度来说,Oracle Data Masking 仅适用于企业版数据库,且需要 Advanced Security 许可。
我们可以创建编辑策略,指定必须满足哪些条件后才能对数据进行编辑并将其返回给用户。定义此类策略期间,DBA 可以指定必须对哪些列应用何种类型的保护。
用于创建保护规则的软件包名为 DBMS_REDACT。它包括五个用于管理规则的过程,以及一个用于更改完全编辑策略默认值的过程。
您可以使用以下任何一种方法在列级保护数据:
数据编辑可以帮助符合安全法规,如支付卡行业数据安全标准 (PCI DSS) 和 Sarbanes-Oxley。
它可以用于以下列数据类型:NUMBER、BINARY_FLOAT、BINARY_DOUBLE、CHAR、VARCHAR2、NCHAR、NVARCHAR2、DATE、TIMESTAMP、TIMESTAMP WITH TIME ZONE、BLOB、CLOB 和 NCLOB。
以下新数据库视图可用于获取有关现有编辑策略的信息:
DATAPUMP_EXP_FULL_DATABASE 角色包括 EXEMPT REDACTION POLICY 系统权限。这样,无需编辑即可使用 Data Pump 导出表。
如果试图导出表的用户未被授予 EXEMPT REDACTION POLICY 系统权限,将显示以下错误:
ORA-28081: Insufficient privileges - the command references a redacted object.
要导出与 Oracle 数据编辑策略相关的元数据,可以使用 expdp 实用程序的以下参数:
CONTENT=METADATA_ONLY
INCLUDE=RADM_FPTM,RADM_POLICY
为了从受活动编辑策略保护的表执行 CTAS,用户必须拥有查看源表上实际数据的权限。
EM 12c 示例中使用的 PDB:
访问 Oracle 数据编辑:
屏幕管理策略:
为除 SUPERVISOR 用户外的所有用户创建一个策略,编辑来自 EMPLOYEES 表的 salary 列的数据:
[oracle@dibutu ~]$ sqlplus funcionario/senha@localhost:1521/testpdb SQL*Plus: Release 12.1.0.1.0 Production on Wed Apr 2 10:22:46 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options SQL> select EMPLOYEE_ID, FIRST_NAME, SALARY from hr.employees WHERE ROWNUM < 5; EMPLOYEE_ID FIRST_NAME SALARY ----------- -------------------- ---------- 100 Steven 0 101 Neena 0 102 Lex 0 103 Alexander 0
[oracle@dibutu ~]$ sqlplus supervisor/senha@localhost:1521/testpdb SQL*Plus: Release 12.1.0.1.0 Production on Wed Apr 2 10:26:04 2014 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics and Real Application Testing options SQL> select EMPLOYEE_ID, FIRST_NAME, SALARY from hr.employees WHERE ROWNUM < 5; EMPLOYEE_ID FIRST_NAME SALARY ----------- -------------------- ---------- 100 Steven 24000 101 Neena 17000 102 Lex 17000 103 Alexander 9000
SQL> BEGIN DBMS_REDACT.ADD_POLICY (OBJECT_SCHEMA => 'HR', object_name => 'EMPLOYEES', policy_name => 'POLITICA_TESTE', expression => 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') != ''SUPERVISOR'''); DBMS_REDACT.ALTER_POLICY (OBJECT_SCHEMA => 'HR', object_name => 'EMPLOYEES', policy_name => 'POLITICA_TESTE', action => DBMS_REDACT.ADD_COLUMN, column_name => '"SALARY"', function_type => DBMS_REDACT.FULL ); END; / PL/SQL procedure successfully completed.
使用 SQLDeveloper 创建相同的策略:
Alex Zaballa 是 Oracle Ace 和 Oraworld 成员。Alex 目前是 Luanda 的高级 DBA,并为安哥拉财政部提供 DBA 服务。他有逾 14 年的 Oracle 技术经验,其职业生涯始于 Oracle 开发人员,参加了 ERP 软件从定义到部署的开发过程。2007 年,他移居安哥拉,获得一份高级 Oracle DBA 的工作机会,为 Jupiter 提供服务。作为拥有 OCM(Oracle 认证大师)凭证的全球资深高级专业人员中的一员,他擅长高可扩展性、高可用性和性能调优的设计和实施。他是一位备受尊敬的 OraWorld 成员,该小组常年与 Oracle 社区合作撰写文章、主办会议、召集网络研讨会以及开设 Oracle 数据库课程。OraWorld 成员是“Oracle 认证大师”和“Oracle ACE”。您可以通过以下链接关注该小组:https://www.facebook.com/oraworldteam https://twitter.com/oraworld_team www.oraworld-team.com。