分享到

简介

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

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

在配套指南中,您可以了解如何配置 MongoDB 的认证设置以满足您的要求。建议阅读这两部分,以便全面了解认证是如何从双方角度实现的。

关于 mongo 客户端的基本信息

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

您连接 mongo shell 的方式取决于 MongoDB 服务器的配置以及可用于认证到帐户的选项。在以下部分中,我们将介绍一些基本的连接选项。为了清晰起见,我们将区分本地连接和远程连接。

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

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

使用 mongo 连接到本地数据库

不带任何参数时,mongo 命令会尝试连接到本地 MongoDB 实例。

为此,它会尝试连接到本地回环地址 127.0.0.1:27017 上的 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)

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