2013-08-07 107 views
3

我目前正在使用MongoDB作爲數據庫的項目,並且我在symfony config.yml的mongo配置中沒有安全性。通過DoctrineMongoDBBundle使用身份驗證

這是我的config.yml自項目開始以來的樣子。

doctrine_mongodb: 
connections: 
    default: 
     server: mongodb://localhost:27017 
     options: {} 
default_database: louisv 
document_managers: 
    default: 
     auto_mapping: true 

有了這個參數,項目工作得很好。

但我想爲mongodb數據庫添加安全性。所以我試圖按照mongodb上的文檔來創建用戶。我爲admin數據庫創建了一個「admin」用戶,爲louisv數據庫創建了一個「louisv」用戶(admin數據庫是默認存在的數據庫,louisv是我的)。

現在我想讓Symfony使用這個新用戶。我從我的conf.yml文件改變了我對選項的參數,現在這就是我:

doctrine_mongodb: 
connections: 
    default: 
     server: mongodb://localhost:27017 
     options: 
      username: louisv 
      password: password 
default_database: louisv 
document_managers: 
    default: 
     auto_mapping: true 

現在,當我嘗試在Symfony的進入我的應用程序

Failed to connect to: localhost:27017: Authentication failed on database 'admin' with username 'louisv': auth fails

這是奇怪的原因我DEFAULT_DATABASE是「louisv」而不是‘管理員’

如果我改變憑據管理員的那些,我有另一個錯誤:

localhost:27017: not authorized for query on louisv.User

這似乎相當不錯,因爲它似乎搜索用戶,但我不能做查詢。

回答

7

相反的:

server: mongodb://localhost:27017 

下應該做的伎倆:

server: mongodb://localhost:27017/louisv 

顯然,這個學說ODM包也有一個「數據庫」選項,因此您現在有以下選項:

connections: 
    default: 
     server: mongodb://louisv:[email protected]:27017/louisv 

connections: 
    default: 
     server: mongodb://localhost:27017 
     options: 
      username: louisv 
      password: password 
      db: louisv 

第一個選項是首選,因爲它允許在連接斷開的情況下進行自動重新驗證。

參見:

+0

非常感謝現在的工作!我搜查了很多,但沒有找到這個簡單的答案! Thx再次! – Zaidar

+0

嗨,我試過你的解決方案,但它沒有連接到數據庫。更改數據庫憑證後是否需要重新啓動mongo?和以前一樣,沒有用戶名和密碼。 – Geetika

0

除了@德里克的回答,我的配置仍試圖連接到「默認」數據庫 - 添加default_database項解決了這個。

connections: 
    default: 
     server: "mongodb://myuser:[email protected]:27017/mydb" 
default_database: mydb 

記住要保持用戶名和密碼在「參數」文件從配置文件分開如果存儲在源代碼控制:)