达梦数据库常见漏洞及处理方案
目录
- 达梦数据库常见漏洞及处理方案
- 一、登录失败口令锁定时间过短
- 二、口令使用期限过大
- 三、审计功能未开启
- 四、通信未加密
- 1. 基于传输层的SSL协议加密(暂不推荐)
- 2. 基于应用层的消息包加密
- 五、未检查存储过程中EXECUTE IMMEDIATE语句的权限
- 六、口令可重用前的变更次数过小
- 七、口令可重用前的等待天数过小
- 八、DBA用户权限未限制
- 九、SP_MAC_LABEL_FROM_CHAR过程权限未限制
- 总结
达梦数据库常见漏洞及处理方案
在数据库运维工作中,安全始终是核心议题之一。达梦数据库作为国产数据库的代表,其安全加固尤为重要。本文将结合实际运维经验,详细介绍达梦数据库中常见漏洞的检测与修复方法,帮助数据库管理员构建更安全的运行环境。
一、登录失败口令锁定时间过短
风险描述:当登录失败次数过多时,若锁定时间过短,容易遭受暴力破解攻击,导致账号安全风险升高。
检查方法:通过以下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时,无法设置有效期,需先调整宽限时间。
修复方案:
- 设置口令过期宽限时间为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');
- 设置口令有效期为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操作。
总结
达梦数据库的安全加固需从账号策略、审计机制、通信加密、权限控制等多维度入手。上述方案中,部分参数修改后需重启数据库生效,建议在维护窗口执行。定期执行检查语句,结合业务场景调整配置,可有效降低安全风险。