我正在尝试弄清楚 MongoDB,以便评估它是否是我想为 future 的应用程序采用的路线。为了在我的服务器上明智地部署它,我必须在启用身份验证的情况下运行它(即使用 --auth
参数或配置文件中的 auth = true
).
安装似乎相对简单,必要时我一直在文档的帮助下进行。特别是 section on security很好地解释了在启用身份验证的情况下运行并插入您的第一个管理员用户的过程。然而,事情并没有按计划进行。
在没有 auth 的情况下运行会产生人们希望的结果 - 它运行,输出如下:
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 证明用户实际上仍然存在。我在做傻事吗?
最佳答案
在使用 --auth 启动服务器之前,您需要在管理数据库中已经有一个用户。我刚刚在文档中添加了一条注释来提及这一点,所以没有人会感到惊讶。
顺便说一句,大多数(如果不是全部)生产 mongodb 部署在没有授权的情况下运行。我们建议在您的应用程序中处理身份验证并将数据库服务器上的防火墙配置为仅允许来自您的 Web/应用程序服务器的连接。
关于macos - 使用身份验证运行 MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1884091/