3

场景:在机器上 安装了 MongoDB 2.2.3(Windows 64 位)

按照所有步骤在 MongoDB 服务器上强制执行身份验证。

  1. 将用户添加到管理数据库

    use admin
    db.addUser('me_admin', '12345');
    db.auth('me_admin','12345');
    
  2. --auth使用启用身份验证的选项运行数据库服务器(mongod.exe 进程)

遵循类似问题的所有答案: 如何使用用户名和密码保护 MongoDB

问题:对于新版本 2.2.3,我无法设置身份验证。遵循相同的步骤后,我能够在同一台机器上设置2.0.8 版本的身份验证。但它在 MongoDB 文档中的某处提到本地主机上的身份验证在2.2 版之前和之后略有不同”

问题:有什么变化以及如何在新版本(即 2.2 及更高版本)中强制执行身份验证。任何人都可以给出一些想法或解决方案来使用新的MongoDB 2.2.3进行相同的操作吗?


更新:当我使用命令提示符mongod.exe的参数启动进程 时,我已经检查了身份验证在 2.2.3 上是否相同。--auth

我在配置文件中使用了docsauth=true中提到的参数,但这不起作用。

做过的研究:

  1. mongod.cfg文件包含以下配置时

    logpath=c:\mongodb\log\mongo.log, auth=true, profile=2

    log.txt文件包含以下日志

    Mon Mar 11 15:06:35 Trying to start Windows service 'MongoDB'
    Mon Mar 11 15:06:35 Service running
    Mon Mar 11 15:06:35 [initandlisten] MongoDB starting : pid=7152 port=27017 dbpath=\data\db\ 64-bit host=AMOL-KULKARNI
    Mon Mar 11 15:06:35 [initandlisten] db version v2.2.3, pdfile version 4.5
    Mon Mar 11 15:06:35 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08
    Mon Mar 11 15:06:35 [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
    Mon Mar 11 15:06:35 [initandlisten] options: { config: "C:\mongodb\mongod.cfg", logpath: "c:\mongodb\log\mongo.log auth=true profile=2", service: true }
    Mon Mar 11 15:06:35 [initandlisten] journal dir=/data/db/journal
    Mon Mar 11 15:06:35 [initandlisten] recover : no journal files present, no recovery needed
    Mon Mar 11 15:06:35 [initandlisten] waiting for connections on port 27017
    Mon Mar 11 15:06:35 [websvr] admin web console waiting for connections on port 28017
    
  2. 当我从命令提示符运行时mongod --auth,将显示以下日志:

        Mon Mar 11 15:09:40 [initandlisten] MongoDB starting : pid=6536 port=27017 dbpath=\data\db\ 64-bit host=AMOL-KULKARNI
        Mon Mar 11 15:09:40 [initandlisten] db version v2.2.3, pdfile version 4.5
        Mon Mar 11 15:09:40 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08
        Mon Mar 11 15:09:40 [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
        Mon Mar 11 15:09:40 [initandlisten] options: { auth: true }
        Mon Mar 11 15:09:40 [initandlisten] journal dir=/data/db/journal
        Mon Mar 11 15:09:40 [initandlisten] recover : no journal files present, no recovery needed
        Mon Mar 11 15:09:40 [initandlisten] waiting for connections on port 27017
        Mon Mar 11 15:09:40 [websvr] admin web console waiting for connections on port 28017
    

注:本次变更options:

  1. options:{ config: "C:\mongodb\mongod.cfg", logpath: "c:\mongodb\log\mongo.log auth=true profile=2", service: true }//不起作用

  2. options: { auth: true }//作品

有趣的是,

当它从配置文件运行时。

logpath=c:\mongodb\log\mongo.log, auth=true, profile=2

它改为:

logpath: "c:\mongodb\log\mongo.log auth=true profile=2", service: true

我知道这是问题所在。它应该是这样的:

logpath: "c:\mongodb\log\mongo.log", auth=true, profile="2", service: true

所以,问题是如何auth=true从配置文件传递参数并mongod.exe在 Windows7 上将进程作为服务运行

4

2 回答 2

1

如您引用的部分所述,更改仅很小:

一般来说,如果 admin 数据库没有用户,您可以通过 localhost 接口进行连接。对于运行 2.2 版的分片集群,如果 mongod 使用 auth 运行,那么所有通过 localhost 接口连接的用户都必须进行身份验证,即使 admin 数据库中没有任何用户。

基本上在 2.2 之前,如果您在分片集群中,您可以连接到 localhost,并且如果在 admin 数据库中找不到用户,则不会被迫进行身份验证。这意味着如果你设置一个分片集群,设置一个默认用户可能是明智的,你已经完成了。

任何人都可以提供一些想法或解决方案来使用新的 MongoDB 2.2.3 进行相同的操作吗?

新的身份验证系统就在那里,你不需要做任何事情;会的。

于 2013-03-11T08:26:31.750 回答
0

找到了解决方案。

要将 MongoDB 进程 ( mongod.exe) 作为服务运行auth=true,在注册 MongoDB 服务本身时必须注意以下事项(文档中未提及)

必须使用以下命令注册服务:

C:\mongodb\bin\mongod.exe --config C:\mongodb\mongod.cfg --auth --install

mongod.cfg文件将只有logpath=c:\mongodb\log\mongo.log

与大家共享,这样就不会再将精力和时间放在同一个问题上。

祝大家探索愉快.. :-)

请注意,此时间日志包含:

Mon Mar 11 15:58:06 Trying to start Windows service 'MongoDB'
Mon Mar 11 15:58:06 Service running
Mon Mar 11 15:58:06 [initandlisten] MongoDB starting : pid=6800 port=27017 dbpath=\data\db\ 64-bit host=AMOL-KULKARNI
Mon Mar 11 15:58:06 [initandlisten] db version v2.2.3, pdfile version 4.5
Mon Mar 11 15:58:06 [initandlisten] git version: f570771a5d8a3846eb7586eaffcf4c2f4a96bf08
Mon Mar 11 15:58:06 [initandlisten] build info: windows sys.getwindowsversion(major=6, minor=1, build=7601, platform=2, service_pack='Service Pack 1') BOOST_LIB_VERSION=1_49
Mon Mar 11 15:58:06 [initandlisten] options: { auth: true, config: "C:\mongodb\mongod.cfg", logpath: "c:\mongodb\log\mongo.log", service: true }
Mon Mar 11 15:58:06 [initandlisten] journal dir=/data/db/journal
Mon Mar 11 15:58:06 [initandlisten] recover : no journal files present, no recovery needed
Mon Mar 11 15:58:06 [initandlisten] waiting for connections on port 27017
Mon Mar 11 15:58:06 [websvr] admin web console waiting for connections on port 28017
于 2013-03-11T10:28:06.150 回答