简介
一旦您有了可用的 MongoDB 服务器,您需要做的第一个也是最常见的操作之一就是连接到实际的数据库。这需要协调,以确保数据库的配置方式允许您的客户端连接和身份验证。
这意味着您需要了解如何通过提供服务器位置、连接参数和正确的凭据来连接到 MongoDB 数据库。在本指南中,我们将重点介绍如何从客户端使用 mongo MongoDB shell 客户端连接到数据库,该客户端主要用于与数据库进行交互会话。
在配套指南中,您可以找到如何配置 MongoDB 的身份验证设置以满足您的要求。建议阅读这两篇文章,以全面了解身份验证是如何从双方角度实现的。
如果您正在使用 MongoDB,请查看 Prisma 的 MongoDB 连接器!您可以使用 Prisma Client 自信地管理生产 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的 从头开始指南 或如何添加到现有项目。
关于 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.6connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodbImplicit 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-filesystem2021-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 displaymetrics 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 youand anyone you share the URL with. MongoDB may use this information to make productimprovements 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.6Enter 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.000GBconfig 0.000GBlocal 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.6Enter 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,请查看 Prisma 的 MongoDB 连接器!您可以使用 Prisma Client 自信地管理生产 MongoDB 数据库。
要开始使用 MongoDB 和 Prisma,请查看我们的 从头开始指南 或如何添加到现有项目。
常见问题解答
要连接到远程 MongoDB 数据库,在使用 mongo shell 时必须包含额外的详细信息,例如 --host 和可能存在的 --port。
命令的基本结构将如下所示
mongo --host <mongo_server_address> --port <mongo_server_port> --user <mongo_username> --password
您的 MongoDB 数据库还需要在配置文件或Atlas IP 白名单中配置为接受远程连接。
假设已使用这些步骤创建了管理员用户,您可以使用类似于以下语法的命令
use admindb.auth('admin','password');
mongo 客户端是一个命令行 JavaScript 客户端,用于连接、控制和与 MongoDB 数据库服务器进行交互。
您连接和使用 mongo shell 的方式将取决于您的配置,但您通常可以通过在 shell 中键入 mongo 来开始使用命令行。
如果需要,MongoDB 还提供命令行中的 --help 附加功能。
