シェア

はじめに

MongoDB サーバーが利用可能になったら、最初に行う必要がある最も一般的なアクションの 1 つは、実際のデータベースに接続することです。これには、クライアントが接続および認証できるようにデータベースが構成されていることを確認するための調整が必要です。

これは、サーバーの場所、接続パラメータ、および正しい認証情報を提供することにより、MongoDB データベースに接続する方法を理解する必要があることを意味します。このガイドでは、主にデータベースとのインタラクティブセッション用に設計された mongo MongoDB シェルクライアントを使用して、クライアント側からデータベースに接続する方法に焦点を当てます。

コンパニオンガイドでは、要件に合わせて MongoDB の認証設定を構成する方法を確認できます。両方の記事を読むことで、両当事者の視点から認証がどのように実装されているかの全体像を把握することを検討してください。

mongo クライアントに関する基本情報

mongo クライアントは、MongoDB データベースサーバーに接続、制御、および対話するためのコマンドライン JavaScript クライアントです。多くの点で、MongoDB インストールに含まれており、すべての一般的なプラットフォームで利用できるため、MongoDB データベースに接続して使用を開始する最も簡単な方法です。mongo クライアントは、初期構成を実行したり、データ​​を探索したり、予備結果に基づいてクエリを反復処理したりするインタラクティブセッションに特に役立ちます。

mongo シェルで接続する方法は、MongoDB サーバーの構成と、アカウントを認証するために利用できるオプションによって異なります。次のセクションでは、基本的な接続オプションのいくつかについて説明します。わかりやすくするために、ローカル接続とリモート接続を区別します。

  • ローカル接続: クライアントと MongoDB インスタンスが同じサーバー上にある接続
  • リモート接続: クライアントが別のコンピュータで実行されているネットワークアクセス可能な MongoDB インスタンスに接続している接続

まず、同じコンピュータからデータベースに接続することから始めましょう。

mongo を使用してローカルデータベースに接続する

引数なしで、mongo コマンドはローカル MongoDB インスタンスへの接続を試みます。

これを行うために、ローカルループバックアドレスのポート 27017 (127.0.0.1:27017) への接続を試みます。これは、MongoDB サーバーがデフォルト構成でバインドするインターフェイスの 1 つです (MongoDB はローカルソケットファイルを介してアクセスすることもできます)。

デフォルト構成で実行されているローカル MongoDB サーバーに接続するには、次のように入力します。

mongo

接続に成功すると、一連の長いメッセージの後に MongoDB シェルプロンプトが表示される可能性があります。

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 サーバーからの警告の 1 つは、アクセス制御が現在有効になっていないことを示しています。これが、認証情報やその他の認証の詳細を提供せずに接続できた理由です。

アクセス制御で構成されているローカル MongoDB サーバーに接続する場合は、接続するための追加情報を提供する必要があります。関連する --username および --password オプションを使用して接続するには、少なくともユーザー名とパスワードを提供する必要があります。

mongo --username <mongo_username> --password

--password オプションを最後に配置し、パスワードをインラインで指定しないことは、MongoDB にパスワードの入力を求めることを意味します。これは、コマンド自体にパスワードを提供するよりも安全です。パスワードは、シェル履歴、プロセスリスト、およびその他のメカニズムを通じて表示または回復できる可能性があるためです。

MongoDB サーバーは、データベースに接続する前にユーザーのパスワードの入力を求めます。

MongoDB shell version v.4.4.6
Enter password:

認証に成功すると、データベースに接続され、通常どおりセッションを続行できるはずです。

--username および --password オプションを使用する代わりに、接続文字列を渡すことによってこの情報を提供することもできます。

mongo "mongodb://<mongo_username>:@127.0.0.1"

<username>: 構文でユーザーにパスワードがあることを示しましたが、パスワードを提供していないため、mongo シェルはパスワードの入力を求めます。

または、db.auth コマンドを使用して、通常の mongo コマンドで接続した後で認証することもできます。

まず、認証情報を提供せずに 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 シェルを使用するときにいくつかの追加の詳細を提供する必要があります。

具体的には、MongoDB サーバーがデフォルト以外のポートでリッスンしている場合は、--host オプションと場合によっては --port オプションも含める必要があります。ほぼすべての場合で、リモートサーバーを認証するために --user オプションと --password オプションも提供する必要があります。

したがって、リモート MongoDB データベースに接続する場合のコマンドの基本構造は次のようになります。

mongo --host <mongo_server_address> --port <mongo_server_port> --user <mongo_username> --password

ローカルデータベースへの接続に関するセクションで述べたように、--password オプションを最後に配置し、パスワードをインラインで指定しないことは、mongo シェルにパスワードの入力を求めることを意味します。これは、コマンド自体にパスワードを提供するよりも安全です。パスワードは、シェル履歴、プロセスリスト、およびその他のメカニズムを通じて表示または回復できる可能性があるためです。

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 シェルはパスワードの入力を求めます。

MongoDB サーバーの認証構成の調整

ユーザーが MongoDB インスタンスを認証する方法を規定するルールを変更する場合は、サーバーの構成を変更することで変更できます。MongoDB の認証構成を変更する方法については、この記事をご覧ください。

結論

このガイドでは、クライアント側からの MongoDB 認証について説明しました。mongo シェルを使用して、さまざまな方法でローカルおよびリモートデータベースインスタンスの両方に接続する方法を示しました。

さまざまな MongoDB インスタンスに接続する方法を知ることは、データベースシステムを使い始める上で不可欠です。特別な認証を必要としない開発用のローカル MongoDB インスタンスを実行する場合がありますが、ステージング環境と本番環境のデータベースはほぼ確実に認証が必要になります。どちらの場合でも認証できることで、さまざまな環境でうまく作業できるようになります。

FAQ

MongoDB にローカルまたはリモートで接続する場合でも、接続に失敗すると MongoDB からエラーメッセージが表示されます。接続エラーの最も一般的な原因は、ユーザー名またはパスワードが正しくない、ホワイトリストに登録されていない IP アドレスで接続しようとしている、またはデータベースへの接続数が多すぎる可能性があります。

必要なすべての要素が揃っていることを確認するために、MongoDB データベースへの接続の詳細を読むことができます。

リモート MongoDB データベースに接続するには、mongo シェルを使用するときに、--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 クライアントは、MongoDB データベースサーバーに接続、制御、および対話するためのコマンドライン JavaScript クライアントです。

mongo シェルに接続して使用する方法は構成によって異なりますが、一般に、シェルに mongo と入力してコマンドラインの使用を開始できます。

MongoDB には、必要に応じてコマンドラインから --help アドオンもあります。

はい、Java で MongoDB に接続できます。手順の最初のステップでは、Java ドライバーをインストールする必要があります。

著者について
Justin Ellingwood

Justin Ellingwood

Justin は、2013 年からデータベース、Linux、インフラストラクチャ、および開発者ツールについて執筆しています。彼は現在、妻と 2 羽のウサギと一緒にベルリンに住んでいます。彼は通常、三人称で書く必要はありません。これは、関係者全員にとって安心です。