本文档风哥主要介绍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
- 透明加密,对应用程序透明
- 支持表空间级别和列级别加密
- 使用行业标准加密算法
- 支持密钥管理和轮换
- 不影响数据库性能
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加密的优势:
- 数据安全:保护敏感数据的安全性
- 合规性:满足数据保护法规要求
- 透明性:对应用程序透明,无需修改代码
- 性能优化:最小化性能影响
- 密钥管理:支持密钥管理和轮换
Part02-生产环境规划与建议
2.1 PDB TDE加密规划
Oracle PDB 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)
- 定期轮换密钥:定期轮换主密钥
- 备份密钥库:定期备份密钥库
- 审计密钥操作:审计密钥操作
Part03-生产环境项目实施方案
3.1 PDB TDE加密配置
3.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密钥库
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 创建加密表空间
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 转换现有表空间为加密表空间
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 创建加密列
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 为现有表添加加密列
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
Part04-生产案例与实战讲解
4.1 PDB TDE加密配置案例
在生产环境中配置PDB TDE加密的完整案例:
4.1.1 场景描述
某企业需要为销售PDB中的客户数据配置TDE加密,保护信用卡号、手机号、身份证号等敏感信息,确保数据安全。
4.1.2 配置步骤
$ 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加密配置
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
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:备份和恢复工具
本文由风哥教程整理发布,仅用于学习测试使用,转载注明出处:http://www.fgedu.net.cn/10327.html
