MongoDB 身份验证数据库用途

Geo*_*off 6 authentication mongodb

我的问题是关于 mongo shell --authenticationDatabase 选项。

我对此感到困惑,因为我认为我创建用户的数据库是管理数据库,因为这是在阅读本文档后实际定义用户的地方: https: //docs.mongodb.com/manual/core /安全用户/#用户管理界面

我明白我错了;身份验证数据库是用户拥有角色的数据库。我的问题是选项“--authenticationDatabase”的目的是什么?请参阅下面我的场景。

下面的命令将连接到 myapp 数据库并针对 myapp 数据库进行身份验证

mongo -u "bob" -p "bobspassword" --authenticationDatabase "myapp" myapp
Run Code Online (Sandbox Code Playgroud)

默认情况下,以下命令将连接到 myapp 数据库并针对 myapp 数据库进行身份验证。这似乎使上面的命令变得过时。

mongo -u "bob" -p "bobspassword" --authenticationDatabase "myapp" myapp
Run Code Online (Sandbox Code Playgroud)

下面的命令将针对 myapp 数据库进行身份验证,但不会连接到它。为什么?仅仅是为了测试凭据吗?

mongo -u "bob" -p "bobspassword" --authenticationDatabase "myapp"
Run Code Online (Sandbox Code Playgroud)

该命令会告诉我“错误:身份验证失败。” 所以我仍然想知道为什么我需要前面的命令来找出我的凭据无效。

mongo -u "bob" -p "bobspassword" myapp
Run Code Online (Sandbox Code Playgroud)

最后,是否存在一种情况,我需要对一个数据库进行身份验证并连接到另一个数据库,如下面的命令?我只能连接到已定义角色的数据库,那么为什么我不针对我尝试连接的数据库进行身份验证呢?

mongo -u "bob" -p "bobspassword" --authenticationDatabase "myapp" myotherapp
Run Code Online (Sandbox Code Playgroud)

感谢您的见解!

ser*_*iuz 0

在 mongo 中,您连接到服务器而不是真正的数据库。之后您可以更改数据库。

你的代码:

mongo -u "bob" -p "bobspassword" --authenticationDatabase "myapp"
Run Code Online (Sandbox Code Playgroud)

test将连接到 mongod 服务器,如果其他未定义,它将使用“ ”数据库

下一个应该可以工作,因为 mongo 从连接字符串中获取身份验证数据库。此外,它可能在配置文件中设置不同。

mongo -u "bob" -p "bobspassword" myapp
Run Code Online (Sandbox Code Playgroud)

最后:

最后,是否存在一种情况,我需要对一个数据库进行身份验证并连接到另一个数据库。

不