外观
Oracle 数据安全
数据加密
透明数据加密 (TDE)
透明数据加密是Oracle提供的一种数据库级加密解决方案,可加密数据文件、表空间或列级数据,无需修改应用程序。
表空间加密
sql
-- 创建加密表空间
CREATE TABLESPACE encrypted_ts
DATAFILE 'encrypted_ts.dbf' SIZE 100M
ENCRYPTION USING 'AES256' DEFAULT STORAGE (ENCRYPT);
-- 将现有表迁移到加密表空间
ALTER TABLE hr.employees MOVE TABLESPACE encrypted_ts;列级加密
sql
-- 创建加密列
CREATE TABLE sensitive_data (
id NUMBER,
credit_card VARCHAR2(16) ENCRYPT USING 'AES256',
social_security VARCHAR2(11) ENCRYPT USING 'AES256'
);数据传输加密
使用SSL/TLS加密客户端与数据库之间的通信。
sql
-- 配置SQL*Net加密
-- 在sqlnet.ora中添加
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA1)数据脱敏
静态数据脱敏
使用Oracle Data Masking Pack或自定义PL/SQL进行数据脱敏。
sql
-- 创建脱敏函数
CREATE OR REPLACE FUNCTION mask_credit_card(p_credit_card VARCHAR2) RETURN VARCHAR2 IS
BEGIN
RETURN RPAD('XXXX-XXXX-XXXX-', 15) || SUBSTR(p_credit_card, -4);
END;
/
-- 脱敏数据
UPDATE sensitive_data SET credit_card = mask_credit_card(credit_card);动态数据脱敏
在Oracle 12c及以上版本中,可以使用动态数据脱敏功能。
sql
-- 创建脱敏策略
BEGIN
DBMS_REDACT.ADD_POLICY(
object_schema => 'HR',
object_name => 'EMPLOYEES',
column_name => 'EMAIL',
policy_name => 'EMP_EMAIL_REDACT',
function_type => DBMS_REDACT.PARTIAL,
function_parameters => 'EMAIL,1,*,@',
expression => '1=1'
);
END;
/敏感数据发现
使用Oracle Enterprise Manager或自定义SQL发现敏感数据。
sql
-- 查找包含信用卡号的列
SELECT table_name, column_name
FROM all_tab_columns
WHERE data_type LIKE '%VARCHAR2%'
AND (column_name LIKE '%CREDIT%' OR column_name LIKE '%CC%' OR column_name LIKE '%PAYMENT%');审计与合规
统一审计
在Oracle 12c及以上版本中,使用统一审计功能。
sql
-- 创建审计策略
CREATE AUDIT POLICY sensitive_data_access
ACTIONS SELECT ON hr.employees, SELECT ON hr.payroll;
-- 启用审计策略
AUDIT POLICY sensitive_data_access;
-- 查看审计日志
SELECT * FROM unified_audit_trail WHERE policy_name = 'SENSITIVE_DATA_ACCESS';合规报告
生成符合GDPR、HIPAA等法规的合规报告。
数据安全最佳实践
- 最小权限原则:只授予用户必要的权限
- 定期审计:定期检查用户权限和数据访问情况
- 数据分类:对数据进行分类,不同级别采取不同的安全措施
- 加密敏感数据:对敏感数据进行加密存储和传输
- 定期备份:确保数据可恢复
- 使用强密码策略:配置复杂的密码策略
- 定期更新补丁:及时应用Oracle安全补丁
- 监控异常行为:使用Oracle Database Vault等工具监控异常行为
常见问题
Q: 如何选择合适的数据加密方法?
A: 根据数据类型和访问模式选择:
- 对整个表空间的敏感数据使用TDE表空间加密
- 对特定列使用TDE列加密
- 对传输中的数据使用SSL/TLS
- 对备份数据使用RMAN加密
Q: 数据加密会影响性能吗?
A: 会有一定影响,但通常在可接受范围内。可以通过以下方式减少性能影响:
- 只加密敏感数据,不加密所有数据
- 确保硬件支持加密加速
- 合理配置加密参数
Q: 如何管理加密密钥?
A: 使用Oracle Wallet管理加密密钥,并确保钱包的安全存储和备份。
sql
-- 打开钱包
ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "wallet_password";
-- 备份钱包
-- 复制$ORACLE_BASE/admin/$DB_UNIQUE_NAME/wallet目录到安全位置