我试图弄清楚 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 证明用户实际上仍然存在。我在做傻事吗?