分享到

簡介

一旦您擁有可用的 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 也可能透過本機 socket 檔案存取)。

您可以輸入以下內容連線至以預設配置執行的本機 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、基礎架構和開發人員工具的文章。他目前與妻子和兩隻兔子住在柏林。他通常不必以第三人稱寫作,這對所有相關方來說都是一種解脫。