MongoDB: applyOps: не авторизовано администратором для выполнения команды - PullRequest
1 голос
/ 17 марта 2019

Очень хороший день,

У меня есть пользователь в mongodb, как показано ниже, который имеет привилегии суперпользователя (я подтвердил настройку роли с помощью команды show users)

{
    "_id" : "admin.mongoadmin",
    "user" : "mongoadmin",
    "db" : "admin",
    "roles" : [
        {
            "role" : "readWrite",
            "db" : "admin"
        },
        {
            "role" : "root",
            "db" : "admin"
        }
    ],
    "mechanisms" : [
        "SCRAM-SHA-1",
        "SCRAM-SHA-256"
    ]
}

, когдаЯ пытаюсь восстановить оплог, используя mongorestore, я получаю сообщение об ошибке:

Не удалось: ошибка восстановления: ошибка при применении оплог: applyOps: не авторизовано администратором для выполнения команды {applyOps: [{ts: метка времени (1552828309, 1), h: 4632811839329880092, v: 2, op: "c", ns: "admin. $ cmd", o: {create: "system.keys", idIndex: {v: 2,ключ: {_id: 1}, имя: " id ", ns: "admin.system.keys"}}, o2: {}}], $ db: "admin"}

mongorestore -u admin -p password --authenticationDatabase=admin --oplogFile 0000000000_0_oplog.bson  --oplogReplay --oplogLimit=1552828432 --dir='/oplog/temp'
2019-03-17T13:47:36.945+0000    preparing collections to restore from
2019-03-17T13:47:36.945+0000    replaying oplog
2019-03-17T13:47:36.962+0000    Failed: restore error: error applying oplog: applyOps: not authorized on admin to execute command { applyOps: [ { ts: Timestamp(1552828309, 1), h: 4632811839329880092, v: 2, op: "c", ns: "admin.$cmd", o: { create: "system.keys", idIndex: { v: 2, key: { _id: 1 }, name: "_id_", ns: "admin.system.keys" } }, o2: {} } ], $db: "admin" }

ПРИМЕЧАНИЕ : я указал oploglimit (--oplogLimit = 1552828432) с последним значением, полученным из bsondump. Это правильно?Или я что-то упустил?

(то есть)

{"ts":{"$timestamp":{"t":1552828432,"i":79}},"t":{"$numberLong":"1"},"h":{"$numberLong":"-2072015676601300967"},"v":2,"op":"i","ns":"inventory.hari","ui":{"$binary":"avdlGH8AS1eBPXRytlO1Yg==","$type":"04"},"wall":{"$date":"2019-03-17T13:13:52.139Z"},"o":{"_id":"79","name":"Hari","role":"Developer","isEmployee":true}}
{"ts":{"$timestamp":{"t":1552828432,"i":80}},"t":{"$numberLong":"1"},"h":{"$numberLong":"-6279494628130059002"},"v":2,"op":"u","ns":"inventory.hari","ui":{"$binary":"avdlGH8AS1eBPXRytlO1Yg==","$type":"04"},"o2":{"_id":"79"},"wall":{"$date":"2019-03-17T13:13:52.139Z"},"o":{"_id":"79","name":"WD_Userjava.util.Random@9a7504c","role":"Developer","isEmployee":true}}

Любая помощь приветствуется.Заранее спасибо.

1 Ответ

0 голосов
/ 03 июня 2019
use admin

db.createRole(
   {
     role: "interalUseOnlyOplogRestore",
     privileges: [
       { resource: { anyResource: true }, actions: [ "anyAction" ] }
     ],
     roles: []
   }
)

db.createUser({
  user: "root",
  pwd: "password",
  roles: [
    {role: "root", db: "admin"},"__system","interalUseOnlyOplogRestore","backup"
  ]
})

Лучше уменьшить привилегии до уровня, подобного приведенному ниже.

db.createUser({
  user: "root2",
  pwd: "password",
  roles: [
    "interalUseOnlyOplogRestore"
  ]
})

После этого вы можете запустить команду восстановления

mongorestore --port 27017 --oplogReplay oplogRestore --authenticationDatabase admin -u root2 -p password
...