达梦数据库常见漏洞及处理方案

在数据库运维工作中,安全始终是核心议题之一。达梦数据库作为国产数据库的代表,其安全加固尤为重要。本文将结合实际运维经验,详细介绍达梦数据库中常见漏洞的检测与修复方法,帮助数据库管理员构建更安全的运行环境。

一、登录失败口令锁定时间过短

风险描述:当登录失败次数过多时,若锁定时间过短,容易遭受暴力破解攻击,导致账号安全风险升高。

检查方法:通过以下SQL查询当前用户的失败登录次数限制和锁定时间:

select FAILED_NUM, LOCK_TIME, SF_GET_USERNAME_BY_ID(ID), u.* from SYSUSERS u;

修复方案:设置登录失败5次后锁定30分钟(排除系统内置的SYSSSO和SYSAUDITOR用户):

select 'ALTER USER '||SF_GET_USERNAME_BY_ID(ID)||' LIMIT FAILED_LOGIN_ATTEMPS 5, PASSWORD_LOCK_TIME 30;' 
  from SYSUSERS u 
 where SF_GET_USERNAME_BY_ID(ID) not in ('SYSSSO','SYSAUDITOR');

执行上述查询生成的SQL语句,即可生效。

二、口令使用期限过大

风险描述:口令长期不更换会增加泄露后被滥用的风险,合理设置有效期可强制用户定期更新口令。

检查方法:查询当前口令有效期和过期宽限时间:

select LIFE_TIME, GRACE_TIME, SF_GET_USERNAME_BY_ID(ID), u.* from SYSUSERS u;

注意:当宽限时间为UNLIMITED时,无法设置有效期,需先调整宽限时间。

修复方案

  1. 设置口令过期宽限时间为10天:
select 'ALTER USER '||SF_GET_USERNAME_BY_ID(ID)||' LIMIT PASSWORD_GRACE_TIME 10;' 
  from SYSUSERS u 
 where SF_GET_USERNAME_BY_ID(ID) not in ('SYSSSO','SYSAUDITOR');
  1. 设置口令有效期为30天:
select 'ALTER USER '||SF_GET_USERNAME_BY_ID(ID)||' LIMIT PASSWORD_LIFE_TIME 30;'
  from SYSUSERS u 
 where SF_GET_USERNAME_BY_ID(ID) not in ('SYSSSO','SYSAUDITOR');

三、审计功能未开启

风险描述:未开启审计功能时,无法记录数据库操作行为,难以追溯安全事件。

检查方法:查询审计开关状态:

SELECT * FROM V$DM_INI WHERE PARA_NAME='ENABLE_AUDIT';
  • 0:关闭审计;1:打开普通审计;2:打开普通审计和实时审计。

修复方案:由SYSAUDITOR用户登录后开启普通审计:

SP_SET_ENABLE_AUDIT (1);

四、通信未加密

风险描述:数据库通信未加密可能导致数据在传输过程中被窃取或篡改。

达梦提供两种加密方式(无需同时开启,避免资源消耗):

1. 基于传输层的SSL协议加密(暂不推荐)

检查方法

SELECT * FROM V$PARAMETER WHERE NAME='ENABLE_ENCRYPT';
  • 0:不开启;1:开启加密和认证;2:仅认证;4:仅加密。

修复方案(需重启数据库生效):

SP_SET_PARA_VALUE (2,'ENABLE_ENCRYPT',1); -- 暂不建议使用

2. 基于应用层的消息包加密

检查方法

SELECT * FROM V$PARAMETER WHERE NAME='COMM_ENCRYPT_NAME';
  • 空串:不加密;算法名:启用对应加密算法。

修复方案(需重启数据库生效):

SP_SET_PARA_STRING_VALUE(2,'COMM_ENCRYPT_NAME','DES_OFB');

取消加密:

SP_SET_PARA_STRING_VALUE(2,'COMM_ENCRYPT_NAME',null);

五、未检查存储过程中EXECUTE IMMEDIATE语句的权限

风险描述:若不限制存储过程中动态SQL的执行权限,可能导致越权操作风险。

检查方法:查询参数状态:

SELECT * FROM V$PARAMETER WHERE NAME='ENABLE_STRICT_CHECK';
  • 0:不检查;1:开启检查。

修复方案(需重启数据库生效):

SP_SET_PARA_VALUE(2,'ENABLE_STRICT_CHECK',1);

六、口令可重用前的变更次数过小

风险描述:若口令可重用前的变更次数过少,用户可能频繁使用旧口令,增加泄露风险。

检查方法

select REUSE_MAX, SF_GET_USERNAME_BY_ID(ID), u.* from SYSUSERS u;

修复方案:设置口令需变更5次后才可重用:

select 'ALTER USER '||SF_GET_USERNAME_BY_ID(ID)||' LIMIT PASSWORD_REUSE_MAX 5;'
  from SYSUSERS u 
 where SF_GET_USERNAME_BY_ID(ID) not in ('SYSSSO','SYSAUDITOR');

七、口令可重用前的等待天数过小

风险描述:若口令可重用前的等待天数不足,用户可能短期内恢复旧口令,降低安全性。

检查方法

select REUSE_TIME, SF_GET_USERNAME_BY_ID(ID), u.* from SYSUSERS u;

修复方案:设置口令需等待30天后才可重用:

select 'ALTER USER '||SF_GET_USERNAME_BY_ID(ID)||' LIMIT PASSWORD_REUSE_TIME 30;'
  from SYSUSERS u 
 where SF_GET_USERNAME_BY_ID(ID) not in ('SYSSSO','SYSAUDITOR');

八、DBA用户权限未限制

风险描述:DBA用户的“ANY”权限过大,可能导致误操作或权限滥用。

检查方法:查询DBA权限限制状态:

SELECT * FROM V$PARAMETER WHERE NAME='RESTRICT_DBA';
  • 1:限制“ANY”权限;0:不限制。

修复方案

  • 非安全版本:由SYSDBA执行;
  • 安全版本:由SYSSSO执行。
SP_RESTRICT_DBA(1);

补充检查

  • 查询具有DBA角色的用户:
SELECT * FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE = 'DBA';
  • 查询DBA用户的系统权限:
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE IN (SELECT GRANTEE FROM DBA_ROLE_PRIVS WHERE GRANTED_ROLE = 'DBA');

建议实施权限分离,创建备份管理员、安全审计员等角色。

九、SP_MAC_LABEL_FROM_CHAR过程权限未限制

风险描述:若普通用户可执行SP_MAC_LABEL_FROM_CHAR过程,可能绕过MAC标签控制。

检查方法(仅安全版有效):

SELECT * FROM V$DM_INI WHERE PARA_NAME = 'MAC_LABEL_OPTION';
  • 0:仅SSO可调用;1:所有用户可调用;2:非SSO用户无法创建新LABEL。

修复方案

ALTER SYSTEM SET 'MAC_LABEL_OPTION' = 0 BOTH;

注意:SYSAUDITOR、SYSSSO用户需分别登录后修改自身策略,其他用户由SYSDBA操作。

总结

达梦数据库的安全加固需从账号策略、审计机制、通信加密、权限控制等多维度入手。上述方案中,部分参数修改后需重启数据库生效,建议在维护窗口执行。定期执行检查语句,结合业务场景调整配置,可有效降低安全风险。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐