我的问题是关于mongo shell --authenticationDatabase选项。
我对此感到困惑,因为我认为我创建用户的数据库是管理员数据库,因为这是在阅读此文档后实际定义用户的地方:https://docs.mongodb.com/manual/core/security-users/#user-management-interface
我明白我错了;身份验证数据库是用户具有角色的数据库。那么我的问题是选项" - authenicationDatabase?"的目的是什么?请参阅下面的我的方案。
以下命令将连接到myapp数据库,并对myapp数据库进行身份验证
mongo -u "bob" -p "bobspassword" --authenticationDatabase "myapp" myapp
以下命令将连接到myapp数据库,默认情况下还会对myapp数据库进行身份验证。这似乎使上面的命令过时了。
mongo -u "bob" -p "bobspassword" --authenticationDatabase "myapp" myapp
以下命令将针对myapp数据库进行身份验证,但不会连接到它。为什么?它只是测试凭证吗?
mongo -u "bob" -p "bobspassword" --authenticationDatabase "myapp"
此命令会告诉我"错误:身份验证失败。"所以我仍然想知道为什么我需要上一个命令才能找到我的凭据无效。
mongo -u "bob" -p "bobspassword" myapp
最后,是否存在我需要针对一个数据库进行身份验证并连接到另一个数据库的情况,如下面的命令?我只能连接到我已定义角色的数据库,那么为什么我不会对我尝试连接的数据库进行身份验证呢?
mongo -u "bob" -p "bobspassword" --authenticationDatabase "myapp" myotherapp
感谢您的见解!
答案 0 :(得分:0)
添加用户时,可以在特定数据库中创建该用户。该数据库是用户的authentication database。
在大多数情况下,您希望在admin
数据库中创建用户。这是一个特权数据库。但是,允许您在其他数据库中创建用户。如果两个用户具有相同的名称,但在不同的数据库中创建,则它们是两个单独的用户。恕我直言,这种authentication database
机制提供了一种名称空间,以便允许使用具有相同名称的用户(考虑大型组织中的用户管理)。
但这只是Mongo组织用户并将其存储在身份验证数据库中的方式。 authentication database
与该用户拥有哪些数据库特权(访问权)无关。
回到您的案例,您在“ myapp”数据库中创建了一个用户,并且还授予该用户对“ myapp”数据库的访问权限。这就是为什么您需要首先针对用作authentication database
的“ myapp”进行身份验证,然后连接到“ myapp”以访问数据。
答案 1 :(得分:-1)
在mongo中,您连接的服务器并非真正连接到数据库。您可以在以后更改数据库。
您的代码:
mongo -u "bob" -p "bobspassword" --authenticationDatabase "myapp"
将连接到mongod服务器,它将使用' test
'数据库,如果其他人未定义
下一个应该可以工作,因为mongo从连接字符串中获取auth db。它也可能在配置文件中设置不同。
mongo -u "bob" -p "bobspassword" myapp
最后:
最后,是否存在我需要对其进行身份验证的情况 数据库并连接到另一个..
没有