我正在运行带有身份验证的 mongodb。我想让非 root 客户端获取服务器时间。
我认为最简单的方法是使用serverStatus
。但是默认的 readWrite 用户没有这样的权限。
我对 Mongo 安全模型真的一头雾水。我尝试添加serverStatus
如下角色:
db.createRole(
{
role: "serverStatus",
privileges: [
{
resource: { db: "admin", collection: ""},
actions: [ "serverStatus" ]
}
],
roles: [],
writeConcern: { w: "majority" , wtimeout: 5000 }
}
)
然后添加到用户:
db.grantRolesToUser( "myuser", [ { role: "serverStatus", db: "admin" } ] )
但试图得到serverStatus
我得到的是:
> db.serverStatus()
{
"ok" : 0,
"errmsg" : "not authorized on admin to execute command { serverStatus: 1.0 }",
"code" : 13
}
请问有什么建议吗?
答案1
我已经让它运行了。我错过了serverStatus
应该向集群资源授予操作的要点,例如(参见cluster: true
):
use admin
db.createRole(
{
role: "serverStatus",
privileges: [
{
resource: { cluster: true },
actions: [ "serverStatus" ]
}
],
roles: [],
writeConcern: { w: "majority" , wtimeout: 5000 }
}
)
此外,在grantRolesToUser
发出之前还应use mydb
避免在另一个数据库中创建用户。