创建可以对任何数据库进行身份验证的管理员用户(即使那些尚不存在的数据库)

时间:2017-11-27 08:58:57

标签: mongodb authentication

我正在尝试创建一个管理员用户,可以对任何数据库进行身份验证。当我做这样的事情时:

db.createUser({
    "user": "admin", 
    "pwd": "adminPassword", 
    "roles": [
        "userAdminAnyDatabase", 
        "dbAdminAnyDatabase", 
        "readWriteAnyDatabase"
    ]
});

连接到admin数据库时,它可以正常工作。但是,当我尝试这样的事情时,它不起作用:mongodb://admin:adminPassword@localhost:27017/someDatabaseHere。我无法向someDatabaseHere进行身份验证,除非我先对管理数据库进行身份验证,然后在someDatabaseHere之后更改内容。

我真的想让URI如上所述工作,而不需要为每个数据库创建用户。

或者,我想在没有凭据的情况下在本地进行身份验证(只需mongodb://localhost:27017/someDatabaseHere),但需要远程凭据。这也可以。

1 个答案:

答案 0 :(得分:1)

  

除非我先对admin数据库进行身份验证,然后再在someDatabaseHere中更改内容。

目前(从MongoDB 3.4.10开始),这就是身份验证机制的工作原理。这是--authenticationDatabase parameter的目的。如果用户在admin数据库中定义,那么它应该可以访问服务器上的所有数据库,无论是否存在。

  

我想在没有凭据的情况下在本地进行身份验证

目前这是不可能的,因为MongoDB使用基于角色的身份验证方案而不是基于IP的身份验证。