我正在尝试创建一个管理员用户,可以对任何数据库进行身份验证。当我做这样的事情时:
db.createUser({
"user": "admin",
"pwd": "adminPassword",
"roles": [
"userAdminAnyDatabase",
"dbAdminAnyDatabase",
"readWriteAnyDatabase"
]
});
连接到admin
数据库时,它可以正常工作。但是,当我尝试这样的事情时,它不起作用:mongodb://admin:adminPassword@localhost:27017/someDatabaseHere
。我无法向someDatabaseHere
进行身份验证,除非我先对管理数据库进行身份验证,然后在someDatabaseHere
之后更改内容。
我真的想让URI如上所述工作,而不需要为每个数据库创建用户。
或者,我想在没有凭据的情况下在本地进行身份验证(只需mongodb://localhost:27017/someDatabaseHere
),但需要远程凭据。这也可以。
答案 0 :(得分:1)
除非我先对admin数据库进行身份验证,然后再在someDatabaseHere中更改内容。
目前(从MongoDB 3.4.10开始),这就是身份验证机制的工作原理。这是--authenticationDatabase
parameter的目的。如果用户在admin
数据库中定义,那么它应该可以访问服务器上的所有数据库,无论是否存在。
我想在没有凭据的情况下在本地进行身份验证
目前这是不可能的,因为MongoDB使用基于角色的身份验证方案而不是基于IP的身份验证。