分享到

介绍

一旦您拥有可用的 MongoDB 服务器,您需要采取的首批最常见的操作之一就是连接到实际的数据库。这需要协调,以确保数据库的配置方式允许您的客户端连接并进行身份验证。

这意味着您需要了解如何通过提供服务器位置、连接参数和正确的凭据来连接到您的 MongoDB 数据库。在本指南中,我们将重点介绍如何使用 mongo MongoDB shell 客户端 从客户端连接到数据库,该客户端主要设计用于与您的数据库进行交互式会话。

在配套指南中,您可以了解如何配置 MongoDB 的身份验证设置以匹配您的需求。考虑阅读这两部分,以全面了解从两者的角度如何实现身份验证。

关于 mongo 客户端的基本信息

mongo 客户端是一个命令行 JavaScript 客户端,用于连接、控制和与 MongoDB 数据库服务器交互。在很多方面,它是连接和开始使用 MongoDB 数据库的最简单方法,因为它包含在 MongoDB 安装中,并且可在所有主流平台上使用。 mongo 客户端对于执行初始配置以及在您想要探索数据或根据初步结果迭代查询的交互式会话特别有用。

您使用 mongo shell 连接的方式取决于 MongoDB 服务器的配置以及您可用于进行身份验证的选项。在接下来的部分中,我们将介绍一些基本的连接选项。为了清楚起见,我们将区分本地连接和远程连接

  • **本地连接**:客户端和 MongoDB 实例位于同一服务器上的连接
  • **远程连接**:客户端连接到运行在不同计算机上的网络可访问 MongoDB 实例

让我们从同一台计算机上的数据库连接开始。

使用 mongo 连接到本地数据库

在没有任何参数的情况下,mongo 命令尝试连接到本地 MongoDB 实例。

为此,它尝试连接到本地环回地址上的端口 27017:127.0.0.1:27017。这是 MongoDB 服务器在其默认配置中绑定到的接口之一(MongoDB 也可能通过本地套接字文件访问)。

您可以通过键入以下内容来连接到运行其默认配置的本地 MongoDB 服务器

mongo

在成功连接后,您可能会看到一组相当长的消息,然后是 MongoDB shell 提示符

MongoDB shell version v4.4.6
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("9cf2d126-d25f-4ed8-b159-ef3bba4fcc53") }
MongoDB server version: 4.4.6
---
The server generated these startup warnings when booting:
2021-06-04T12:26:53.374+00:00: Using the XFS filesystem is strongly recommended with the WiredTiger storage engine. See http://dochub.mongodb.org/core/prodnotes-filesystem
2021-06-04T12:26:54.562+00:00: Access control is not enabled for the database. Read and write access to data and configuration is unrestricted
---
---
Enable MongoDB's free cloud-based monitoring service, which will then receive and display
metrics about your deployment (disk utilization, CPU, operation statistics, etc).
The monitoring data will be available on a MongoDB website with a unique URL accessible to you
and anyone you share the URL with. MongoDB may use this information to make product
improvements and to suggest MongoDB products and deployment options to you.
To enable free monitoring, run the following command: db.enableFreeMonitoring()
To permanently disable this reminder, run the following command: db.disableFreeMonitoring()
---
>

输出显示了 mongo 命令在建立连接时生成的日志,以及 MongoDB 服务器在启动时生成的一些警告。最后,还有一条关于 MongoDB 监控服务的通知,您可以选择利用或禁用该服务。

MongoDB 服务器发出的警告之一表明当前未启用访问控制。这就是我们能够在没有提供凭据或其他身份验证详细信息的情况下连接的原因。

如果您连接到已使用访问控制配置的本地 MongoDB 服务器,则需要提供其他信息才能连接。您将至少需要提供用户名和密码才能使用关联的 --username--password 选项进行连接

mongo --username <mongo_username> --password

--password 选项放在最后,并且不提供内联密码,表示您希望 MongoDB 提示输入密码。这比在命令本身中提供密码更安全,因为密码可能通过 shell 历史记录、进程列表和其他机制可见或可恢复。

MongoDB 服务器会在连接到数据库之前提示您输入用户的密码

MongoDB shell version v.4.4.6
Enter password:

成功进行身份验证后,您应该已连接到数据库,并且可以像往常一样继续您的会话。

您还可以通过传递连接字符串而不是使用 --username--password 选项来提供这些信息

mongo "mongodb://<mongo_username>:@127.0.0.1"

由于我们已经表明用户使用 <username>: 语法具有密码,但没有提供密码,因此 mongo shell 将提示输入密码。

或者,您也可以在使用正常的 mongo 命令连接后,使用 db.auth 命令进行身份验证。

首先,在不提供凭据的情况下连接到 MongoDB 数据库

mongo

您将获得一个与往常一样的命令提示符,但是如果启用了访问控制,您将无法执行许多操作,直到您进行身份验证。例如,show dbs 命令可能为空,因为您无权查询可用数据库

show dbs

要进行身份验证,首先选择用户定义所在的数据库。大多数情况下,这将是 admin 数据库。

use admin

之后,使用 db.auth() 提供用户名并请求密码提示。

db.auth({user: "<mongo_username>", passwordPrompt()})

系统将提示您输入用户帐户的密码,与以前一样。

Enter password:

如果成功,服务器将输出 1

Enter password:
1

您现在将拥有您以其身份进行身份验证的用户的所有常规访问权限。

show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

您可以随时通过键入以下内容来查看与当前连接关联的已认证用户和角色列表。

db.runCommand("connectionStatus")
{
"authInfo" : {
"authenticatedUsers" : [
{
"user" : "root",
"db" : "admin"
}
],
"authenticatedUserRoles" : [
{
"role" : "userAdminAnyDatabase",
"db" : "admin"
},
{
"role" : "readWriteAnyDatabase",
"db" : "admin"
}
]
},
"ok" : 1
}

连接到远程数据库

如果您想连接到远程 MongoDB 数据库,则在使用 mongo shell 时需要提供一些额外的详细信息。

具体来说,您需要包含 --host 选项,并且如果 MongoDB 服务器正在监听非默认端口,则可能还需要包含 --port 选项。在几乎所有情况下,您还需要提供 --user--password 选项来对远程服务器进行身份验证。

因此,连接到远程 MongoDB 数据库时命令的基本结构类似于以下内容。

mongo --host <mongo_server_address> --port <mongo_server_port> --user <mongo_username> --password

如连接到本地数据库部分所述,将 --password 选项放在末尾,并且不提供密码内联,这表明您希望 mongo shell 提示输入密码。这比在命令本身中提供密码更安全,因为密码可能通过 shell 历史记录、进程列表和其他机制可见或可恢复。

MongoDB 服务器会在连接到数据库之前提示您输入用户的密码

MongoDB shell version v.4.4.6
Enter password:

成功进行身份验证后,您应该已连接到数据库,并且可以像往常一样继续您的会话。

您还可以通过传递连接字符串而不是使用 --host--port--username--password 选项来提供这些信息。

mongo "mongodb://<mongo_username>:@<mongo_server_address>:<mongo_server_port>"

由于我们已经表明用户使用 <username>: 语法具有密码,但没有提供密码,因此 mongo shell 将提示输入密码。

调整 MongoDB 服务器的身份验证配置

如果您想修改决定用户如何对 MongoDB 实例进行身份验证的规则,可以通过修改服务器的配置来实现。您可以了解 如何在本文中修改 MongoDB 的身份验证配置

结论

在本指南中,我们介绍了从客户端的角度进行 MongoDB 身份验证。我们演示了如何使用 mongo shell 通过各种方法连接到本地和远程数据库实例。

了解如何连接到各种 MongoDB 实例对于您开始使用数据库系统至关重要。您可能会运行一个本地 MongoDB 实例用于开发,它不需要任何特殊身份验证,但您在预发布和生产中的数据库几乎肯定需要身份验证。能够在两种情况下进行身份验证将使您能够在不同的环境中顺利工作。

常见问题解答

无论是连接到 本地 还是 远程 MongoDB,连接失败都会导致 MongoDB 返回错误消息。连接错误的最常见来源是用户名或密码错误、尝试使用非白名单 IP 地址连接,或者可能是数据库连接过多。

您可以阅读更多关于连接到 MongoDB 数据库 的内容,以确保您拥有所有必要的组件。

要连接到 远程 MongoDB 数据库,您必须在使用 mongo shell 时包含其他详细信息,例如 --host 以及可能还需要包含 --port

命令的基本结构将类似于以下内容。

mongo --host <mongo_server_address> --port <mongo_server_port> --user <mongo_username> --password

您的 MongoDB 数据库还需要配置为接受远程连接,无论是在 配置文件 中还是在 Atlas IP 白名单 中。

假设管理员用户已经使用 这些步骤 创建,您可以使用类似于以下语法的代码。

use admin
db.auth('admin','password');

mongo 客户端是一个命令行 JavaScript 客户端,用于连接、控制和与 MongoDB 数据库服务器交互。

您连接和使用 mongo shell 的方式将取决于您的配置,但通常您可以通过在 shell 中键入 mongo 来开始使用命令行。

如果需要,MongoDB 还具有来自命令行的 --help 附加组件。

是的,您可以使用 Java 连接到 MongoDB。该过程的第一步需要安装 Java 驱动程序

关于作者
Justin Ellingwood

Justin Ellingwood

Justin 自 2013 年以来一直在撰写有关数据库、Linux、基础设施和开发人员工具的文章。他目前与妻子和两只兔子住在柏林。他通常不需要以第三人称写作,这对所有相关方来说都是一种解脱。