Skip to content

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等法规的合规报告。

数据安全最佳实践

  1. 最小权限原则:只授予用户必要的权限
  2. 定期审计:定期检查用户权限和数据访问情况
  3. 数据分类:对数据进行分类,不同级别采取不同的安全措施
  4. 加密敏感数据:对敏感数据进行加密存储和传输
  5. 定期备份:确保数据可恢复
  6. 使用强密码策略:配置复杂的密码策略
  7. 定期更新补丁:及时应用Oracle安全补丁
  8. 监控异常行为:使用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目录到安全位置