使用DoctrineMongoDBBundle进行身份验证

时间:2013-08-07 08:30:02

标签: mongodb authentication symfony

我目前正在开发一个项目,我使用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上查询

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

2 个答案:

答案 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

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