3

我目前正在开发一个使用 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' 进行身份验证失败:身份验证失败

这很奇怪,因为我的 default_database 是“louisv”而不是“admin”。

如果我将凭据更改为管理员的凭据,则会出现另一个错误:

localhost:27017: 未授权查询 louisv.User

这似乎很好,因为它似乎可以搜索用户,但我无法进行查询。

4

2 回答 2

10

代替:

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

第一个选项是首选,因为它允许在连接断开的情况下自动重新验证。

也可以看看:

于 2013-08-07T08:56:48.233 回答
0

除了@derick 的回答,我的配置仍在尝试连接到“默认”数据库——添加default_database条目解决了这个问题。

connections:
    default:
        server: "mongodb://myuser:password@mydbserver:27017/mydb"
default_database: mydb

如果存储在源代码管理中,请记住将用户名和密码保存在与配置文件分开的“参数”文件中:)

于 2016-02-24T11:16:24.727 回答