2013-05-15 25 views
1

我正在运行MongoDB 2.2。我可以添加凭据来访问我的单个实例的MongoDB这样的:Spring Data mongodb:如何在运行副本集时添加凭据

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
    <property name="writeResultChecking" value="EXCEPTION"/> 
    <property name="writeConcern" value="FSYNC_SAFE"/> 
    <constructor-arg ref="myRs"/> 
    <constructor-arg name="databaseName" value="mydb"/> 
    <constructor-arg name="userCredentials" ref="userCredentials"/> 
</bean> 

<bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials"> 
    <constructor-arg name="username" value="username" /> 
    <constructor-arg name="password" value="password" /> 
</bean> 

但该文档说,只有密钥文件验证可用于副本集: http://docs.mongodb.org/v2.2/administration/replica-sets/#replica-set-security

如何使用数据库凭据preferrably(甚至一个密钥文件),所以我可以在使用Spring Data MongoDB时对MongoDB副本集进行身份验证?

谢谢。

回答

0

--keyfile选项可在复制套件成员之间启用基于密钥的身份验证。它不会影响您的应用程序和replicaset之间的通信。

您需要将用户添加到数据库。确保您已连接到Primary。

$ mongo 
PRIMARY> use the_database_i_want_to_be_authenticated 
switched to db the_database_i_want_to_be_authenticated 
PRIMARY> db.addUser("myusername","mypassword") 
{ 
    "user" : "myusername", 
    "readOnly" : false, 
    "pwd" : "a6de521abefc2fed4f5876855a3484f5", 
    "_id" : ObjectId("5194932444ef978a730c22d4") 
} 

创建数据库用户后,你就可以将它与下面

<bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials"> 
    <constructor-arg name="username" value="username" /> 
    <constructor-arg name="password" value="password" /> 
</bean> 
+0

谢谢连接。我确实将“auth = true”行添加到主服务器上的/etc/mongodb.conf中,然后重新启动它。然后我以你展示的方式通过shell添加用户。所以我期望我会在下次用户使用mongo shell连接到主服务器时面临凭证质量问题,但我没有。我错过了什么吗? – pastafarian

+0

除非您切换到经过身份验证的数据库,否则您不会被要求输入凭据。即使您切换了,也不会提示您输入用户名/密码。但是,如果您尝试运行show collection等任何命令,则会显示身份验证错误。您需要编写db.auth('your_username','your_password') – harunyardimci

+0

您可以通过提供用户名和密码来连接到mongo shell。$ mongo your_db_name -u username -p – harunyardimci