1

我正在尝试通过身份验证让 MongoDB 在我的本地主机(Windows)上运行。

为此,我首先必须添加一个用户,对吗?我通过使用以下命令启动守护程序来做到这一点:

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”。这实际上是我所期望的。

4

2 回答 2

2

正如 Andrei Sfat 在对这个问题的评论中告诉我的那样,我犯了两个重大错误。

首先,我认为我可以将 IP 作为一个简单的参数传递给客户端。但是您必须为此使用 --host 。相反,我认为是 IP 地址的参数实际上应该是数据库名称。所以连接服务器的正确命令如下:

C:\[…]\mongo.exe --port 20571 -u test -p test --host 127.0.0.1 admin

其次,用户是每个数据库的。因为我只将用户“test”添加到数据库“admin”,所以它只在那里工作。

于 2012-12-27T20:09:15.630 回答
0

显然auth = true配置没有成功加载。重新启动 mongod.exe 时是否忘记了 -f 参数?

C:\[…]\mongod.exe -f C:\[…]\mongo.config
于 2012-12-27T18:00:47.463 回答