未经授权查询mongodb上的admin.system.namespaces

我开始一个新的mongo实例,创build一个用户,授权它,但是当我运行“show collections”时,系统说这个id没有被授权。 我不知道为什么?

# mongo admin MongoDB shell version: 2.4.3 connecting to: admin Server has startup warnings: Thu May 23 18:23:56.735 [initandlisten] Thu May 23 18:23:56.735 [initandlisten] ** NOTE: This is a 32 bit MongoDB binary. Thu May 23 18:23:56.735 [initandlisten] ** 32 bit builds are limited to less than 2GB of data (or less with --journal). Thu May 23 18:23:56.735 [initandlisten] ** See http://dochub.mongodb.org/core/32bit Thu May 23 18:23:56.735 [initandlisten] > db = db.getSiblingDB("admin") admin > db.addUser({user:"sa",pwd:"sa",roles:["userAdminAnyDatabase"]}) { "user" : "sa", "pwd" : "75692b1d11c072c6c79332e248c4f699", "roles" : [ "userAdminAnyDatabase" ], "_id" : ObjectId("519deedff788eb914bc429b5") } > show collections\ Thu May 23 18:26:50.103 JavaScript execution failed: SyntaxError: Unexpected token ILLEGAL > show collections Thu May 23 18:26:52.418 JavaScript execution failed: error: { "$err" : "not authorized for query on admin.system.namespaces", "code" : 16550 } at src/mongo/shell/query.js:L128 > db.auth("sa","sa") 1 > show collections Thu May 23 18:27:22.307 JavaScript execution failed: error: { "$err" : "not authorized for query on admin.system.namespaces", "code" : 16550 } at src/mongo/shell/query.js:L128 

Solutions Collecting From Web of "未经授权查询mongodb上的admin.system.namespaces"

我有同样的问题,但我发现这个教程,它帮助了我。

http://www.hacksparrow.com/mongodb-add-users-and-authenticate.html

使用:

 db.addUser('sa', 'sa') 

代替

 db.addUser({user:"sa",pwd:"sa",roles:["userAdminAnyDatabase"]}) { "user" : "sa", "pwd" : "75692b1d11c072c6c79332e248c4f699", "roles" : [ "userAdminAnyDatabase" ], "_id" : ObjectId("519deedff788eb914bc429b5") } 

正如罗伯特所说,管理员用户只有权限管理,而不是写入数据库。 所以你必须为你的数据库创建一个自定义的用户。 有不同的方法。 我选择了dbOwner的方式。

(我使用的是Ubuntu server,mongo 2.6.3和Robomongo)

所以要做到这一点,最好是像mongo一样创建你的管理员用户:

在你的linux shell中输入mongo

而这些命令在mongo shell中:

 use admin db.createUser({user:"mongoadmin",pwd:"chooseyouradminpassword",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) db.auth("mongoadmin","chooseyouradminpassword") exit 

编辑mongo conf文件:

 nano /etc/mongod.conf 

如果未安装nano,则可以使用vi。

通过取消注释/添加这些行auth=true激活身份验证

如果你想从其他机器上使用Robomongo,通过bind_ip=0.0.0.0更改bind_ip=127.0.0.1 (也许你应该在生产中增加更多的保护)。

在linux shell中键入:

 service mongod restart mongo 

而在mongo shell中:

 use admin db.auth("mongoadmin","pwd:"chooseyouradminpassword") use doomnewdatabase db.createUser({user:"doom",pwd:"chooseyourdoompassword",customData:{desc:"Just me as I am"},roles : [{role:"dbOwner",db:"doomnewdatabase"}]}) db.auth("doom","chooseyourdoompassword") show collections 

(customData不是必需的)。

如果你想尝试,如果它的工作,在mongo shell输入:

 db.products.insert( { item: "card", qty: 15 } ) show collections db.products.find() 

祝你好运 ! 希望它会帮助你和其他人!

我有几个小时搜索这些信息。

我有同样的问题,这就是我解决它的方法:

 db = db.getSiblingDB('admin') db.addUser( { user: "mongoadmin", pwd: "adminpass", roles: ['clusterAdmin', 'userAdminAnyDatabase', 'readAnyDatabase'] } ) 

对于MongoDB版本2.6使用:

 db.createUser( { user: "testUser" pwd: "password", roles: [{role: "readWrite", db:"yourdatabase"}] }) 

看文档

我解决了这个问题,就像现在的mongoDB 2.6 + 3一样

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

请注意,对于代替userAdminAnyDatabase角色提交,我们使用root用户

我会尝试授予阅读角色的用户。 userAdminAnyDatabase授予管理用户的能力。