具有身份验证的MongoDB

时间:2012-12-27 12:59:32

标签: mongodb

我正在尝试使用身份验证在我的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”,因此无法访问任何数据。这实际上是我的预期。

2 个答案:

答案 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