Я запускаю mongodb с аутентификацией. Я хочу, чтобы клиент без полномочий root получил время сервера.
Я думал, что проще всего будет использовать serverStatus
. Но пользователь readWrite по умолчанию не имеет такой привилегии.
Я действительно потерялся в модели безопасности Монго. Я пробовал добавить 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
}
какой-нибудь совет, пожалуйста?
У меня он работает. Я упустил то, что serverStatus
действие должно быть предоставлено ресурсу кластера, например (см. cluster: true
):
use admin
db.createRole(
{
role: "serverStatus",
privileges: [
{
resource: { cluster: true },
actions: [ "serverStatus" ]
}
],
roles: [],
writeConcern: { w: "majority" , wtimeout: 5000 }
}
)
Также до grantRolesToUser
нужно выпустить use mydb
чтобы избежать создания пользователя в другой базе данных.