2013-05-15 34 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