1. 首页 > Oracle教程 > 正文

Oracle教程FG394-PDB TDE加密

本文档风哥主要介绍Oracle PDB透明数据加密(TDE)相关知识,包括PDB TDE加密的概念、PDB TDE加密的类型、PDB TDE加密的配置、PDB表空间加密、PDB列加密、PDB TDE加密验证、PDB TDE加密故障处理等内容,由风哥教程参考Oracle官方文档Security内容编写,适合DBA人员在学习和测试中使用,如果要应用于生产环境则需要自行确认。

Part01-基础概念与理论知识

1.1 PDB TDE加密的概念

Oracle PDB透明数据加密(Transparent Data Encryption,TDE)是一种数据加密技术,用于在数据库级别加密敏感数据。TDE对应用程序透明,无需修改应用程序代码即可实现数据加密。TDE使用加密密钥对数据进行加密和解密,确保数据在存储和传输过程中的安全性。更多视频教程www.fgedu.net.cn

Oracle PDB TDE加密的特点:

  • 透明加密,对应用程序透明
  • 支持表空间级别和列级别加密
  • 使用行业标准加密算法
  • 支持密钥管理和轮换
  • 不影响数据库性能

1.2 PDB TDE加密的类型

Oracle PDB TDE加密的类型包括:

  • 表空间加密(Tablespace Encryption):加密整个表空间的所有数据
  • 列加密(Column Encryption):加密表中的特定列
  • AES128加密:使用AES128算法加密
  • AES192加密:使用AES192算法加密
  • AES256加密:使用AES256算法加密
  • 3DES168加密:使用3DES168算法加密

1.3 PDB TDE加密的优势

Oracle PDB TDE加密的优势:

  • 数据安全:保护敏感数据的安全性
  • 合规性:满足数据保护法规要求
  • 透明性:对应用程序透明,无需修改代码
  • 性能优化:最小化性能影响
  • 密钥管理:支持密钥管理和轮换
风哥提示:PDB TDE加密是保护敏感数据的重要手段,建议在生产环境中使用AES256加密算法,并定期轮换加密密钥。

Part02-生产环境规划与建议

2.1 PDB TDE加密规划

Oracle PDB TDE加密规划要点:

# TDE加密规划
– 敏感数据识别:识别需要加密的敏感数据
– 加密类型选择:表空间加密或列加密
– 加密算法选择:AES128、AES192、AES256
– 密钥管理:密钥库配置、密钥轮换

# 表空间加密规划
– 加密整个表空间:适用于高度敏感数据
– 加密算法选择:推荐使用AES256
– 密钥管理:使用密钥库管理密钥
– 性能影响:评估加密对性能的影响

# 列加密规划
– 加密特定列:适用于部分敏感数据
– 加密算法选择:推荐使用AES256
– 密钥管理:使用密钥库管理密钥
– 性能影响:评估加密对查询性能的影响

# 密钥管理规划
– 密钥库类型:软件密钥库、硬件安全模块
– 密钥轮换策略:定期轮换主密钥
– 密钥备份策略:备份密钥库和主密钥
– 密钥恢复策略:制定密钥恢复流程

2.2 PDB TDE加密安全策略

Oracle PDB TDE加密安全策略:

  • 加密算法:使用AES256加密算法
  • 密钥管理:使用硬件安全模块(HSM)
  • 密钥轮换:定期轮换主密钥
  • 密钥备份:定期备份密钥库
  • 密钥审计:审计密钥操作
# 安全配置建议
– 使用AES256加密算法
– 使用硬件安全模块(HSM)
– 定期轮换主密钥
– 定期备份密钥库
– 启用密钥审计
– 限制密钥库访问权限

2.3 PDB TDE加密最佳实践

Oracle PDB TDE加密最佳实践:

  • 使用AES256:使用AES256加密算法
  • 硬件安全模块:使用硬件安全模块(HSM)
  • 定期轮换密钥:定期轮换主密钥
  • 备份密钥库:定期备份密钥库
  • 审计密钥操作:审计密钥操作
生产环境建议:TDE加密是保护敏感数据的重要手段,建议使用AES256加密算法和硬件安全模块(HSM),定期轮换密钥和备份密钥库。学习交流加群风哥微信: itpux-com

Part03-生产环境项目实施方案

3.1 PDB TDE加密配置

3.1.1 配置密钥库

# 1. 创建密钥库目录
$ mkdir -p /oracle/app/oracle/keystore
$ chmod 700 /oracle/app/oracle/keystore

# 2. 连接到CDB
$ sqlplus / as sysdba

SQL> alter session set container=CDB$ROOT;

Session altered.

# 3. 创建软件密钥库
SQL> administer key management create keystore ‘/oracle/app/oracle/keystore’ identified by “KeystorePassword123!”;

keystore altered.

# 4. 打开密钥库
SQL> administer key management set keystore open identified by “KeystorePassword123!”;

keystore altered.

# 5. 设置主密钥
SQL> administer key management set key identified by “KeystorePassword123!” with backup;

keystore altered.

# 6. 设置自动打开密钥库
SQL> administer key management set encryption key identified by “KeystorePassword123!” with backup;

keystore altered.

# 7. 验证密钥库状态
SQL> select keystore_type, status, wallet_type from v$encryption_wallet;

KEYSTORE_TYPE STATUS WALLET_TYPE
—————— ——– ——————–
SOFTWARE OPEN LOCAL

# 8. 验证主密钥
SQL> select key_id, creation_time, activation_time, state from v$encryption_keys;

KEY_ID CREATION_TIME ACTIVATION_TIME STATE
———————————– ——————- ——————- ———-
AQAAAAAAABAAAAAAAABAAAAAAAABAAAAAAA 31-MAR-26 10:00:00 31-MAR-26 10:00:00 ACTIVATED

3.1.2 配置PDB密钥库

# 1. 连接到PDB
SQL> alter session set container=SALESPDB;

Session altered.

# 2. 验证PDB密钥库状态
SQL> select con_id, keystore_type, status, wallet_type from v$encryption_wallet;

CON_ID KEYSTORE_TYPE STATUS WALLET_TYPE
———- —————— ——– ——————–
4 SOFTWARE OPEN LOCAL

# 3. 验证PDB主密钥
SQL> select con_id, key_id, creation_time, activation_time, state from v$encryption_keys;

CON_ID KEY_ID CREATION_TIME ACTIVATION_TIME STATE
———- ———————————– ——————- ——————- ———-
4 AQAAAAAAABAAAAAAAABAAAAAAAABAAAAAAA 31-MAR-26 10:00:00 31-MAR-26 10:00:00 ACTIVATED

# 4. 测试加密功能
SQL> create tablespace test_enc_ts datafile ‘/oradata/fgedudb/test_enc_ts01.dbf’ size 100m encryption using ‘AES256’ encrypt;

Tablespace created.

# 5. 验证加密表空间
SQL> select tablespace_name, encryptionalg, encrypted, status from dba_tablespaces where tablespace_name = ‘TEST_ENC_TS’;

TABLESPACE_NAME ENCRYPTIONALG ENC STATUS
————— ————- — ——–
TEST_ENC_TS AES256 YES ONLINE

# 6. 删除测试表空间
SQL> drop tablespace test_enc_ts including contents and datafiles;

Tablespace dropped.

3.2 PDB表空间加密

3.2.1 创建加密表空间

# 1. 连接到PDB
SQL> alter session set container=SALESPDB;

Session altered.

# 2. 创建加密表空间
SQL> create tablespace secure_fgfgfgsales_ts datafile ‘/oradata/fgedudb/secure_fgfgfgsales_ts01.dbf’ size 500m encryption using ‘AES256’ encrypt;

Tablespace created.

# 3. 验证加密表空间
SQL> select tablespace_name, encryptionalg, encrypted, status from dba_tablespaces where tablespace_name = ‘SECURE_SALES_TS’;

TABLESPACE_NAME ENCRYPTIONALG ENC STATUS
————— ————- — ——–
SECURE_SALES_TS AES256 YES ONLINE

# 4. 创建用户并设置默认表空间
SQL> create user secure_user identified by secure_password default tablespace secure_fgfgfgsales_ts;

User created.

SQL> grant create session, connect, resource to secure_user;

Grant succeeded.

# 5. 创建加密表
SQL> create table secure_user.customers (
id number primary key,
name varchar2(100),
email varchar2(100),
phone varchar2(20),
credit_card varchar2(20),
ssn varchar2(20)
);

Table created.

# 6. 插入测试数据
SQL> insert into secure_user.customers values (1, ‘风哥1号’, ‘zhangsan@fgedu.net.cn’, ‘13800138000’, ‘1234567890123456’, ‘123456789’);

1 row created.

SQL> insert into secure_user.customers values (2, ‘风哥2号’, ‘lisi@fgedu.net.cn’, ‘13900139000’, ‘2345678901234567’, ‘234567890’);

1 row created.

SQL> insert into secure_user.customers values (3, ‘王五’, ‘wangwu@fgedu.net.cn’, ‘13700137000’, ‘3456789012345678’, ‘345678901’);

1 row created.

SQL> commit;

Commit complete.

# 7. 验证数据
SQL> select * from secure_user.customers;

ID NAME EMAIL PHONE CREDIT_CARD SSN
———- ———- ———————- ————— —————— ———-
1 风哥1号 zhangsan@fgedu.net.cn 13800138000 1234567890123456 123456789
2 风哥2号 lisi@fgedu.net.cn 13900139000 2345678901234567 234567890
3 王五 wangwu@fgedu.net.cn 13700137000 3456789012345678 345678901

# 8. 查看加密信息
SQL> select table_name, tablespace_name, encryptionalg from dba_tables where table_name = ‘CUSTOMERS’;

TABLE_NAME TABLESPACE_NAME ENCRYPTIONALG
————— —————– ————–
CUSTOMERS SECURE_SALES_TS AES256

3.2.2 转换现有表空间为加密表空间

# 1. 创建未加密表空间
SQL> create tablespace unsecure_ts datafile ‘/oradata/fgedudb/unsecure_ts01.dbf’ size 100m;

Tablespace created.

# 2. 验证表空间未加密
SQL> select tablespace_name, encryptionalg, encrypted, status from dba_tablespaces where tablespace_name = ‘UNSECURE_TS’;

TABLESPACE_NAME ENCRYPTIONALG ENC STATUS
————— ————- — ——–
UNSECURE_TS NO ONLINE

# 3. 创建表并插入数据
SQL> create table secure_user.unsecure_table (id number, data varchar2(100)) tablespace unsecure_ts;

Table created.

SQL> insert into secure_user.unsecure_table values (1, ‘Unencrypted Data’);

1 row created.

SQL> commit;

Commit complete.

# 4. 转换表空间为加密表空间
SQL> alter tablespace unsecure_ts encryption online using ‘AES256’ encrypt;

Tablespace altered.

# 5. 验证表空间已加密
SQL> select tablespace_name, encryptionalg, encrypted, status from dba_tablespaces where tablespace_name = ‘UNSECURE_TS’;

TABLESPACE_NAME ENCRYPTIONALG ENC STATUS
————— ————- — ——–
UNSECURE_TS AES256 YES ONLINE

# 6. 验证数据
SQL> select * from secure_user.unsecure_table;

ID DATA
———- —————–
1 Unencrypted Data

# 7. 查看加密信息
SQL> select table_name, tablespace_name, encryptionalg from dba_tables where table_name = ‘UNSECURE_TABLE’;

TABLE_NAME TABLESPACE_NAME ENCRYPTIONALG
—————– ————— ————–
UNSECURE_TABLE UNSECURE_TS AES256

3.3 PDB列加密

3.3.1 创建加密列

# 1. 创建未加密表空间
SQL> create tablespace partial_enc_ts datafile ‘/oradata/fgedudb/partial_enc_ts01.dbf’ size 100m;

Tablespace created.

# 2. 创建带加密列的表
SQL> create table secure_user.partial_enc_table (
id number,
name varchar2(100),
email varchar2(100),
phone varchar2(20) encrypt using ‘AES256’,
credit_card varchar2(20) encrypt using ‘AES256’,
ssn varchar2(20) encrypt using ‘AES256’
) tablespace partial_enc_ts;

Table created.

# 3. 插入测试数据
SQL> insert into secure_user.partial_enc_table values (1, ‘风哥1号’, ‘zhangsan@fgedu.net.cn’, ‘13800138000’, ‘1234567890123456’, ‘123456789’);

1 row created.

SQL> insert into secure_user.partial_enc_table values (2, ‘风哥2号’, ‘lisi@fgedu.net.cn’, ‘13900139000’, ‘2345678901234567’, ‘234567890’);

1 row created.

SQL> insert into secure_user.partial_enc_table values (3, ‘王五’, ‘wangwu@fgedu.net.cn’, ‘13700137000’, ‘3456789012345678’, ‘345678901’);

1 row created.

SQL> commit;

Commit complete.

# 4. 验证数据
SQL> select * from secure_user.partial_enc_table;

ID NAME EMAIL PHONE CREDIT_CARD SSN
———- ———- ———————- ————— —————— ———-
1 风哥1号 zhangsan@fgedu.net.cn 13800138000 1234567890123456 123456789
2 风哥2号 lisi@fgedu.net.cn 13900139000 2345678901234567 234567890
3 王五 wangwu@fgedu.net.cn 13700137000 3456789012345678 345678901

# 5. 查看加密列信息
SQL> select table_name, column_name, encryption_alg, salt from dba_encrypted_columns where table_name = ‘PARTIAL_ENC_TABLE’;

TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SALT
——————- ————– ————– ———-
PARTIAL_ENC_TABLE PHONE AES256 YES
PARTIAL_ENC_TABLE CREDIT_CARD AES256 YES
PARTIAL_ENC_TABLE SSN AES256 YES

# 6. 查看未加密列
SQL> select column_name, data_type from dba_tab_columns where table_name = ‘PARTIAL_ENC_TABLE’ order by column_id;

COLUMN_NAME DATA_TYPE
————- ———-
ID NUMBER
NAME VARCHAR2
EMAIL VARCHAR2
PHONE VARCHAR2
CREDIT_CARD VARCHAR2
SSN VARCHAR2

3.3.2 为现有表添加加密列

# 1. 创建未加密表
SQL> create table secure_user.add_enc_column (
id number,
name varchar2(100),
email varchar2(100)
);

Table created.

# 2. 插入测试数据
SQL> insert into secure_user.add_enc_column values (1, ‘风哥1号’, ‘zhangsan@fgedu.net.cn’);

1 row created.

SQL> commit;

Commit complete.

# 3. 添加加密列
SQL> alter table secure_user.add_enc_column add (phone varchar2(20) encrypt using ‘AES256’);

Table altered.

SQL> alter table secure_user.add_enc_column add (credit_card varchar2(20) encrypt using ‘AES256’);

Table altered.

# 4. 更新数据
SQL> update secure_user.add_enc_column set phone = ‘13800138000’, credit_card = ‘1234567890123456’ where id = 1;

1 row updated.

SQL> commit;

Commit complete.

# 5. 验证数据
SQL> select * from secure_user.add_enc_column;

ID NAME EMAIL PHONE CREDIT_CARD
———- ———- ———————- ————— ——————
1 风哥1号 zhangsan@fgedu.net.cn 13800138000 1234567890123456

# 6. 查看加密列信息
SQL> select table_name, column_name, encryption_alg, salt from dba_encrypted_columns where table_name = ‘ADD_ENC_COLUMN’;

TABLE_NAME COLUMN_NAME ENCRYPTION_ALG SALT
—————– ————– ————– ———-
ADD_ENC_COLUMN PHONE AES256 YES
ADD_ENC_COLUMN CREDIT_CARD AES256 YES

# 7. 验证列加密
SQL> select column_name, data_type, encrypted from dba_tab_columns where table_name = ‘ADD_ENC_COLUMN’ order by column_id;

COLUMN_NAME DATA_TYPE ENC
————- ———- —
ID NUMBER NO
NAME VARCHAR2 NO
EMAIL VARCHAR2 NO
PHONE VARCHAR2 YES
CREDIT_CARD VARCHAR2 YES

风哥提示:TDE加密是保护敏感数据的重要手段,建议使用AES256加密算法,并定期轮换加密密钥。在生产环境中,建议使用硬件安全模块(HSM)以提高安全性。学习交流加群风哥QQ113257174

Part04-生产案例与实战讲解

4.1 PDB TDE加密配置案例

在生产环境中配置PDB TDE加密的完整案例:

4.1.1 场景描述

某企业需要为销售PDB中的客户数据配置TDE加密,保护信用卡号、手机号、身份证号等敏感信息,确保数据安全。

4.1.2 配置步骤

# 1. 配置密钥库
$ mkdir -p /oracle/app/oracle/keystore
$ chmod 700 /oracle/app/oracle/keystore

$ sqlplus / as sysdba

SQL> alter session set container=CDB$ROOT;

SQL> administer key management create keystore ‘/oracle/app/oracle/keystore’ identified by “CDBKeystorePassword123!”;

SQL> administer key management set keystore open identified by “CDBKeystorePassword123!”;

SQL> administer key management set key identified by “CDBKeystorePassword123!” with backup;

# 2. 创建加密表空间
SQL> alter session set container=SALESPDB;

SQL> create tablespace customer_secure_ts datafile ‘/oradata/fgedudb/customer_secure_ts01.dbf’ size 1g encryption using ‘AES256’ encrypt;

Tablespace created.

# 3. 创建用户
SQL> create user fgfgfgsales_admin identified by fgfgfgsales_password default tablespace customer_secure_ts;

User created.

SQL> grant create session, connect, resource to fgfgfgsales_admin;

Grant succeeded.

# 4. 创建加密表
SQL> create table fgfgfgsales_admin.customers (
id number primary key,
name varchar2(100),
email varchar2(100),
phone varchar2(20),
credit_card varchar2(20),
id_card varchar2(20),
address varchar2(200),
create_date date
);

Table created.

# 5. 插入测试数据
SQL> insert into fgfgfgsales_admin.customers values (
1, ‘风哥1号’, ‘zhangsan@fgedu.net.cn’, ‘13800138000’,
‘1234567890123456’, ‘110101199001011234’, ‘北京市朝阳区’, sysdate
);

1 row created.

SQL> insert into fgfgfgsales_admin.customers values (
2, ‘风哥2号’, ‘lisi@fgedu.net.cn’, ‘13900139000’,
‘2345678901234567’, ‘110101199002022345’, ‘上海市浦东新区’, sysdate
);

1 row created.

SQL> insert into fgfgfgsales_admin.customers values (
3, ‘王五’, ‘wangwu@fgedu.net.cn’, ‘13700137000’,
‘3456789012345678’, ‘110101199003033456’, ‘广州市天河区’, sysdate
);

1 row created.

SQL> commit;

Commit complete.

# 6. 验证加密表空间
SQL> select tablespace_name, encryptionalg, encrypted, status from dba_tablespaces where tablespace_name = ‘CUSTOMER_SECURE_TS’;

TABLESPACE_NAME ENCRYPTIONALG ENC STATUS
—————— ————- — ——–
CUSTOMER_SECURE_TS AES256 YES ONLINE

# 7. 验证加密表
SQL> select table_name, tablespace_name, encryptionalg from dba_tables where table_name = ‘CUSTOMERS’;

TABLE_NAME TABLESPACE_NAME ENCRYPTIONALG
————— ——————- ————–
CUSTOMERS CUSTOMER_SECURE_TS AES256

# 8. 验证数据
SQL> select * from fgfgfgsales_admin.customers;

ID NAME EMAIL PHONE CREDIT_CARD ID_CARD ADDRESS CREATE_DATE
———- ———- ———————- ————— —————— ———————- —————— —————–
1 风哥1号 zhangsan@fgedu.net.cn 13800138000 1234567890123456 110101199001011234 北京市朝阳区 31-MAR-26
2 风哥2号 lisi@fgedu.net.cn 13900139000 2345678901234567 110101199002022345 上海市浦东新区 31-MAR-26
3 王五 wangwu@fgedu.net.cn 13700137000 3456789012345678 110101199003033456 广州市天河区 31-MAR-26

# 9. 备份密钥库
SQL> alter session set container=CDB$ROOT;

SQL> administer key management export encryption keys with secret “BackupPassword123!” to ‘/backup/keystore_backup.p12’ identified by “CDBKeystorePassword123!”;

keystore altered.

# 10. 验证备份
$ ls -l /backup/keystore_backup.p12

-rw——- 1 oracle oinstall 2048 Mar 31 10:00:00 /backup/keystore_backup.p12

4.2 PDB TDE加密故障处理

在PDB TDE加密过程中可能遇到的故障及处理方法:

4.2.1 故障现象:ORA-28365密钥库未打开

# 问题现象
SQL> create tablespace secure_ts datafile ‘/oradata/fgedudb/secure_ts01.dbf’ size 100m encryption using ‘AES256’ encrypt;

create tablespace secure_ts datafile ‘/oradata/fgedudb/secure_ts01.dbf’ size 100m encryption using ‘AES256’ encrypt
*
ERROR at line 1:
ORA-28365: wallet is not open

# 分析步骤

# 1. 查看密钥库状态
SQL> select con_id, keystore_type, status, wallet_type from v$encryption_wallet;

CON_ID KEYSTORE_TYPE STATUS WALLET_TYPE
———- —————— ——– ——————
4 SOFTWARE CLOSED LOCAL

# 2. 发现密钥库未打开

# 3. 解决方案:打开密钥库
SQL> administer key management set keystore open identified by “CDBKeystorePassword123!”;

keystore altered.

# 4. 验证密钥库状态
SQL> select con_id, keystore_type, status, wallet_type from v$encryption_wallet;

CON_ID KEYSTORE_TYPE STATUS WALLET_TYPE
———- —————— ——– ——————
4 SOFTWARE OPEN LOCAL

# 5. 重新创建加密表空间
SQL> create tablespace secure_ts datafile ‘/oradata/fgedudb/secure_ts01.dbf’ size 100m encryption using ‘AES256’ encrypt;

Tablespace created.

# 6. 预防措施
# – 配置自动打开密钥库
# – 监控密钥库状态
# – 定期检查密钥库可用性

4.2.2 故障现象:ORA-28374主密钥不存在

# 问题现象
SQL> create tablespace secure_ts datafile ‘/oradata/fgedudb/secure_ts01.dbf’ size 100m encryption using ‘AES256’ encrypt;

create tablespace secure_ts datafile ‘/oradata/fgedudb/secure_ts01.dbf’ size 100m encryption using ‘AES256’ encrypt
*
ERROR at line 1:
ORA-28374: typed master key not present in wallet

# 分析步骤

# 1. 查看密钥库状态
SQL> select con_id, keystore_type, status, wallet_type from v$encryption_wallet;

CON_ID KEYSTORE_TYPE STATUS WALLET_TYPE
———- —————— ——– ——————
4 SOFTWARE OPEN LOCAL

# 2. 查看密钥信息
SQL> select con_id, key_id, creation_time, activation_time, state from v$encryption_keys;

no rows selected

# 3. 发现主密钥不存在

# 4. 解决方案:设置主密钥
SQL> administer key management set key identified by “CDBKeystorePassword123!” with backup;

keystore altered.

# 5. 验证密钥信息
SQL> select con_id, key_id, creation_time, activation_time, state from v$encryption_keys;

CON_ID KEY_ID CREATION_TIME ACTIVATION_TIME STATE
———- ———————————– ——————- ——————- ———-
4 AQAAAAAAABAAAAAAAABAAAAAAAABAAAAAAA 31-MAR-26 10:00:00 31-MAR-26 10:00:00 ACTIVATED

# 6. 重新创建加密表空间
SQL> create tablespace secure_ts datafile ‘/oradata/fgedudb/secure_ts01.dbf’ size 100m encryption using ‘AES256’ encrypt;

Tablespace created.

# 7. 预防措施
# – 创建密钥库后立即设置主密钥
# – 定期检查主密钥状态
# – 备份主密钥

4.3 PDB TDE加密优化

优化PDB TDE加密配置的最佳实践:

4.3.1 优化TDE加密配置

# 1. 配置自动打开密钥库
SQL> administer key management set key identified by “CDBKeystorePassword123!” with backup;

keystore altered.

# 2. 配置密钥轮换策略
# 创建密钥轮换脚本
$ vi /home/oracle/scripts/rotate_tde_key.sh

#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# TDE密钥轮换脚本

export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH

# 轮换主密钥
sqlplus / as sysdba << EOF alter session set container=CDB\$ROOT;
administer key management set key identified by “CDBKeystorePassword123!” with backup;
exit;
EOF

# 备份密钥库
sqlplus / as sysdba << EOF alter session set container=CDB\$ROOT;
administer key management export encryption keys with secret “BackupPassword123!” to “/backup/keystore_backup_\$(date +%Y%m%d).p12” identified by “CDBKeystorePassword123!”;
exit;
EOF

# 清理旧备份(保留最近30天)
find /backup -name “keystore_backup_*.p12” -mtime +30 -delete

echo “TDE key rotation completed at \$(date)”

# 3. 设置定期轮换
$ crontab -e

# 每月1日凌晨2点轮换密钥
0 2 1 * * /home/oracle/scripts/rotate_tde_key.sh >> /home/oracle/scripts/rotate_tde_key.log 2>&1

# 4. 配置TDE加密审计
SQL> audit policy oracle_secure_config;

Audit succeeded.

SQL> select audit_option, success, failure from dba_stmt_audit_opts where audit_option like ‘%KEY%’;

AUDIT_OPTION SUCCESS FAILURE
———————————— ——- ——-
ADMINISTER KEY MANAGEMENT BY BY

# 5. 监控TDE加密状态
SQL> select con_id, keystore_type, status, wallet_type from v$encryption_wallet;

CON_ID KEYSTORE_TYPE STATUS WALLET_TYPE
———- —————— ——– ——————
1 SOFTWARE OPEN LOCAL
4 SOFTWARE OPEN LOCAL

# 6. 监控加密表空间
SQL> select tablespace_name, encryptionalg, encrypted, status from dba_tablespaces where encrypted = ‘YES’;

TABLESPACE_NAME ENCRYPTIONALG ENC STATUS
——————– ————- — ——–
CUSTOMER_SECURE_TS AES256 YES ONLINE
SECURE_SALES_TS AES256 YES ONLINE

# 7. 创建TDE加密监控脚本
$ vi /home/oracle/scripts/monitor_tde.sh

#!/bin/bash
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# from:www.itpux.com.qq113257174.wx:itpux-com
# web: http://www.fgedu.net.cn
# TDE加密监控脚本

export ORACLE_HOME=/oracle/app/oracle/product/19c/dbhome_1
export ORACLE_SID=FGEDUDB
export PATH=$ORACLE_HOME/bin:$PATH

# 检查密钥库状态
STATUS=$(sqlplus -s / as sysdba << EOF set heading off feedback off pagesize 0 alter session set container=SALESPDB;
select status from v\$encryption_wallet where con_id = 4;
exit;
EOF
)

if [ “$STATUS” != “OPEN” ]; then
echo “WARNING: Keystore is not open. Status: $STATUS”
# 发送告警
echo “Keystore is not open. Status: $STATUS” | mail -s “TDE Keystore Alert” admin@fgedu.net.cn
fi

# 检查密钥年龄
KEY_DATE=$(sqlplus -s / as sysdba << EOF set heading off feedback off pagesize 0 alter session set container=SALESPDB;
select to_char(creation_time, ‘YYYYMMDD’) from v\$encryption_keys where state = ‘ACTIVATED’ and rownum = 1;
exit;
EOF
)

CURRENT_DATE=$(date +%Y%m%d)
KEY_AGE=$(( (CURRENT_DATE – KEY_DATE) / 10000 ))

if [ $KEY_AGE -gt 90 ]; then
echo “WARNING: Key is older than 90 days. Key date: $KEY_DATE”
# 发送告警
echo “Key is older than 90 days. Key date: $KEY_DATE” | mail -s “TDE Key Rotation Alert” admin@fgedu.net.cn
fi

echo “TDE monitoring completed at $(date)”

# 8. 设置定期监控
$ crontab -e

# 每小时检查TDE加密状态
0 * * * * /home/oracle/scripts/monitor_tde.sh >> /home/oracle/scripts/monitor_tde.log 2>&1

生产环境建议:TDE加密优化需要综合考虑安全性、可用性和管理效率。建议配置自动打开密钥库、定期轮换主密钥、备份密钥库,并监控TDE加密状态。更多学习教程公众号风哥教程itpux_com

Part05-风哥经验总结与分享

5.1 PDB TDE加密总结

Oracle PDB TDE加密是保护敏感数据的重要手段,具有以下特点:

  • 数据安全:保护敏感数据的安全性
  • 合规性:满足数据保护法规要求
  • 透明性:对应用程序透明,无需修改代码
  • 性能优化:最小化性能影响
  • 密钥管理:支持密钥管理和轮换

5.2 PDB TDE加密检查清单

Oracle PDB TDE加密检查清单:

  • 配置检查:检查密钥库配置和状态
  • 密钥检查:检查主密钥和加密密钥
  • 加密检查:检查表空间和列加密
  • 备份检查:检查密钥库备份
  • 轮换检查:检查密钥轮换策略
  • 审计检查:检查TDE加密审计

5.3 PDB TDE加密工具推荐

Oracle PDB TDE加密工具推荐:

  • SQL*Plus:命令行工具,用于TDE加密管理
  • Oracle Key Vault:企业级密钥管理解决方案
  • Hardware Security Module(HSM):硬件安全模块
  • Enterprise Manager:企业级管理工具
  • RMAN:备份和恢复工具
风哥提示:PDB TDE加密是保护敏感数据的重要手段,建议在生产环境中使用AES256加密算法和硬件安全模块(HSM),定期轮换密钥和备份密钥库。from:www.itpux.com www.fgedu.net.cn

本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html

联系我们

在线咨询:点击这里给我发消息

微信号:itpux-com

工作日:9:30-18:30,节假日休息