我目前正在开发一个项目,我使用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数据库创建了一个“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中输入我的应用程序
无法连接到:localhost:27017:使用用户名'louisv'在数据库'admin'上进行身份验证失败:auth失败
这是奇怪的,因为我的default_database是“louisv”而不是'admin'。
如果我将凭据更改为admin的凭据,我还有另一个错误:
localhost:27017:未授权在louisv.User上查询
这似乎很好,因为它似乎搜索用户,但我无法进行查询。
答案 0 :(得分:7)
而不是:
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
第一个选项是首选,因为它允许在连接断开时自动重新验证。
另见:
答案 1 :(得分:0)
除了@ derick的回答,我的配置仍在尝试连接到“默认”数据库 - 添加default_database
条目解决了这个问题。
connections:
default:
server: "mongodb://myuser:password@mydbserver:27017/mydb"
default_database: mydb
如果存储在源代码管理中,请记住将用户名和密码保存在与参数文件分开的“参数”文件中:)