SQL Server Audit日志生成失败,提示'mndo'重复键错误排查
SQL Server Audit 重复键错误排查方案
问题现象
- 启用Audit后无法生成日志,返回错误:
"item has already Been added. Key in dictionary: 'mndo' Key Being added: 'mndo'"
- 测试用SQL命令(使用
test用户执行):USE Clinica_Medica SELECT * FROM TEST WHERE Nome = 'OI'; - 更换
SA用户、使用全局策略测试,问题依旧;已确认相关组件已启用。
排查与解决步骤
检查审计策略的重复定义
核对创建Audit、服务器审计规范、数据库审计规范的脚本或配置,确认是否重复添加了mndo相关的审计动作或目标对象。比如同一策略中多次绑定同一项审计规则,或者不同策略重复关联了相同的审计条目。验证Audit日志路径权限
确认Audit指定的日志文件路径对SQL Server服务账户具备读写权限。权限不足时,可能导致日志无法写入,同时触发内部字典重复键的异常(部分场景下权限问题会引发非直观错误)。升级SQL Server补丁
该重复键错误在SQL Server 2016、2017等版本的早期累积更新(CU)中存在已知bug,建议升级到对应版本的最新CU,修复这类内部字典冲突问题。重建Audit对象
删除现有Audit及关联的审计规范,重新创建(确保每个审计动作只添加一次):-- 删除数据库审计规范 DROP DATABASE AUDIT Specification [Your_Db_Audit_Spec] -- 删除服务器审计规范 DROP SERVER AUDIT Specification [Your_Server_Audit_Spec] -- 删除Audit对象 DROP AUDIT [Your_Audit_Name] -- 重新创建Audit(替换路径为实际有效路径) CREATE AUDIT [Your_Audit_Name] TO FILE (FILEPATH = N'C:\SQLAuditLogs\') WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE); -- 启用Audit ALTER AUDIT [Your_Audit_Name] WITH (STATE = ON);检查系统元数据冲突
若上述步骤无效,查询系统视图检查Audit元数据是否存在重复条目:-- 查询服务器审计规范详情 SELECT * FROM sys.server_audit_specifications_details -- 查询数据库审计规范详情 SELECT * FROM sys.database_audit_specifications_details若发现
mndo相关的重复记录,清理后重新创建审计规范。
内容的提问来源于stack exchange,提问作者user21143871
相关产品推荐
相关产品推荐

