我正在尝试使用身份验证在我的localhost(Windows)上运行MongoDB。
要这样做,我首先要添加一个用户,对吧? 我是通过使用以下命令启动守护程序来完成的:
C:\[…]\mongod.exe -f C:\[…]\mongo.config
mongo.config包含以下内容:
# Basic database configuration
dbpath = C:\[…]\db\
bind_ip = 127.0.0.1
port = 20571
# Security
noauth = true
# Administration & Monitoring
nohttpinterface = true
之后我通过这个命令连接:
C:\[…]\mongo.exe --port 20571 127.0.0.1
我添加了一个用户:
> use admin
switched to db admin
> db.addUser('test', 'test')
{ "n" : 0, "connectionId" : 1, "err" : null, "ok" : 1 }
{
"user" : "test",
"readOnly" : false,
"pwd" : "a6de521abefc2fed4f5876855a3484f5",
"_id" : ObjectId("50db155e157524b3d2195278")
}
要检查一切是否有效,我做了以下事情:
> db.system.users.find()
{ "_id" : ObjectId("50db155e157524b3d2195278"), "user" : "test", "readOnly" : false, "pwd" : "a6de521abefc2fed4f5876855a3484f5" }
这对我来说似乎没问题。
之后我在mongo.config文件中将“noauth = true”更改为“auth = true”并重新启动守护程序。
现在我希望能够连接用户和密码:
C:\[…]\mongo.exe --port 20571 -u test -p test 127.0.0.1
通过此消息拒绝访问我:
MongoDB shell version: 2.0.4
connecting to: 127.0.0.1:20571/127.0.0.1
Wed Dec 26 16:24:36 uncaught exception: error { "$err" : "bad or malformed command request?", "code" : 13530 }
exception: login failed
所以这是我的问题:为什么登录失败?
我仍然可以在不提供用户和密码的情况下进行连接,但由于“未经授权的db:admin lock type:-1 client:127.0.0.1”,因此无法访问任何数据。这实际上是我的预期。
答案 0 :(得分:1)
正如Andrei Sfat在关于这个问题的评论中告诉我的那样,我犯了两个重大错误。
首先,我认为我可以将IP作为一个简单的参数传递给客户端。但你必须使用--host。 相反,我认为参数IP地址实际上应该是数据库名称。 因此,连接到服务器的正确命令如下:
C:\[…]\mongo.exe --port 20571 -u test -p test --host 127.0.0.1 admin
其次,用户是每个数据库。因为我只将用户“test”添加到db“admin”,它只适用于那里。
答案 1 :(得分:0)
显然,auth = true
配置未成功加载。重启mongod.exe时忘记了-f参数吗?
C:\[…]\mongod.exe -f C:\[…]\mongo.config