如何解决错误读取数据库:未在mongo DB中授权

时间:2018-02-19 09:21:52

标签: mongodb mongodb-query mongorestore

我正在使用Mongo DB版本3.4,我在DB中有一个用户

C:\Program Files\MongoDB\Server\3.4\bin>mongo
MongoDB shell version v3.4.5
connecting to: mongodb://127.0.0.1:27017
MongoDB server version: 3.4.5
> use admin
switched to db admin
> db.auth("myUserAdmin","abc123");
1

我使用了以下带身份验证的查询来恢复转储文件

mongorestore --host 50.50.1.57:27017 --username myUserAdmin --password abc123 --authenticationDatabase admin --db targetdb E:\test\DB\test_02_19_2018_06_00_01\test

但是我可以提出你的问题,请

2018-02-19T14:45:29.743+0530    the --db and --collection args should only be used when restoring from a BSON file. Other uses are deprecated and will not exist in the future; use --nsInclude instead
2018-02-19T14:45:29.745+0530    building a list of collections to restore from E:\test\DB\test_02_19_2018_06_00_01\test dir
2018-02-19T14:45:29.790+0530    Failed: targetdb.access_token: error reading database: not authorized on targetdb to execute command { listCollections: 1, cursor: { batchSize: 0 } }

2 个答案:

答案 0 :(得分:3)

MyUserAdmin没有足够的权限可以恢复为targetdb

您可以使用Mongodb的内置角色:

还原,它将为您提供从不包含system.profile集合数据的备份还原数据所需的权限。它还将为您提供以下任何资源的操作:

listCollections

这将解决您所看到的错误:

not authorized on targetdb to execute command { listCollections: 1, cursor: { batchSize: 0 } }

备份将提供备份数据所需的最小权限。

使用正确的角色/权限运行更新当前用户:

db.updateUser( "MyUserAdmin",
  { roles : [  
    { role : "restore", db : "admin"  },
    { role : "backup", db : "admin"  }
  ] } )

答案 1 :(得分:0)

创建具有读写访问权限的用户并尝试

db.createUser( { "user" : "user123",  "pwd": "pass",
             "roles" : [{ role: "dbOwner", db: "livmor_mongo" }, 
             { 
                     "role" : "readWrite", 
                     "db" : "livmor_mongo" 
             } ] } )

您也可以使用userAdminAnyDatabase角色而不是readWrite