2023年8月1日发(作者:)

MongoDB审计⽇志配置及导⼊数据库利⽤MongoDB⾃带的审计功能可以记录对MongoDB数据库的每个操作,但它⾃带的审计功能只能把⽇志记录到console、syslog或者file中,不利于⽇常查看统计,这⾥讲⼀下审计⽇志的配置及导⼊数据库中。审计⽇志配置在配置⽂件中添加如下代码即可启⽤审计功能:# 审计⽇志设置auditLog: destination: file format: BSON path: /home/zzz/mongodb_ser/data/设置审计⽇志过滤功能# 审计⽇志设置auditLog: destination: file format: BSON path: /home/zzz/mongodb_ser/data/ filter: '{ atype:{ $in: ["authCheck","createCollection","createDatabase"] },"":{$nin:[ "n"]},"d":{$nin:[ "isMaster","ismaster","saslStart","saslContinue","listCollections","listDatabases","listIndexes","collStats","find","getlasterror","buildinfo","getLastError","aggregate"] } }'setParameter: { auditAuthorizationSuccess: true }上⾯配置可以记录⼤部分操作⽇志,⼜不会把没⽤的⽇志记录下来,可以节约空间。具体过滤设置可以参考下⾯附录⾥。将审计⽇志导⼊到数据库⾸先创建⼀个审计⽇志导⼊⽤户及数据库,使⽤admin登录,必须在auditdb数据库中创建⽤户,否则下⾯的导⼊代码⽆法运⾏。zzz@zzz-vb:~$ /mongodb/bin/mongo localhost:27017/admin -uadmin -p123456MongoDB shell version: 3.2.22connecting to: localhost:27017/adminMongoDB Enterprise > use auditdbswitched to db auditdbMongoDB Enterprise > User({user:"audit",pwd:"123456",roles:[{role:"readWrite",db:"auditdb"}]})然后创建⼀个可执⾏⽂件,并填⼊下⾯代码即可,每运⾏⼀次⽂件都会把审计⽇志中的⽇志导⼊到数据库中,并删除审计⽇志。echo "导⼊审计⽇志开始"/home/zzz/mongodb_ser/bin/mongorestore -h localhost:27017 -uaudit -p 123456 -d auditdb -c auditLog /home/zzz/mongodb_ser/data/itecho "导⼊审计⽇志结束"echo "关闭MongoDB"/home/zzz/mongodb_ser/bin/mongod -f /home/zzz/mongodb_ser/ -shutdowncurrent_date=`date -d "-1 day" "+%Y%m%d"`mv /home/zzz/mongodb_ser/data/ /home/zzz/mongodb_ser/data/audit_${current_date}_.bsonwaitecho "重新启动MongoDB"/home/zzz/mongodb_ser/bin/mongod -f /home/zzz/mongodb_ser/附录:审计⽇志过滤器配置说明:过滤条件格式为: "":{$nin:[ "n"]}, "d":{$nin:[ "isMaster,"ismaster""]}1. ns 代表对所有 atype 类型的 数据库.集合 过滤,因为上⾯是不包含集合n所以 atype 没有名为 ns 的param也会记录,若换成包含或等于则atype 没有名为 ns 的param不会记录该类型⽇志。2. authcheck 类型⽇志包含所有的操作⽇志除了createCollection、createDatabase,所以当atype 包含authcheck 类型时,可以把其他类型⽇志去掉,否则会造成重复记录⽇志3. 对于同⼀个操作也会对应对个authcheck 类型审计⽇志,⽐如删除⽤户时,会记录两次审计⽇志,它们的command ⼀个为delete,另⼀个是dropUser,所以若想每个操作只记录⼀次审计⽇志,还要对command字段进⾏过滤,⽐如过滤掉dropUser这类⽇志,因为每个集合删除记录时都会记录delete⽇志,所以只能过滤掉dropUser。4. 不知道为什么会 command 会出现⼤⼩写问题,有的地⽅是⾸字母⼤写有的没有,所以有点类型要把两种都加上5. 默认authcheck 类型⽇志只会记录失败的记录,若想记录所有⽇志,在配置⽂件根下添加:setParameter: { auditAuthorizationSuccess: true }MongoDB运算符1. ⽐较$eq 匹配等于指定值的值。$gt 匹配⼤于指定值的值。$gte 匹配⼤于或等于指定值的值。$lt 匹配⼩于指定值的值。$lte 匹配⼩于或等于指定值的值。$ne 匹配所有不等于指定值的值。$in 匹配数组中指定的任何值。$nin 不匹配数组中指定的任何值。2. 逻辑$or ⽤逻辑联接查询⼦句OR将返回符合任⼀⼦句条件的所有⽂档。$and ⽤逻辑联接查询⼦句AND将返回两个⼦句都匹配的所有⽂档。$not 反转查询表达式的效果,并返回与查询表达式不匹配的⽂档。$nor ⽤逻辑联接查询⼦句NOR将返回两个⼦句均不匹配的所有⽂档。

2023年8月1日发(作者:)

MongoDB审计⽇志配置及导⼊数据库利⽤MongoDB⾃带的审计功能可以记录对MongoDB数据库的每个操作,但它⾃带的审计功能只能把⽇志记录到console、syslog或者file中,不利于⽇常查看统计,这⾥讲⼀下审计⽇志的配置及导⼊数据库中。审计⽇志配置在配置⽂件中添加如下代码即可启⽤审计功能:# 审计⽇志设置auditLog: destination: file format: BSON path: /home/zzz/mongodb_ser/data/设置审计⽇志过滤功能# 审计⽇志设置auditLog: destination: file format: BSON path: /home/zzz/mongodb_ser/data/ filter: '{ atype:{ $in: ["authCheck","createCollection","createDatabase"] },"":{$nin:[ "n"]},"d":{$nin:[ "isMaster","ismaster","saslStart","saslContinue","listCollections","listDatabases","listIndexes","collStats","find","getlasterror","buildinfo","getLastError","aggregate"] } }'setParameter: { auditAuthorizationSuccess: true }上⾯配置可以记录⼤部分操作⽇志,⼜不会把没⽤的⽇志记录下来,可以节约空间。具体过滤设置可以参考下⾯附录⾥。将审计⽇志导⼊到数据库⾸先创建⼀个审计⽇志导⼊⽤户及数据库,使⽤admin登录,必须在auditdb数据库中创建⽤户,否则下⾯的导⼊代码⽆法运⾏。zzz@zzz-vb:~$ /mongodb/bin/mongo localhost:27017/admin -uadmin -p123456MongoDB shell version: 3.2.22connecting to: localhost:27017/adminMongoDB Enterprise > use auditdbswitched to db auditdbMongoDB Enterprise > User({user:"audit",pwd:"123456",roles:[{role:"readWrite",db:"auditdb"}]})然后创建⼀个可执⾏⽂件,并填⼊下⾯代码即可,每运⾏⼀次⽂件都会把审计⽇志中的⽇志导⼊到数据库中,并删除审计⽇志。echo "导⼊审计⽇志开始"/home/zzz/mongodb_ser/bin/mongorestore -h localhost:27017 -uaudit -p 123456 -d auditdb -c auditLog /home/zzz/mongodb_ser/data/itecho "导⼊审计⽇志结束"echo "关闭MongoDB"/home/zzz/mongodb_ser/bin/mongod -f /home/zzz/mongodb_ser/ -shutdowncurrent_date=`date -d "-1 day" "+%Y%m%d"`mv /home/zzz/mongodb_ser/data/ /home/zzz/mongodb_ser/data/audit_${current_date}_.bsonwaitecho "重新启动MongoDB"/home/zzz/mongodb_ser/bin/mongod -f /home/zzz/mongodb_ser/附录:审计⽇志过滤器配置说明:过滤条件格式为: "":{$nin:[ "n"]}, "d":{$nin:[ "isMaster,"ismaster""]}1. ns 代表对所有 atype 类型的 数据库.集合 过滤,因为上⾯是不包含集合n所以 atype 没有名为 ns 的param也会记录,若换成包含或等于则atype 没有名为 ns 的param不会记录该类型⽇志。2. authcheck 类型⽇志包含所有的操作⽇志除了createCollection、createDatabase,所以当atype 包含authcheck 类型时,可以把其他类型⽇志去掉,否则会造成重复记录⽇志3. 对于同⼀个操作也会对应对个authcheck 类型审计⽇志,⽐如删除⽤户时,会记录两次审计⽇志,它们的command ⼀个为delete,另⼀个是dropUser,所以若想每个操作只记录⼀次审计⽇志,还要对command字段进⾏过滤,⽐如过滤掉dropUser这类⽇志,因为每个集合删除记录时都会记录delete⽇志,所以只能过滤掉dropUser。4. 不知道为什么会 command 会出现⼤⼩写问题,有的地⽅是⾸字母⼤写有的没有,所以有点类型要把两种都加上5. 默认authcheck 类型⽇志只会记录失败的记录,若想记录所有⽇志,在配置⽂件根下添加:setParameter: { auditAuthorizationSuccess: true }MongoDB运算符1. ⽐较$eq 匹配等于指定值的值。$gt 匹配⼤于指定值的值。$gte 匹配⼤于或等于指定值的值。$lt 匹配⼩于指定值的值。$lte 匹配⼩于或等于指定值的值。$ne 匹配所有不等于指定值的值。$in 匹配数组中指定的任何值。$nin 不匹配数组中指定的任何值。2. 逻辑$or ⽤逻辑联接查询⼦句OR将返回符合任⼀⼦句条件的所有⽂档。$and ⽤逻辑联接查询⼦句AND将返回两个⼦句都匹配的所有⽂档。$not 反转查询表达式的效果,并返回与查询表达式不匹配的⽂档。$nor ⽤逻辑联接查询⼦句NOR将返回两个⼦句均不匹配的所有⽂档。