目录

  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 数据安全
  |     |   总文章阅读量:

前言

一开始用来记录 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

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