简介
一旦您拥有可用的 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 实例。
为此,它尝试连接到本地环回地址上的端口 27017:127.0.0.1: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
附加组件。