2017-09-13 417 views
0

我已经设置了一个mongo数据库,它与身份验证一起工作。MongoError:listCollections失败

我想使用mongodb native driver复制数据库。


问题是我的命令遭到拒绝为:

MongoError: listCollections failed: { ok: 0.0, errmsg: "not authorized on SESSION to execute command { listCollections: 1, filter: { $or: [ { type: "collection" }, { type: { $exists: false } } ] }, cu...", code: 13, codeName: "Unauthorized" } 

这是我如何运行我的数据库:

/usr/bin/mongod --quiet 
       --setParameter authenticationMechanisms=SCRAM-SHA-1 
       --auth 
       --port 27017 
       --dbpath /database 

这里是我的用户m用于连接

db.createUser({ 
     "user": "USER", 
     "pwd": "PASS", 
     "roles": [ "root" ] 
    }); 

我也尝试使用:

db.createUser({ 
     "user": "USER", 
     "pwd": "PASS", 
     "roles": [ { "role": "root", "db": "admin" } ] 
    }); 

这里是我如何连接(连接成功):

const url = "mongodb://USER:[email protected]:27017/SESSION?authSource=admin"; 

MongoClient.connect(url, ... 

这里是我如何请求副本:

const mongoCommand = { 
    copydb: 1, 
    fromhost: "172.42.0.2", 
    fromdb: "SESSION", 
    todb: "SESSION_COPY", 
}; 

// Perform the copy 
this.db.admin().command(mongoCommand, function (err, data) { 

我使用:

Mongodb (database) v3.4.7 
Mongodb (node package) v2.2.31 

谢谢:)


一些职位,让我通过这个:

mongodb-not-authorized-for-query-admin-system-users

how-can-i-execute-db-copydatabase-through-nodejss-mongodb-native-driver

+0

这些用户都没有被授权访问'SESSION'数据库。实际上有一个属性。实际上你使用过它,它是'db'。您只授予'admin'权限。 –

+0

第一个用户有''角色“:[”root“]'应该授予每个收集权的'root'权限? –

回答

0

好吧,首先,这里是copydb command mongodb documentation

enter image description here

我们可以看到,在使用fromhost的情况下,你需要指定usernamenoucekey


SOLUCE

如果你想一个数据库在同一主机复制:不要使用fromhost

const mongoCommand = { 
    copydb: 1, 
    fromdb: "SESSION", 
    todb: "SESSION_SAVE", 
}; 

如果你想复制使用不同的主机数据库:中usernamenoncekeyhere is how you create them使用。