setAuditConfig
重要
自 7.1 版本以来已弃用:使用auditConfig
作为集群参数替代。
定义
setAuditConfig
新版本5.0.
setAuditConfig
是一个管理命令,用于在运行时为mongod
和mongos
服务器实例设置新的审计配置。使用
db.adminCommand( { command } )
方法在admin
数据库上运行setAuditConfig
。
兼容性
此命令在以下环境中托管的部署中可用
MongoDB Enterprise:MongoDB的基于订阅、自主管理的版本
MongoDB Community:MongoDB的开源、免费使用和自主管理版本
重要
此命令在MongoDB Atlas集群中不受支持。有关所有命令的Atlas支持信息,请参阅不受支持的命令。
语法
该命令具有以下语法
db.adminCommand( { setAuditConfig: 1, filter: <Filter Document>, auditAuthorizationSuccess: <Boolean> } )
命令字段
该命令具有以下字段
字段 | 类型 | 描述 |
---|---|---|
setAuditConfig | 整数 | |
过滤器 | 文档 | 一个 审计过滤器 |
auditAuthorizationSuccess | 布尔值 | 记录所有,或仅记录失败的访问授权 |
行为
启用审计,以在运行时使用setAuditConfig
。
auditAuthorizationSuccess
启用对 authCheck 动作的授权成功审计。参数值必须为 true
才能审计读/写操作。但是,当 auditAuthorizationSuccess
为 false
时,由于审计系统仅记录授权失败,因此审计对性能的影响较小。
配置更新通过 oplog 机制进行分发,这意味着 mongod
节点的更新会非常快速地分发到从节点。在从节点轮询更新配置细节之前,如果在主服务器上执行 setAuditConfig
并在 getAuditConfig
上执行操作,则可能会看到因轮询延迟而产生的不一致数据。在 mongos
节点上存在不同的分发机制。 mongos
节点必须定期 轮询
主服务器以获取配置更新。如果在主服务器上执行 setAuditConfig
并在从节点上执行 getAuditConfig
,则可能会看到不一致的数据,因为此时从节点尚未轮询到最新的配置细节。
示例
在这些示例中,审计消息已被重新格式化。它们在日志文件中显示为一行。
审计集合的创建和删除
在创建或删除集合时启用审计。
db.admin.runCommand( { setAuditConfig: 1, filter: { atype: { $in: [ "createCollection", "dropCollection" ] } }, auditAuthorizationSuccess: false } )
当在 sales
数据库中创建 inventory
集合时,审计系统将记录如下消息
{ "atype" : "createCollection", "ts" : { "$date" : "2021-08-09T13:45:05.372+00:00" }, "uuid" : { "$binary" : "RKU/YLizS6K9se2GUU7ZVQ==", "$type" : "04" }, "local" : { "ip" : "127.0.0.1", "port" : 27502 }, "remote" : { "ip" : "127.0.0.1", "port" : 51918 }, "users" : [], "roles" : [], "param" : { "ns" : "sales.inventory" }, "result" : 0 }
当从 sales
数据库中删除 inventory
集合时,审计系统将记录如下消息
{ "atype" : "dropCollection", "ts" : { "$date" : "2021-08-09T13:45:00.661+00:00" }, "uuid" : { "$binary" : "0gle4/pSQli+LUcz43ykag==", "$type" : "04" }, "local" : { "ip" : "127.0.0.1", "port" : 27502 }, "remote" : { "ip" : "127.0.0.1", "port" : 51928 }, "users" : [], "roles" : [], "param" : { "ns" : "sales.inventory" }, "result" : 0 }
审计文档交互
将 auditAuthorizationSuccess
设置为 true
并创建一个过滤器,包括要审计的读取和写入操作的相关动作。
db.admin.runCommand( { setAuditConfig: 1, filter: { atype: "authCheck", "param.command": { $in: [ "find", "insert", "delete", "update", "findandmodify" ] } }, auditAuthorizationSuccess: true } )
使用 find
命令在 sales
数据库中搜索 inventory
集合以创建如下的审计日志条目
{ "atype" : "authCheck", "ts" : { "$date" : "2021-08-09T15:28:10.788+00:00" }, "uuid" : { "$binary" : "ngwRt5CRTZqgE4TsfleoqQ==", "$type" : "04" }, "local" : { "ip" : "127.0.0.1", "port" : 27502 }, "remote" : { "ip" : "127.0.0.1", "port" : 51930 }, "users" : [], "roles" : [], "param" : { "command" : "find", "ns" : "sales.inventory", "args" : { "find" : "inventory", "filter" : { "widget" : 1 }, "lsid" : { "id" : { "$binary" : "FNWNxiitQ8GHKrHx8eJSbg==", "$type" : "04" } }, "$clusterTime" : { "clusterTime" : { "$timestamp" : { "t" : 1628521381, "i" : 1 } }, "signature" : { "hash" : { "$binary" : "AAAAAAAAAAAAAAAAAAAAAAAAAAA=", "$type" : "00" }, "keyId" : { "$numberLong" : "0" } } }, "$db" : "sales" } }, "result" : 0 }