数据库管理-第267期 23ai:Oracle Data Redaction演示(20241128)

数据库管理267期 2024-11-286

  • [数据库管理-第267期 23ai:Oracle Data Redaction演示(20241128)](#数据库管理-第267期 23ai:Oracle Data Redaction演示(20241128))
    • [1 示例表及数据](#1 示例表及数据)
    • [2 创建编校策略](#2 创建编校策略)
      • [2.1 名字全编校](#2.1 名字全编校)
      • [2.2 电话部分编校](#2.2 电话部分编校)
    • [3 DML演示](#3 DML演示)
      • [3.1 场景1](#3.1 场景1)
      • [3.2 场景2](#3.2 场景2)
    • 总结

数据库管理-第267期 23ai:Oracle Data Redaction演示(20241128)

作者:胖头鱼的鱼缸(尹海文)

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。

除授权转载并标明出处外,均为"非法"抄袭

在第256期对Oracle数据编校进行了介绍,本期对常见的数据脱敏展示场景进行演示。本次演示使用版本为23ai Free(RPM安装):

1 示例表及数据

针对姓名和电话号码进行脱敏展示。

bash 复制代码
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"
sqlplus / as sysdba
sql 复制代码
alter session set container=pdbprod1;
create user odr identified by odr;
grant dba to odr;
alter user odr default tablespace users quota unlimited on users;
conn odr/odr@127.0.0.1:1521/pdbprod1

drop table if exists customers;
create table customers (id number primary key,name varchar2(40),phonenumber number(13,0));
insert into customers values(1,'尹海文',13012345678);
insert into customers values(2,'胖头鱼',13023456789);
commit;


2 创建编校策略

2.1 名字全编校

sql 复制代码
conn / as sysdba
alter session set container=pdbprod1;
BEGIN
 DBMS_REDACT.ADD_POLICY(
   object_schema       => 'odr', 
   object_name         => 'customers', 
   column_name         => 'name',
   policy_name         => 'odr_customers_name_pol', 
   function_type       => DBMS_REDACT.FULL,
   expression          => '1=1');
END;
/

select * from odr.customers;

conn odr/odr@127.0.0.1:1521/pdbprod1
select * from customers;

这里可以看到在sys用户下,查询内容展示依然是未被编校的,而使用本用户则是内容展示已被编校,经测试拥有dba权限的用户不受编校策略影响。

2.2 电话部分编校

sql 复制代码
conn / as sysdba
alter session set container=pdbprod1;
BEGIN
 DBMS_REDACT.ADD_POLICY(
   object_schema       => 'odr', 
   object_name         => 'customers', 
   column_name         => 'phonenumber',
   policy_name         => 'odr_customers_phonenumber_pol', 
   function_type       => DBMS_REDACT.PARTIAL,
   expression          => '1=1',
   function_parameters => '0,4,8');
END;
/

在创建过程中发现该对象已经存在编校策略,因此需要删除原策略。

sql 复制代码
BEGIN
 DBMS_REDACT.drop_policy(
   object_name         => 'customers', 
   object_schema       => 'odr', 
   policy_name         => 'odr_customers_name_pol'
   );
END;
/

BEGIN
 DBMS_REDACT.ADD_POLICY(
   object_schema       => 'odr', 
   object_name         => 'customers', 
   column_name         => 'phonenumber',
   policy_name         => 'odr_customers_phonenumber_pol', 
   function_type       => DBMS_REDACT.PARTIAL,
   expression          => '1=1',
   function_parameters => '0,4,8');
END;
/

conn odr/odr@127.0.0.1:1521/pdbprod1
select * from customers;


由本测试也可以得出,Oracle数据编校策略的限制之一,就是一个对象只允许存在一个编校策略,目前我认为这限制了数据编校的使用场景。

3 DML演示

3.1 场景1

这里做一个数据使用数据编校后展示数据更新原数据的操作演示。

sql 复制代码
conn odr/odr@127.0.0.1:1521/pdbprod1
update customers set phonenumber=phonenumber where id=1;
commit;

conn / as sysdba
alter session set container=pdbprod1;
select * from odr.customers;

这种情况下对原数据无影响。

3.2 场景2

这里尝试用编校后查询结果更新已有数据。

sql 复制代码
conn odr/odr@127.0.0.1:1521/pdbprod1
update customers set phonenumber=(select phonenumber from customers where id=2) where id=1;

这里因为使用编校后数据,会提示权限不足,无法操作。经过测试拥有dba权限的用户因为不受编校策略影响也不会使用编校后的展示数据来更新已有数据。

由此可以看到当前版本以及本次操作的权限控制下,在有数据编校后的对象进行DML操作时,是不会因为数据编校后展示结果的改变而错误修改数据的。

总结

本期对Oracle Data Redaction的实际使用效果进行了展示。

老规矩,知道写了些啥。

相关推荐
半瓶啤酒一醉方休1 分钟前
【数据库】Unity 使用 Sqlite 数据库
数据库
skywalk816316 分钟前
GitHub - riscv-software-src/riscv-isa-sim: Spike, a RISC-V ISA Simulator
开发语言·数据库
权权权权里34 分钟前
设计一个利用事务特性可以阻塞线程的排他锁,并且通过注解和 AOP 来实现
数据库·oracle
多喝清晨的粥40 分钟前
Mac MySQL 8.0.30的安装(保姆级教程)
数据库·mysql·macos
Rinai_R1 小时前
MySQL学习记录1【DQL和DCL】
数据库·笔记·学习·mysql
Linux运维老纪1 小时前
MySQL常用命令之汇总(Summary of Commonly Used Commands in MySQL)
服务器·数据库·计算机网络·mysql·云计算·运维开发
厦0042 小时前
【MySQL】MVCC详解, 图文并茂简单易懂
数据库·sql·mysql·mvcc·并发控制·undo日志
扶梦4112 小时前
腾讯云AI代码助手编程挑战赛-解忧助手
java·linux·数据库
土了个豆子的2 小时前
线性表的接口定义及使用
开发语言·数据结构·数据库
Bytebase3 小时前
自然语言转 SQL:通过 One API 将 llama3 模型部署在 Bytebase SQL 编辑器
运维·数据库·dba·开发者·数据库管理·devops