概述
当 MongoDB 实例启用了身份验证后,MMS 的监控代理和备份代理在连接时也需要进行身份验证,并且必须为其授予相应的权限。所有用户账号均在 MongoDB 的 admin 数据库中定义。本文主要针对 MongoDB 2.4 和 2.6 版本进行说明。
MMS 监控代理的权限配置
MongoDB 2.6 实例
要监控 MongoDB 2.6 实例,代理用户必须拥有 clusterMonitor 角色。创建该用户的命令如下:
use admin
db.createUser( { user: "<username>",
pwd: "<password>",
roles: [
{ role: "clusterMonitor", db: "admin" }
] } )此外,为了兼容 2.4 版本,代理可能会尝试查询 local 数据库。如果仅授予 clusterMonitor 角色,MongoDB 日志中会产生验证错误信息。代理能够从这类错误中恢复,因此可以放心地忽略这些消息。
MongoDB 2.4 实例
要监控 MongoDB 2.4 实例,代理用户需要具备以下权限:
- clusterAdmin
- readAnyDatabase
创建用户的命令如下:
use admin
db.addUser( { user: "<username>",
pwd: "<password>",
roles: [ "clusterAdmin",
"readAnyDatabase" ] } )由于基础监控用户不需要 dbAdminAnyDatabase 角色,MongoDB 日志可能会报告类似 command denied: { profile: -1 } 的信息。如果不希望 MMS 收集 profile 数据,可以忽略该信息;如果需要收集,则需要赋予该权限。
MMS 监控与数据库 Profiling
Profiling 功能可以捕获正在进行的读写操作、cursor 操作以及有关数据库的数据库命令信息。
MongoDB 2.6 实例
带数据库 profiling 监控 2.6 版本同样需要 clusterMonitor 角色权限:
use admin
db.createUser( { user: "<username>",
pwd: "<password>",
roles: [ { role: "clusterMonitor", db: "admin" } ] } )MongoDB 2.4 实例
带数据库 profiling 监控 2.4 版本需要以下角色权限:
- clusterAdmin
- readAnyDatabase
- dbAdminAnyDatabase
use admin
db.addUser( { user: "<username>",
pwd: "<password>",
roles: [ "clusterAdmin",
"readAnyDatabase",
"dbAdminAnyDatabase"
] } )MMS 监控(不收集 dbStats 数据)
如果监控时不收集 dbStats 数据,那么监控数据中将不包含数据库存储、记录、索引和其他数据的统计信息。
MongoDB 2.6 实例
clusterMonitor 角色已包含执行 dbStats 操作的权限。创建用户命令如下:
use admin
db.createUser( { user: "<username>",
pwd: "<password>",
roles: [ { role: "clusterMonitor", db: "admin" } ] } )MongoDB 2.4 实例
监控 2.4 版本需要 clusterAdmin 角色权限:
use admin
db.addUser( { user: "<username>",
pwd: "<password>",
roles: [ "clusterAdmin" ] } )MMS 备份代理的权限配置
MongoDB 2.6 实例
要备份 MongoDB 2.6 实例,备份代理需要以下权限:
- clusterAdmin
- readAnyDatabase
- userAdminAnyDatabase
同时,还需要对 local 库和 admin 库具有 readWrite 角色。创建用户命令如下:
use admin
db.createUser( { user: "<username>",
pwd: "<password>",
roles: [ "clusterAdmin", "readAnyDatabase",
"userAdminAnyDatabase",
{ role: "readWrite", db: "admin" },
{ role: "readWrite", db: "local" },
] } )MongoDB 2.4 实例
要备份 MongoDB 2.4 实例,备份代理需要以下权限:
- clusterAdmin
- readAnyDatabase
- userAdminAnyDatabase
同时,还需要对 local 库和 admin 库具有 readWrite 角色。创建用户命令如下:
use admin
db.addUser( { user: "<username>",
pwd: "<password>",
roles: [ "clusterAdmin",
"readAnyDatabase",
"userAdminAnyDatabase"
],
otherDBRoles: { local: ['readWrite'],
admin: ['readWrite'] } } )