Oracle 12c的高级安全特性包含Transparent Data Encryption(透明的数据加密)和Oracle Data Redaction(数据编写),通过这两个特性,可以对数据进行较高的安全控制,以防止非法的访问,上篇介绍了Transparent Data Encryption(透明的数据加密),本篇将对Oracle Data Redaction(数据编写)进行介绍和演示。
1 数据编写概述
通过Oracle提供的数据编写特性,可以对应用程序执行的查询的结果进行屏蔽(编写),从而隐藏真实的数据。可以通过以下几种方法中的一种对列的数据进行编写:
- 完全编写:保护列的所有内容,返回值的类型取决于列的数据类型,对于数据值,返回值0,对于字符类型的列,返回空格;
- 部分编写:只更改部分信息,例如,将手机号码进行编写,后三位之后以*号代替;
- 正则表达式编写:使用正则表达式,编写匹配的内容;
- 随机编写:执行查询时,返回随机的值以替代真实的值;
- 无编写:允许测试编写策略的内部工作情况,对当前运行的查询的结果没有任何影响。常用于编写策略的测试。
2 配置数据编写(命令行方式)
2.1 内置程序包
通过Oracle提供的程序包DBMS_REDACT,可以创建数据编写策略,指定必须满足哪些条件后才能对数据进行编写并将其返回给用户,定义此类策略期间,DBA可以指定必须对哪些列应用何种类型的保护。DBMS_REDACT包含的过程如下:
存储过程 |
描述信息 |
DBMS_REDACT.ADD_POLICY |
在表或视图上增加数据编写策略 |
DBMS_REDACT.ALTER_POLICY |
修改数据编写策略 |
DBMS_REDACT.UPDATE_FULL_REDACTION_VALUES |
全局更新给定数据类型的全部编写值,在使用更新后的值之前,需重启实例 |
DBMS_REDACT.ENABLE_POLICY |
激活数据编写策略 |
DBMS_REDACT.DISABLE_POLICY |
禁用数据编写策略 |
DBMS_REDACT.DROP_POLICY |
删除数据编写策略 |
2.2 DBMS_REDACT.ADD_POLICY通用语法
DBMS_REDACT.ADD_POLICY (
object_schema IN VARCHAR2 := NULL,
object_name IN VARCHAR2 := NULL,
policy_name IN VARCHAR2,
policy_description IN VARCHAR2 := NULL,
column_name IN VARCHAR2 := NULL,
column_description IN VARCHAR2 := NULL,
function_type IN BINARY_INTEGER := DBMS_REDACT.FULL,
function_parameters IN VARCHAR2 := NULL,
expression IN VARCHAR2,
enable IN BOOLEAN := TRUE,
regexp_pattern IN VARCHAR2 := NULL,
regexp_replace_string IN VARCHAR2 := NULL,
regexp_position IN BINARY_INTEGER :=1,
regexp_occurrence IN BINARY_INTEGER :=0,
regexp_match_parameter IN VARCHAR2 := NULL);
2.3 DBMS_REDACT.ADD_POLICY示例
2.3.1 创建完全数据编写策略
1)语法结构
DBMS_REDACT.ADD_POLICY (
object_schema IN VARCHAR2 := NULL,
object_name IN VARCHAR2,
column_name IN VARCHAR2 := NULL,
policy_name IN VARCHAR2,
function_type IN BINARY_INTEGER := NULL,
expression IN VARCHAR2,
enable IN BOOLEAN := TRUE);
2)示例一ÿ