Назад | Перейти на главную страницу

Как узнать местное время сервера MongoDB?

Я запускаю 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 чтобы избежать создания пользователя в другой базе данных.