使用身份验证运行MongoDB

时间:2009-12-10 21:18:10

标签: macos authentication osx-snow-leopard mongodb

我正在试图找出MongoDB,以便评估它是否是我希望未来应用程序采用的路径。为了在我的服务器上合理地部署它,我必须在启用身份验证的情况下运行它(即使用--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上,请随意将其移动到那里。我不确定哪种环境最适合它。


更新

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

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

后续运行没有auth并进入mongo shell证明用户实际上仍在那里。我做了些蠢事吗?

3 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

在开始使用--auth之前,您需要添加用户。在没有--auth的情况下启动并添加用户,然后使用--auth重新启动。

安全部分已更新,以描述此情况。

答案 2 :(得分:1)

啊,看起来你在主人身上发现了一个错误。我为它创建了一个案例:http://jira.mongodb.org/browse/SERVER-474

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