はじめに
MongoDB サーバーが利用可能になったら、最初に行う必要がある最も一般的なアクションの 1 つは、実際のデータベースに接続することです。これには、クライアントが接続および認証できるようにデータベースが構成されていることを確認するための調整が必要です。
これは、サーバーの場所、接続パラメータ、および正しい認証情報を提供することにより、MongoDB データベースに接続する方法を理解する必要があることを意味します。このガイドでは、主にデータベースとのインタラクティブセッション用に設計された mongo
MongoDB シェルクライアントを使用して、クライアント側からデータベースに接続する方法に焦点を当てます。
コンパニオンガイドでは、要件に合わせて MongoDB の認証設定を構成する方法を確認できます。両方の記事を読むことで、両当事者の視点から認証がどのように実装されているかの全体像を把握することを検討してください。
MongoDB を使用している場合は、Prisma の MongoDB コネクタをチェックしてみてください! Prisma Client を使用すると、本番環境の MongoDB データベースを安心して管理できます。
MongoDB と Prisma の使用を開始するには、ゼロから始めるガイドまたは既存のプロジェクトに追加する方法を確認してください。
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.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 サーバーからの警告の 1 つは、アクセス制御が現在有効になっていないことを示しています。これが、認証情報やその他の認証の詳細を提供せずに接続できた理由です。
アクセス制御で構成されているローカル MongoDB サーバーに接続する場合は、接続するための追加情報を提供する必要があります。関連する --username
および --password
オプションを使用して接続するには、少なくともユーザー名とパスワードを提供する必要があります。
mongo --username <mongo_username> --password
--password
オプションを最後に配置し、パスワードをインラインで指定しないことは、MongoDB にパスワードの入力を求めることを意味します。これは、コマンド自体にパスワードを提供するよりも安全です。パスワードは、シェル履歴、プロセスリスト、およびその他のメカニズムを通じて表示または回復できる可能性があるためです。
MongoDB サーバーは、データベースに接続する前にユーザーのパスワードの入力を求めます。
MongoDB shell version v.4.4.6Enter 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.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 と Prisma の使用を開始するには、ゼロから始めるガイドまたは既存のプロジェクトに追加する方法を確認してください。
リモートデータベースへの接続
リモート 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.6Enter password:
認証に成功すると、データベースに接続され、通常どおりセッションを続行できるはずです。
--host
、--port
、--username
、および --password
オプションを使用する代わりに、接続文字列を渡すことによってこの情報を提供することもできます。
mongo "mongodb://<mongo_username>:@<mongo_server_address>:<mongo_server_port>"
<username>:
構文でユーザーにパスワードがあることを示しましたが、パスワードを提供していないため、mongo
シェルはパスワードの入力を求めます。
MongoDB サーバーの認証構成の調整
ユーザーが MongoDB インスタンスを認証する方法を規定するルールを変更する場合は、サーバーの構成を変更することで変更できます。MongoDB の認証構成を変更する方法については、この記事をご覧ください。
結論
このガイドでは、クライアント側からの MongoDB 認証について説明しました。mongo
シェルを使用して、さまざまな方法でローカルおよびリモートデータベースインスタンスの両方に接続する方法を示しました。
さまざまな MongoDB インスタンスに接続する方法を知ることは、データベースシステムを使い始める上で不可欠です。特別な認証を必要としない開発用のローカル MongoDB インスタンスを実行する場合がありますが、ステージング環境と本番環境のデータベースはほぼ確実に認証が必要になります。どちらの場合でも認証できることで、さまざまな環境でうまく作業できるようになります。
MongoDB を使用している場合は、Prisma の MongoDB コネクタをチェックしてみてください! Prisma Client を使用すると、本番環境の MongoDB データベースを安心して管理できます。
MongoDB と Prisma の使用を開始するには、ゼロから始めるガイドまたは既存のプロジェクトに追加する方法を確認してください。
FAQ
リモート MongoDB データベースに接続するには、mongo
シェルを使用するときに、--host
や場合によっては --port
などの追加の詳細を含める必要があります。
コマンドの基本構造は次のようになります。
mongo --host <mongo_server_address> --port <mongo_server_port> --user <mongo_username> --password
MongoDB データベースも、構成ファイルまたは Atlas IP ホワイトリストのいずれかで、リモート接続を受け入れるように構成する必要があります。
これらの手順を使用して管理者ユーザーが既に作成されていると仮定すると、次の構文と同様のものを使用できます。
use admindb.auth('admin','password');
mongo
クライアントは、MongoDB データベースサーバーに接続、制御、および対話するためのコマンドライン JavaScript クライアントです。
mongo
シェルに接続して使用する方法は構成によって異なりますが、一般に、シェルに mongo
と入力してコマンドラインの使用を開始できます。
MongoDB には、必要に応じてコマンドラインから --help
アドオンもあります。
はい、Java で MongoDB に接続できます。手順の最初のステップでは、Java ドライバーをインストールする必要があります。