分享到

簡介

一旦您擁有可用的 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、基礎設施和開發者工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必以第三人稱寫作,這對所有相關方來說都是一種解脫。
© . This site is unofficial and not affiliated with Prisma Data, Inc.