我目前正在做一个项目,我使用MongoDB作为数据库,并且我在symfony config.yml的Mongo配置中没有任何安全性。
这就是我的config.yml自项目开始以来的样子。
doctrine_mongodb:
connections:
default:
server: mongodb://localhost:27017
options: {}
default_database: louisv
document_managers:
default:
auto_mapping: true
有了这些参数,这个项目就可以很好地工作了。
但我想给MongoDB数据库增加安全性。所以我试着按照mongodb上的文档来创建用户。我为管理数据库创建了一个“admin”用户,为louisv数据库创建了一个“louisv”用户(管理数据库是默认存在的数据库,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中输入我的应用程序时
未能连接到:localhost:27017:用户名为“louisv”的数据库“admin”的身份验证失败:身份验证失败
这很奇怪,因为我的默认数据库是“louisv”而不是“admin”。
如果我将凭据更改为管理员的凭据,则会出现另一个错误:
localhost:27017:未授权查询louisv.user
这看起来很好,因为它似乎搜索用户,但我不能做查询。
最佳答案
而不是:
server: mongodb://localhost:27017
下面的技巧可以做到:
server: mongodb://localhost:27017/louisv
显然,Doctrine ODM捆绑包现在也有一个“DB”选项,所以您现在有以下选项:
connections:
default:
server: mongodb://louisv:password@localhost:27017/louisv
或
connections:
default:
server: mongodb://localhost:27017
options:
username: louisv
password: password
db: louisv
首选第一个选项,因为它允许在连接断开时自动重新验证。
另见:
https://github.com/doctrine/DoctrineMongoDBBundle/issues/154