4

我试图弄清楚 MongoDB 以评估它是否是我想为未来的应用程序采用的路线。为了在我的服务器上合理地部署它,我必须在启用身份验证的情况下运行它(即使用--auth参数或auth = true在配置文件中)。

安装似乎相对简单,我一直在必要时从文档中获得帮助。特别是,安全部分很好地解释了在启用身份验证的情况下运行并插入您的第一个管理员用户的过程。然而,事情并没有按计划进行。

在没有身份验证的情况下运行会产生人们希望的结果 - 它会运行,并具有以下输出:

Thu Dec 10 21:14:24 Mongo DB : starting : pid = 9350 port = 27017 dbpath = /var/mongodb_data master = 0 slave = 0  64-bit 
Thu Dec 10 21:14:24 db version v1.3.0-, pdfile version 4.5
Thu Dec 10 21:14:24 git version: 32d56f6d81a98b569103149c9ffea9f25a1ece81
Thu Dec 10 21:14:24 sys info: Darwin erh2.10gen.cc 9.6.0 Darwin Kernel Version 9.6.0: Mon Nov 24 17:37:00 PST 2008; root:xnu-1228.9.59~1/RELEASE_I386 i386 BOOST_LIB_VERSION=1_37
Thu Dec 10 21:14:24 waiting for connections on port 27017

但是,使用身份验证运行(使用方法、arg 或 config 指令)会产生以下输出,并且进程会立即退出:

Thu Dec 10 21:15:37 Mongo DB : starting : pid = 9361 port = 27017 dbpath = /var/mongodb_data master = 0 slave = 0  64-bit 
Thu Dec 10 21:15:37 User Exception unauthorized
Thu Dec 10 21:15:37  local.system.namespaces  Caught Assertion in runQuery ns:local.system.namespaces userassert:unauthorized
Thu Dec 10 21:15:37   ntoskip:0 ntoreturn:0
Thu Dec 10 21:15:37   query:{ name: /^local.temp./ }
Thu Dec 10 21:15:37 query local.system.namespaces ntoreturn:0 exception  0ms
Thu Dec 10 21:15:37 Dropping old temporary collection: 
Thu Dec 10 21:15:37 User Exception no collection name
Thu Dec 10 21:15:37   exception in initAndListen std::exception: no collection name, terminating
Thu Dec 10 21:15:37  dbexit: 
Thu Dec 10 21:15:37   shutdown: going to flush oplog...
Thu Dec 10 21:15:37   shutdown: going to close sockets...
Thu Dec 10 21:15:37   shutdown: waiting for fs...
Thu Dec 10 21:15:37   shutdown: closing all files...
Thu Dec 10 21:15:37      closeAllFiles() finished
Thu Dec 10 21:15:37   shutdown: removing fs lock...
Thu Dec 10 21:15:37  dbexit: really exiting now
ERROR: Client::shutdown not called!

如标签中所述,这是在 OS X Snow Leopard 上运行的,它使用最新的 1.3.x 每晚 OS X 64 位二进制下载(我应该恢复到 1.2 稳定版吗?)

知道是什么原因造成的以及我能做些什么来解决它吗?它在我的本地机器上并不重要,但我需要它在安全模式下工作,以使其适用于任何生产用途。


PS:如果这应该在 ServerFault 而不是 SO 上,请随意将其移到那里。我不确定哪个环境最适合它。


更新:

我尝试过在没有身份验证的情况下运行,添加用户并按照 mdirolf 和 Mathias 的建议使用身份验证重新运行。但是,它仍然抛出同样的错误。通过以下方式添加用户:

Mark@Destiny mongodb$ sudo bin/mongo
MongoDB shell version: 1.3.0-
url: test
connecting to: test
type "help" for help
> use admin
switched to db admin
> db.addUser("Mark", "my-password-went-here")   
{ "user" : "Mark", "pwd" : "9934...be15da0" }
> db.system.users.find()
{ "_id" : ObjectId("4b216ed0be8a0b185767654e"), "user" : "Mark", "pwd" : "9934a190b...babe15da0" }
> exit
bye

随后在没有身份验证的情况下运行并进入 mongo shell 证明用户实际上仍然存在。我在做傻事吗?

4

3 回答 3

2

在使用 --auth 启动服务器之前,您需要在 admin DB 中有一个用户。我只是在文档中添加了一条注释来提及这一点,所以没有人会感到惊讶。

顺便说一句,大多数(如果不是全部)生产 mongodb 部署在没有身份验证的情况下运行。我们建议在您的应用程序中处理身份验证并将数据库服务器上的防火墙配置为仅允许来自您的 Web/应用程序服务器的连接。

于 2009-12-10T21:56:37.777 回答
1

您需要在使用 --auth 开始之前添加一个用户。不使用--auth 启动并添加用户,然后使用--auth 重新启动。

安全部分已更新以描述这一点。

于 2009-12-10T21:54:29.233 回答
1

啊,看来您在 master 中发现了一个错误。我为它创建了一个案例:http: //jira.mongodb.org/browse/SERVER-474

请尝试最近发布的 mongodb 1.2.0。Git master(1.3.x 分支)尚未准备好使用。

于 2009-12-10T22:38:15.867 回答