1. 首页 > Oracle教程 > 正文

Oracle教程FG174-TDE列加密

1. TDE列加密概述

TDE列加密是透明数据加密(TDE)的一种使用方式,它可以只加密表中的特定敏感列,而不是整个表空间,提供更精细的数据保护。风哥教程参考Oracle官方文档Security部分。更多学习教程www.fgedu.net.cn

— 检查TDE相关参数
SELECT * FROM v$parameter WHERE name LIKE ‘%wallet%’ OR name LIKE ‘%encryption%’;NAME TYPE VALUE
———————————— ———– ——————————
db_wallet_location string /oracle/app/oracle/admin/fgedudb/wallet

— 检查TDE钱包状态
SELECT * FROM v$encryption_wallet;WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_OR KEYSTORE FULLY_BAC
——————– ————————————————– —————————————- ——————– ———– ——– ———–
FILE /oracle/app/oracle/admin/fgedudb/wallet OPEN PASSWORD SINGLE N

— 检查加密列相关视图
SELECT view_name FROM dba_views WHERE view_name LIKE ‘%ENCRYPTED_COLUMNS%’ ORDER BY view_name;VIEW_NAME
——————————
DBA_ENCRYPTED_COLUMNS

2. TDE列加密配置

TDE列加密配置包括设置钱包位置、创建钱包、打开钱包等步骤。学习交流加群风哥微信: itpux-com

— 创建钱包目录
$ mkdir -p /oracle/app/oracle/admin/fgedudb/wallet
$ chown oracle:oinstall /oracle/app/oracle/admin/fgedudb/wallet
$ chmod 700 /oracle/app/oracle/admin/fgedudb/wallet

— 设置钱包位置
ALTER SYSTEM SET db_wallet_location = ‘file:/oracle/app/oracle/admin/fgedudb/wallet’ SCOPE=SPFILE;System altered.

— 重启数据库使配置生效
SHUTDOWN IMMEDIATE;STARTUP;Database closed.
Database dismounted.
ORACLE instance shut down.

ORACLE instance started.

Total System Global Area 1610612736 bytes
Fixed Size 9136928 bytes
Variable Size 973078528 bytes
Database Buffers 629145600 bytes
Redo Buffers 7634944 bytes
Database mounted.
Database opened.

— 创建TDE钱包
ALTER SYSTEM SET encryption key IDENTIFIED BY “Welcome123”;System altered.

— 验证钱包状态
SELECT * FROM v$encryption_wallet;WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_OR KEYSTORE FULLY_BAC
——————– ————————————————– —————————————- ——————– ———– ——– ———–
FILE /oracle/app/oracle/admin/fgedudb/wallet OPEN PASSWORD SINGLE N

风哥提示:TDE列加密需要先配置并打开TDE钱包,否则无法创建加密列。

3. 创建加密列

创建加密列可以在创建表时指定,也可以对现有表的列进行加密。

— 创建带有加密列的表
CREATE TABLE fgedu.employees (
emp_id NUMBER(10) PRIMARY KEY,
emp_name VARCHAR2(100),
department VARCHAR2(100),
salary NUMBER(10,2) ENCRYPT USING ‘AES256’,
ssn VARCHAR2(11) ENCRYPT USING ‘AES256’,
email VARCHAR2(100)
);Table created.

— 对现有表添加加密列
CREATE TABLE fgedu.customer (
customer_id NUMBER(10) PRIMARY KEY,
customer_name VARCHAR2(100),
address VARCHAR2(200),
phone VARCHAR2(20)
);Table created.

— 添加加密列
ALTER TABLE fgedu.customer ADD (credit_card VARCHAR2(16) ENCRYPT USING ‘AES256’);Table altered.

— 查看加密列信息
SELECT owner, table_name, column_name, encryption_algorithm
FROM dba_encrypted_columns
WHERE owner = ‘FGEDU’;OWNER TABLE_NAME COLUMN_NAME ENCRYPTION_ALGORITHM
———- —————————— ——————– ——————–
FGEDU EMPLOYEES SALARY AES 256-bit
FGEDU EMPLOYEES SSN AES 256-bit
FGEDU CUSTOMER CREDIT_CARD AES 256-bit

4. 使用加密列

使用加密列时,应用程序不需要修改,Oracle数据库会自动处理加密和解密操作。学习交流加群风哥QQ113257174

— 插入测试数据
INSERT INTO fgedu.employees VALUES (1, ‘风哥1号’, ‘技术部’, 8000, ‘110101199001011234’, ‘zhangsan@fgedu.net.cn’);INSERT INTO fgedu.employees VALUES (2, ‘风哥2号’, ‘市场部’, 9000, ‘110101199002022345’, ‘lisi@fgedu.net.cn’);INSERT INTO fgedu.employees VALUES (3, ‘风哥3号’, ‘财务部’, 10000, ‘110101199003033456’, ‘wangwu@fgedu.net.cn’);3 rows created.

COMMIT;Commit complete.

— 查询表中的数据
SELECT * FROM fgedu.employees;EMP_ID EMP_NAME DEPARTMENT SALARY SSN EMAIL
———- ——————– ——————– ———- ———– ——————————
1 风哥1号 技术部 8000 110101199001011234 zhangsan@fgedu.net.cn
2 风哥2号 市场部 9000 110101199002022345 lisi@fgedu.net.cn
3 风哥3号 财务部 10000 110101199003033456 wangwu@fgedu.net.cn

— 关闭钱包并尝试查询数据
ALTER SYSTEM SET encryption wallet close;System altered.

SELECT * FROM fgedu.employees;SELECT * FROM fgedu.employees
* ERROR at line 1:
ORA-28365: wallet is not open

— 打开钱包并再次查询数据
ALTER SYSTEM SET encryption wallet open IDENTIFIED BY “Welcome123”;System altered.

SELECT * FROM fgedu.employees;EMP_ID EMP_NAME DEPARTMENT SALARY SSN EMAIL
———- ——————– ——————– ———- ———– ——————————
1 风哥1号 技术部 8000 110101199001011234 zhangsan@fgedu.net.cn
2 风哥2号 市场部 9000 110101199002022345 lisi@fgedu.net.cn
3 风哥3号 财务部 10000 110101199003033456 wangwu@fgedu.net.cn

— 更新加密列数据
UPDATE fgedu.employees SET salary = 8500 WHERE emp_id = 1;1 row updated.

COMMIT;Commit complete.

— 查询更新后的数据
SELECT emp_id, emp_name, salary FROM fgedu.employees WHERE emp_id = 1;EMP_ID EMP_NAME SALARY
———- ——————– ———-
1 风哥1号 8500

— 插入客户数据
INSERT INTO fgedu.customer VALUES (1, ‘风哥1号’, ‘北京市朝阳区’, ‘13800138000’, ‘1234567812345678’);INSERT INTO fgedu.customer VALUES (2, ‘风哥2号’, ‘上海市浦东新区’, ‘13900139000’, ‘8765432187654321’);2 rows created.

COMMIT;Commit complete.

— 查询客户数据
SELECT * FROM fgedu.customer;CUSTOMER_ID CUSTOMER_NAME ADDRESS PHONE CREDIT_CARD
———– ——————– ——————– ——————– —————-
1 风哥1号 北京市朝阳区 13800138000 1234567812345678
2 风哥2号 上海市浦东新区 13900139000 8765432187654321

5. 监控加密列

监控加密列包括查看加密列信息、加密列使用情况等。

— 查看加密列信息
SELECT owner, table_name, column_name, encryption_algorithm
FROM dba_encrypted_columns
ORDER BY owner, table_name, column_name;OWNER TABLE_NAME COLUMN_NAME ENCRYPTION_ALGORITHM
———- —————————— ——————– ——————–
FGEDU CUSTOMER CREDIT_CARD AES 256-bit
FGEDU EMPLOYEES SALARY AES 256-bit
FGEDU EMPLOYEES SSN AES 256-bit

— 查看表结构
DESC fgedu.employees;Name Null? Type
—————————————– ——– —————————-
EMP_ID NOT NULL NUMBER(10)
EMP_NAME VARCHAR2(100)
DEPARTMENT VARCHAR2(100)
SALARY NUMBER(10,2)
SSN VARCHAR2(11)
EMAIL VARCHAR2(100)

— 查看TDE钱包状态
SELECT * FROM v$encryption_wallet;WRL_TYPE WRL_PARAMETER STATUS WALLET_TYPE WALLET_OR KEYSTORE FULLY_BAC
——————– ————————————————– —————————————- ——————– ———– ——– ———–
FILE /oracle/app/oracle/admin/fgedudb/wallet OPEN PASSWORD SINGLE N

— 查看加密列的统计信息
SELECT table_name, column_name, num_distinct, density
FROM dba_tab_columns
WHERE owner = ‘FGEDU’ AND column_name IN (‘SALARY’, ‘SSN’, ‘CREDIT_CARD’);TABLE_NAME COLUMN_NAME NUM_DISTINCT DENSITY
—————————— ——————– ———— ———-
EMPLOYEES SALARY 3 .333333333333333
EMPLOYEES SSN 3 .333333333333333
CUSTOMER CREDIT_CARD 2 .5

6. 最佳实践

以下是TDE列加密的最佳实践,帮助您有效保护敏感数据。更多学习教程公众号风哥教程itpux_com

— 1. 合理选择加密列
— 只对敏感数据列进行加密,如信用卡号、身份证号、薪资等
CREATE TABLE fgedu.employees (
emp_id NUMBER(10) PRIMARY KEY,
emp_name VARCHAR2(100),
department VARCHAR2(100),
salary NUMBER(10,2) ENCRYPT USING ‘AES256’,
ssn VARCHAR2(11) ENCRYPT USING ‘AES256’,
email VARCHAR2(100)
);– 2. 选择合适的加密算法
— 使用AES256加密算法提供最高级别的安全性
ALTER TABLE fgedu.customer ADD (credit_card VARCHAR2(16) ENCRYPT USING ‘AES256’);– 3. 安全管理TDE钱包
— 创建强密码的钱包
ALTER SYSTEM SET encryption key IDENTIFIED BY “Welcome123”;– 定期备份钱包文件
$ cp -r /oracle/app/oracle/admin/fgedudb/wallet /backup/wallet/$(date +%Y%m%d)

— 妥善保管钱包密码

— 4. 避免对频繁查询的列进行加密
— 加密列可能会影响查询性能,避免对频繁查询的列进行加密

— 5. 定期监控加密列
— 查看加密列信息
SELECT owner, table_name, column_name, encryption_algorithm
FROM dba_encrypted_columns;– 6. 测试加密列性能
— 定期测试加密列对数据库性能的影响
— 进行必要的优化

— 7. 制定应急方案
— 制定TDE钱包丢失或损坏的应急方案
— 测试钱包恢复流程

— 8. 文档化加密策略
— 记录加密列的创建和管理细节
— 记录TDE钱包的管理流程

— 9. 培训管理员了解加密列
— 培训数据库管理员了解TDE列加密的使用和管理
— 避免操作失误导致数据无法访问

— 10. 结合其他安全措施
— 将TDE列加密与其他安全措施(如VPD、审计等)结合使用
— 构建完整的安全体系

生产环境建议:根据业务需求和合规要求,针对敏感数据列实施TDE加密。妥善管理TDE钱包,定期备份钱包文件,确保数据安全。

风哥提示:TDE列加密是透明数据加密(TDE)的一种使用方式,它可以只加密表中的特定敏感列,而不是整个表空间,提供更精细的数据保护,是一种有效的数据保护方法。

更多视频教程www.fgedu.net.cn

from oracle:www.itpux.com

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

联系我们

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

微信号:itpux-com

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