目录

  1. 1. 前言
  2. 2. docker安装oracle_11g
  3. 3. 静态数据脱敏
    1. 3.1. 识别敏感数据
    2. 3.2. 设置数据脱敏规则
    3. 3.3. 数据脱敏
      1. 3.3.1. 开启数据库归档模式
      2. 3.3.2. 全量备份
      3. 3.3.3. 数据库脱敏
    4. 3.4. DM数据库逻辑导出
    5. 3.5. DM数据库逻辑导入
↑

LOADING

第一次加载文章图片可能会花费较长时间

要不挂个梯子试试?(x

加载过慢请开启缓存 浏览器默认开启

Oracle数据库&达梦数据库

2024/11/8 DevOps Oracle
  |     |   总文章阅读量:次

前言

一开始用来记录 oracle 配置的,由于这学期学了达梦数据库的使用遂合并在一起 —— 2025.3.12

参考:

https://juejin.cn/post/7063141828706435085

https://blog.csdn.net/javaboyweng/article/details/125486242


docker安装oracle_11g

docker pull iatebes/oracle_11g

大概5g这样子,挺久的

然后启动容器,配置一下 oracle 数据库端口在1521

进入容器,快速开始

在oracle用户下,进入sqlplus,使用 sys as sysdba 登录,解锁 scott 用户,查询表数据。

su oracle

sqlplus /nolog

conn sys/123456 as sysdba

# alter user scott account unlock;
create user orcltt identified by orcltt; #创建用户
grant connect,resource,dba to orcltt; #权限
# conn scott/tiger (默认需要修改密码,重复输入新设置的密码即可)

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
EMP                            TABLE
SALGRADE                       TABLE

image-20241108003608841

其中的每个模式的名字都代表着一个用户,如 scott、sys


静态数据脱敏

识别敏感数据

对于示例的 DMHR.Employee 表

image-20250327174414056

employee_name、identity_card、email、phone_num、salary 都属于敏感信息


设置数据脱敏规则

针对 employee_name、identity_card、phone_num 数据脱敏:将原始数据的中间一段转换为 '*'

针对 email 数据脱敏:由于 email 数据具有唯一性约束,如果采用 '*' 替换,极大可能会违背约束。所以采用随机 MD5 值替换

针对 salary 数据脱敏:由于 salary 是 int 型数据,且不具备唯一性约束限制,最方便的脱敏方式是直接变成统一的数字


数据脱敏

开启数据库归档模式

Oracle 数据库要使用实时热备份功能必须要开启归档模式,达梦数据库也是如此

检查数据库环境是否为归档模式:

select arch_mode from v$database;

image-20250327214344035

返回 Y 才是开启

修改数据库为 MOUNT 状态:

image-20250327220827341

转换为配置状态,此时状态为 mount

对应的DDL:(注:oracle 需要 shutdown 关库才能修改状态)

ALTER DATABASE MOUNT;

开启归档模式:这里设置本地 LOCAL 归档,配置完需要先确定进行修改

image-20250327221402267

DDL:

alter database archivelog;
alter database add archivelog 'DEST=C:\Users\Asus\Desktop\archive, TYPE=LOCAL, FILE_SIZE=64, SPACE_LIMIT=0, ARCH_FLUSH_BUF_SIZE=0, HANG_FLAG=1';

路径配置完成之后,重新把状态转换为打开

image-20250327221705618

DDL:

ALTER DATABASE OPEN;

此时成功打开归档

image-20250327222003439


全量备份

backup database backupset 'db_bak_01';

默认备份文件存在 data/DAMENG/bak 目录内,修改 dm.ini 文件内的 BAK_PATH 参数,即可修改备份文件存放目录

image-20250328092604565

新建一个新的空的数据库实例 DAMENG_new,用于测试环境使用

数据库脱敏

姓名:

update DMHR.EMPLOYEE set EMPLOYEE_NAME=concat(left(EMPLOYEE_NAME,1),repeat('*',2));

image-20250328094359800

身份证:

update DMHR.EMPLOYEE set IDENTITY_CARD=concat(left(IDENTITY_CARD,5),repeat('*',9),right(IDENTITY_CARD,4));

image-20250328095009523

邮箱:

尝试用 * 脱敏

update DMHR.EMPLOYEE set EMAIL=concat(left(EMAIL,3),repeat('*',5), '@dameng.com');

这样子会提示违反唯一性约束,采用随机 md5 脱敏

update DMHR.EMPLOYEE set EMAIL=concat(left(EMAIL,3),lower(substring(md5(rand()),1,6)), '@dameng.com');

image-20250328095617865

手机号:

11位手机号,保留前3位和后4位,剩余部分脱敏

update DMHR.EMPLOYEE set PHONE_NUM=concat(left(PHONE_NUM,3),repeat('*',4),right(PHONE_NUM,4));

image-20250328095925154

薪水:

使用 cast(FLOOR(RAND()*10000)+1 as int) 生成一个 0~10000 的随机整数

update DMHR.EMPLOYEE set SALARY=cast(FLOOR(RAND()*10000)+1 as int);

image-20250328104023201

最终效果:

image-20250328104158108

注意DM默认是手动提交,执行完sql语句之后需要执行 COMMIT; 提交才能更新数据库


DM数据库逻辑导出

使用 dexp 命令行工具进行逻辑导出,工具在 dmdbms/bin 下

导出模式 DMHR 下的所有对象

dexp USERID=SYSDBA/password@127.0.0.1:5236 FILE=db_str.dmp LOG=db_str.log SCHEMAS=DMHR DIRECTORY=C:\Users\Asus\Desktop\DEXP

image-20250328105909039

或者导出表:

dexp USERID=SYSDBA/password@127.0.0.1:5236 FILE=db_str.dmp LOG=db_str.log TABLES=DMHR.EMPLOYEE DIRECTORY=C:\Users\Asus\Desktop\DEXP

DM数据库逻辑导入

使用 dimp 工具进行逻辑导入

dimp USERID=SYSDBA/password@127.0.0.1:5237 FILE=C:\Users\Asus\Desktop\DEXP\db_str.dmp DIRECTORY=C:\Users\Asus\Desktop\DEXP

image-20250328105954264

导入成功,查看新数据库

image-20250328111926808

成功脱敏并导入到测试环境