Skip to content

DM 高级安全特性

安全特性体系

DM 数据库的安全特性体系包括以下层次:

安全层次核心特性功能描述
身份认证多因素认证、LDAP 集成、证书认证验证用户身份,防止非法访问
访问控制细粒度权限管理、行级安全、列级安全控制用户对数据的访问权限
数据保护透明数据加密、列加密、大字段加密保护数据的机密性
安全审计细粒度审计、统一审计、审计分析记录和分析数据库活动
入侵检测异常行为检测、攻击防护检测和防止数据库攻击
安全管理安全配置管理、漏洞扫描、安全加固管理和维护数据库安全

安全合规支持

DM 数据库的安全特性支持多种安全合规标准,包括:

  • 等保 2.0 三级、四级
  • GDPR(通用数据保护条例)
  • SOX(萨班斯-奥克斯利法案)
  • PCI DSS(支付卡行业数据安全标准)
  • HIPAA(健康保险流通与责任法案)

身份认证机制

DM 数据库提供了多种身份认证机制,确保只有合法用户才能访问数据库系统。

认证方式

认证方式描述适用场景
密码认证使用用户名和密码进行认证基本认证场景
多因素认证结合密码和其他因素(如令牌、指纹)进行认证高安全要求场景
LDAP 集成集成外部 LDAP 服务器进行认证企业统一身份管理
证书认证使用数字证书进行认证高安全要求场景
操作系统认证使用操作系统用户进行认证本地管理场景
集群认证集群节点间的认证机制集群环境

密码策略

DM 数据库提供了严格的密码策略,增强密码的安全性:

策略项描述默认值
密码长度密码最小长度8
密码复杂度密码必须包含的字符类型字母、数字、特殊字符
密码过期密码有效期(天)90
密码历史禁止使用的历史密码数量5
登录失败锁定连续登录失败次数5
锁定时间登录失败锁定时间(分钟)30

配置示例

sql
-- 设置密码策略
ALTER SYSTEM SET "PASSWORD_POLICY" = 31 SPFILE; -- 启用所有密码策略

-- 创建使用 LDAP 认证的用户
CREATE USER ldap_user IDENTIFIED EXTERNALLY AS 'uid=ldap_user,ou=people,dc=example,dc=com';

-- 配置证书认证
ALTER SYSTEM SET "ENABLE_SSL" = 1 SPFILE;
ALTER SYSTEM SET "SSL_KEY" = '/path/to/server.key' SPFILE;
ALTER SYSTEM SET "SSL_CERT" = '/path/to/server.crt' SPFILE;

访问控制

DM 数据库提供了细粒度的访问控制机制,确保用户只能访问其被授权的数据和资源。

权限管理

权限级别

DM 数据库的权限分为以下几个级别:

  1. 系统权限:对数据库系统级资源的访问权限,如 CREATE TABLE、ALTER SYSTEM 等
  2. 对象权限:对特定数据库对象的访问权限,如 SELECT、INSERT、UPDATE、DELETE 等
  3. 角色权限:预定义的权限集合,便于权限管理
  4. 行级权限:对表中特定行的访问权限
  5. 列级权限:对表中特定列的访问权限

角色管理

DM 数据库提供了多种预定义角色,同时支持自定义角色:

预定义角色权限描述
DBA数据库管理员角色,拥有所有权限
RESOURCE资源角色,允许创建数据库对象
PUBLIC公共角色,所有用户默认拥有
AUDITOR审计员角色,负责审计管理
SECURITY安全管理员角色,负责安全配置

配置示例

sql
-- 创建自定义角色
CREATE ROLE sales_role;

-- 授予权限给角色
GRANT SELECT, INSERT, UPDATE ON sales TO sales_role;
GRANT EXECUTE ON sales_proc TO sales_role;

-- 授予角色给用户
GRANT sales_role TO sales_user;

-- 行级安全控制
CREATE POLICY sales_dept_policy ON sales
USING (dept_id = SYS_CONTEXT('USERENV', 'SESSION_USER_DEPT'));

-- 列级安全控制
REVOKE SELECT ON sales(bonus) FROM sales_user;

虚拟专用数据库(VPD)

DM 数据库支持虚拟专用数据库(VPD),允许根据用户的身份或上下文信息动态控制数据访问。

VPD 工作原理

  1. 定义安全策略函数,根据用户上下文返回过滤条件
  2. 将安全策略应用到表或视图上
  3. 当用户访问表或视图时,数据库自动将过滤条件添加到查询中
  4. 用户只能看到符合过滤条件的数据

配置示例

sql
-- 创建安全策略函数
CREATE FUNCTION sales_vpd_func(obj_schema VARCHAR(128), obj_name VARCHAR(128))
RETURNS VARCHAR(1000)
AS
BEGIN
  RETURN 'dept_id = ' || SYS_CONTEXT('USERENV', 'SESSION_USER_DEPT');
END;

-- 创建安全策略
CREATE POLICY sales_vpd_policy ON sales
USING sales_vpd_func;

-- 启用 VPD
ALTER SYSTEM SET "ENABLE_VPD" = 1 SPFILE;

数据保护

DM 数据库提供了多种数据保护机制,保护数据的机密性和完整性。

透明数据加密(TDE)

透明数据加密(TDE)自动加密数据库文件,对应用程序透明,无需修改应用代码。

TDE 特点

  • 加密整个数据文件,包括数据、索引和元数据
  • 对应用程序完全透明,无需修改应用代码
  • 支持多种加密算法,如 AES-128、AES-192、AES-256
  • 加密密钥由密钥管理器管理,安全可靠

配置示例

sql
-- 启用 TDE
ALTER SYSTEM SET "ENABLE_TDE" = 1 SPFILE;

-- 设置 TDE 加密算法
ALTER SYSTEM SET "TDE_ALGORITHM" = 'AES256' SPFILE;

-- 创建加密表空间
CREATE TABLESPACE encrypted_ts
DATAFILE 'encrypted.dbf' SIZE 100M
ENCRYPTION USING 'AES256' IDENTIFIED BY 'tde_key';

-- 在加密表空间创建表
CREATE TABLE sensitive_data (id INT, data VARCHAR(100))
TABLESPACE encrypted_ts;

列加密

列加密允许对表中的特定列进行加密,提供更细粒度的数据保护。

列加密特点

  • 支持对特定列进行加密,保护敏感数据
  • 支持多种加密算法
  • 提供加密函数和解密函数,方便应用程序使用
  • 支持索引加密,保护索引数据

配置示例

sql
-- 创建带列加密的表
CREATE TABLE customer (
    id INT PRIMARY KEY,
    name VARCHAR(100),
    credit_card VARCHAR(16) ENCRYPT USING 'AES128' IDENTIFIED BY 'col_key',
    ssn VARCHAR(11) ENCRYPT USING 'AES128' IDENTIFIED BY 'col_key'
);

-- 插入数据
INSERT INTO customer VALUES (1, 'John', '1234567890123456', '123-45-6789');

-- 查询加密列
SELECT id, name, DECRYPT(credit_card) FROM customer;

大字段加密

DM 数据库支持对大字段(CLOB、BLOB)进行加密,保护大型敏感数据。

配置示例

sql
-- 创建带大字段加密的表
CREATE TABLE document (
    id INT PRIMARY KEY,
    title VARCHAR(100),
    content CLOB ENCRYPT USING 'AES256' IDENTIFIED BY 'blob_key',
    attachment BLOB ENCRYPT USING 'AES256' IDENTIFIED BY 'blob_key'
);

-- 插入大字段数据
INSERT INTO document VALUES (1, '机密文档', '这是机密内容', EMPTY_BLOB());

安全审计

DM 数据库提供了全面的审计功能,记录和分析数据库活动,帮助管理员监控数据库使用情况,检测和防止非法活动。

审计类型

审计类型描述配置参数
语句审计审计特定类型的 SQL 语句AUDIT_SQL_TYPE
对象审计审计对特定对象的操作AUDIT_OBJECT
权限审计审计特定权限的使用AUDIT_PRIV
细粒度审计审计特定条件下的操作AUDIT_POLICY
统一审计集中管理所有审计策略UNIFIED_AUDIT

审计配置

基本审计配置

sql
-- 启用审计
ALTER SYSTEM SET "ENABLE_AUDIT" = 1 SPFILE;

-- 设置审计日志路径
ALTER SYSTEM SET "AUDIT_FILE_PATH" = '/dm/audit' SPFILE;

-- 设置审计日志大小
ALTER SYSTEM SET "AUDIT_FILE_SIZE" = 1024 SPFILE;

语句审计

sql
-- 审计所有 CREATE TABLE 语句
AUDIT CREATE TABLE;

-- 审计所有 SELECT 语句
AUDIT SELECT TABLE;

-- 审计特定用户的 UPDATE 语句
AUDIT UPDATE TABLE BY sales_user;

对象审计

sql
-- 审计对 sales 表的所有操作
AUDIT ALL ON sales;

-- 审计对 sales 表的 SELECT 和 INSERT 操作
AUDIT SELECT, INSERT ON sales;

-- 审计对 sales_proc 存储过程的执行
AUDIT EXECUTE ON sales_proc;

细粒度审计

sql
-- 创建审计策略
CREATE AUDIT POLICY sensitive_data_policy
PRIVILEGES SELECT, UPDATE ON sensitive_data
WHEN 'SYS_CONTEXT(''USERENV'', ''SESSION_USER'') <> ''ADMIN''' EVALUATE PER STATEMENT;

-- 启用审计策略
AUDIT POLICY sensitive_data_policy;

审计分析

DM 数据库提供了审计分析工具,帮助管理员分析审计日志,检测异常活动。

审计视图

视图名称用途
DBA_AUDIT_TRAIL所有审计记录
DBA_AUDIT_STATEMENT语句审计记录
DBA_AUDIT_OBJECT对象审计记录
DBA_AUDIT_SESSION会话审计记录
DBA_AUDIT_PRIVILEGES权限审计记录

审计分析示例

sql
-- 查询最近 7 天的审计记录
SELECT * FROM DBA_AUDIT_TRAIL
WHERE TIMESTAMP >= SYSDATE - 7;

-- 查询失败的登录尝试
SELECT USERNAME, TIMESTAMP, OS_USERNAME, USERHOST, RETURNCODE
FROM DBA_AUDIT_SESSION
WHERE ACTION_NAME = 'LOGON'
AND RETURNCODE != 0;

-- 查询对敏感表的访问
SELECT * FROM DBA_AUDIT_OBJECT
WHERE OBJECT_NAME = 'SENSITIVE_DATA'
AND ACTION_NAME IN ('SELECT', 'UPDATE', 'DELETE');

入侵检测与防护

DM 数据库提供了入侵检测和防护机制,检测和防止数据库攻击,保护数据库系统的安全。

异常行为检测

DM 数据库能够检测异常的数据库行为,如:

  • 异常登录模式(如非工作时间登录、异常地点登录)
  • 异常查询模式(如大量数据查询、全表扫描)
  • 异常权限使用(如普通用户使用管理员权限)
  • 异常数据修改(如大量数据删除、更新)

攻击防护

DM 数据库提供了多种攻击防护机制,包括:

防护机制描述
SQL 注入防护检测和防止 SQL 注入攻击
缓冲区溢出防护防止缓冲区溢出攻击
拒绝服务防护限制并发连接数,防止 DoS 攻击
暴力破解防护锁定多次登录失败的用户
命令注入防护防止命令注入攻击

配置示例

sql
-- 启用入侵检测
ALTER SYSTEM SET "ENABLE_INTRUSION_DETECTION" = 1 SPFILE;

-- 设置登录失败锁定次数
ALTER SYSTEM SET "FAILED_LOGIN_ATTEMPTS" = 5 SPFILE;

-- 设置锁定时间
ALTER SYSTEM SET "PASSWORD_LOCK_TIME" = 30 SPFILE;

-- 限制并发连接数
ALTER SYSTEM SET "MAX_SESSIONS" = 1000 SPFILE;

-- 启用 SQL 注入防护
ALTER SYSTEM SET "ENABLE_SQL_INJECTION_PROTECTION" = 1 SPFILE;

安全管理工具

DM 数据库提供了多种安全管理工具,方便管理员管理和维护数据库安全。

安全管理工具

工具名称功能描述
DM 安全管理工具图形化安全管理界面,用于配置和管理数据库安全
DM 审计分析工具审计日志分析工具,用于分析和报告审计数据
DM 漏洞扫描工具数据库漏洞扫描工具,用于检测数据库漏洞
DM 安全加固工具数据库安全加固工具,用于加固数据库配置
DM 密钥管理工具密钥管理工具,用于管理加密密钥

安全配置管理

DM 数据库提供了安全配置管理功能,帮助管理员管理数据库的安全配置。

安全配置检查

sql
-- 检查数据库安全配置
CALL SP_DB_SECURITY_CHECK();

-- 查看安全配置报告
SELECT * FROM V$DB_SECURITY_CHECK_RESULT;

安全加固

sql
-- 执行安全加固
CALL SP_DB_SECURITY_HARDEN();

-- 查看加固建议
SELECT * FROM V$DB_SECURITY_HARDEN_ADVICE;

安全审计报告

DM 数据库支持生成安全审计报告,帮助管理员了解数据库的安全状况,满足合规要求。

报告类型

报告类型内容适用场景
安全合规报告数据库安全配置与合规标准的对比合规检查
审计汇总报告审计日志的汇总分析日常监控
异常行为报告异常数据库行为的分析安全事件调查
权限使用报告用户权限使用情况的分析权限管理

生成报告

sql
-- 生成安全合规报告
CALL SP_GENERATE_COMPLIANCE_REPORT('GDPR', '/dm/reports/gdpr_report.html');

-- 生成审计汇总报告
CALL SP_GENERATE_AUDIT_SUMMARY_REPORT(SYSDATE - 7, SYSDATE, '/dm/reports/audit_summary.html');

-- 生成异常行为报告
CALL SP_GENERATE_ANOMALY_REPORT(SYSDATE - 7, SYSDATE, '/dm/reports/anomaly_report.html');

版本差异

DM 7 vs DM 8 安全特性差异

差异点DM 7DM 8
身份认证基本密码认证支持多因素认证、LDAP 集成、证书认证
访问控制基本权限管理支持行级安全、列级安全、VPD
数据加密基本列加密支持透明数据加密、列加密、大字段加密
安全审计基本审计功能支持细粒度审计、统一审计、审计分析
入侵检测支持异常行为检测、攻击防护
安全管理基本安全管理提供完整的安全管理工具链

DM 8.1 新特性

  • 增强了多因素认证,支持更多认证因素
  • 优化了透明数据加密性能,减少加密开销
  • 增强了细粒度审计,支持更复杂的审计条件
  • 改进了入侵检测算法,提高了检测准确率
  • 增加了安全合规报告,支持更多合规标准
  • 增强了与第三方安全工具的集成

安全最佳实践

1. 身份认证最佳实践

  • 使用强密码策略,要求密码包含字母、数字和特殊字符
  • 启用多因素认证,提高认证安全性
  • 定期更换密码,避免密码过期
  • 限制登录失败次数,防止暴力破解
  • 集成企业 LDAP 或 AD,实现统一身份管理

2. 访问控制最佳实践

  • 遵循最小权限原则,只授予用户必要的权限
  • 使用角色管理权限,便于权限维护
  • 实现行级和列级安全,保护敏感数据
  • 定期审查用户权限,撤销不必要的权限
  • 使用 VPD 实现动态数据访问控制

3. 数据保护最佳实践

  • 对敏感数据实施加密,包括存储加密和传输加密
  • 使用强加密算法,如 AES-256
  • 安全管理加密密钥,定期更换密钥
  • 对备份数据也进行加密,保护备份数据安全
  • 实现数据脱敏,保护非生产环境中的数据

4. 安全审计最佳实践

  • 启用全面的审计功能,记录所有重要数据库活动
  • 定期分析审计日志,检测异常行为
  • 安全存储审计日志,防止日志被篡改
  • 保留审计日志足够长的时间,满足合规要求
  • 使用统一审计,简化审计管理

5. 入侵检测最佳实践

  • 启用入侵检测功能,检测异常数据库行为
  • 配置合理的检测阈值,减少误报
  • 定期更新入侵检测规则,适应新的攻击方式
  • 建立安全事件响应机制,及时处理安全事件
  • 与企业 SIEM 系统集成,实现集中安全监控

常见问题(FAQ)

Q1: 如何启用 DM 数据库的透明数据加密?

A1: 可以通过以下步骤启用:

  1. 设置加密算法:ALTER SYSTEM SET "TDE_ALGORITHM" = 'AES256' SPFILE;
  2. 启用 TDE:ALTER SYSTEM SET "ENABLE_TDE" = 1 SPFILE;
  3. 重启数据库实例
  4. 创建加密表空间:CREATE TABLESPACE encrypted_ts DATAFILE 'encrypted.dbf' SIZE 100M ENCRYPTION USING 'AES256' IDENTIFIED BY 'tde_key';

Q2: 如何实现 DM 数据库的行级安全?

A2: 可以通过以下方式实现:

  1. 使用行级权限:CREATE POLICY sales_dept_policy ON sales USING (dept_id = SYS_CONTEXT('USERENV', 'SESSION_USER_DEPT'));
  2. 使用 VPD(虚拟专用数据库):创建安全策略函数并应用到表上
  3. 使用视图:创建基于用户权限的视图

Q3: 如何配置 DM 数据库的审计功能?

A3: 可以通过以下步骤配置:

  1. 启用审计:ALTER SYSTEM SET "ENABLE_AUDIT" = 1 SPFILE;
  2. 设置审计日志路径:ALTER SYSTEM SET "AUDIT_FILE_PATH" = '/dm/audit' SPFILE;
  3. 配置审计类型:使用 AUDIT 命令配置语句审计、对象审计或权限审计
  4. 创建细粒度审计策略:CREATE AUDIT POLICY sensitive_data_policy PRIVILEGES SELECT, UPDATE ON sensitive_data;

Q4: 如何集成 DM 数据库与 LDAP?

A4: 可以通过以下步骤集成:

  1. 配置 LDAP 服务器连接信息
  2. 创建外部认证用户:CREATE USER ldap_user IDENTIFIED EXTERNALLY AS 'uid=ldap_user,ou=people,dc=example,dc=com';
  3. 启用 LDAP 认证:ALTER SYSTEM SET "ENABLE_LDAP" = 1 SPFILE;
  4. 配置 LDAP 参数:设置 LDAP 服务器地址、端口、基础 DN 等

Q5: 如何保护 DM 数据库的备份数据?

A5: 可以通过以下方式保护:

  1. 对备份数据进行加密:BACKUP DATABASE '/opt/dmdbms/data/DAMENG/dm.ini' FULL TO backup1 BACKUPSET '/opt/dmdbms/backup/backup1' ENCRYPT WITH 'AES256' IDENTIFIED BY 'backup_key';
  2. 安全存储备份数据,限制访问权限
  3. 定期测试备份恢复,确保备份数据可用
  4. 实现备份数据的异地存储,防止本地灾难

Q6: 如何检测 DM 数据库中的异常行为?

A6: 可以通过以下方式检测:

  1. 启用入侵检测功能:ALTER SYSTEM SET "ENABLE_INTRUSION_DETECTION" = 1 SPFILE;
  2. 分析审计日志,查找异常登录、异常查询或异常数据修改
  3. 使用 DM 审计分析工具,生成异常行为报告
  4. 配置告警,及时通知管理员异常行为

Q7: 如何实现 DM 数据库的列级安全?

A7: 可以通过以下方式实现:

  1. 回收特定列的权限:REVOKE SELECT ON sales(bonus) FROM sales_user;
  2. 使用列加密:CREATE TABLE customer (id INT, credit_card VARCHAR(16) ENCRYPT USING 'AES128' IDENTIFIED BY 'col_key');
  3. 使用视图,隐藏敏感列:CREATE VIEW customer_view AS SELECT id, name FROM customer;

Q8: 如何管理 DM 数据库的加密密钥?

A8: 可以通过以下方式管理:

  1. 使用 DM 密钥管理工具管理加密密钥
  2. 定期更换加密密钥,提高安全性
  3. 安全存储密钥备份,防止密钥丢失
  4. 实现密钥的访问控制,只有授权人员才能访问密钥

Q9: 如何进行 DM 数据库的安全合规检查?

A9: 可以通过以下步骤进行:

  1. 执行安全配置检查:CALL SP_DB_SECURITY_CHECK();
  2. 查看安全配置报告:SELECT * FROM V$DB_SECURITY_CHECK_RESULT;
  3. 生成安全合规报告:CALL SP_GENERATE_COMPLIANCE_REPORT('GDPR', '/dm/reports/gdpr_report.html');
  4. 根据报告修复安全配置问题

Q10: 如何加固 DM 数据库的安全配置?

A10: 可以通过以下方式加固:

  1. 执行安全加固:CALL SP_DB_SECURITY_HARDEN();
  2. 查看加固建议:SELECT * FROM V$DB_SECURITY_HARDEN_ADVICE;
  3. 禁用不必要的服务和功能
  4. 限制数据库的网络访问,使用防火墙
  5. 定期更新数据库补丁,修复安全漏洞