我启动一个新的mongo实例,创建一个用户,授权它,但是当我运行“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
答案 0 :(得分:13)
我遇到了同样的问题,但是我找到了这个教程,它帮助了我。
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")
}
答案 1 :(得分:8)
正如罗伯特所说,管理员用户只有管理员权限,不能写入数据库。 因此,您必须为数据库创建自定义用户。有不同的方式。我选择了dbOwner方式。
(我使用的是Ubuntu Server,mongo 2.6.3和Robomongo)
为此,fisrt创建管理员用户,如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=127.0.0.1
更改行bind_ip=0.0.0.0
(也许你应该在生产中添加更多保护)。
在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()
祝你好运!希望它能帮助你和其他人!
我已经搜索了几个小时的信息。
答案 2 :(得分:7)
我遇到了同样的问题,这就是我解决它的方法:
db = db.getSiblingDB('admin')
db.addUser(
{ user: "mongoadmin",
pwd: "adminpass",
roles: ['clusterAdmin', 'userAdminAnyDatabase', 'readAnyDatabase'] } )
答案 3 :(得分:3)
对于MongoDB 2.6版,请使用:
db.createUser(
{
user: "testUser"
pwd: "password",
roles: [{role: "readWrite", db:"yourdatabase"}]
})
请参阅docs
答案 4 :(得分:1)
我这样解决了 对于mongoDB 2.6 +目前3
db.createUser(
{
user: "username",
pwd: "password",
roles: [ { role: "root", db: "admin" } ]
}
)
请注意,对于角色而非 userAdminAnyDatabase ,我们使用 root
答案 5 :(得分:0)
我会尝试将读取角色授予用户。 userAdminAnyDatabase授予管理用户的权限。