MongoDBデータベースサーバーを起動して実行した後の最初のタスクの1つは、ユーザーとデータベースを構成することです。この投稿では、MongoDBでユーザーを作成および構成する一般的なシナリオのいくつかについて説明します。 MongoDBのユーザー管理は、以前の2つのリリースに比べて大幅に改善されており、機能的で機能的なユーザー管理モデルになっています。ユーザーにはさまざまな役割を割り当てることができ、役割は必要な特権で構成できます。使用する組み込みのユーザーロールがいくつかあります。または、独自のカスタムロールを作成することもできます。
この投稿の例では、2.6.4クライアントと2.6.4サーバーを使用しています。ユーザー管理モデルが2.4から2.6に大幅に変更されました。したがって、2.4クライアントを使用している場合、この投稿の多くの例はうまくいきません。次の構文を使用して、yoMongoDBodbクライアントのバージョンを確認できます。
mongo --version
データベースへのユーザーの追加
ユーザーを作成した後の最初のステップは、アプリケーションデータベースを作成することです:
use applicationdb;
このデータベースを作成した後、アプリケーションがこのデータベースに書き込むために使用するユーザーを作成します。このユーザーには、データベースに対する読み取りおよび書き込み権限が必要です。
db.createUser({'user':'appuser', 'pwd':'', roles:['readWrite']});
データベースへの読み取り専用アクセス権を持つユーザーを追加したい場合もあります。たとえば、データベースへの読み取り専用アクセスのみを持つ分析ユーザーを追加したい場合があります。
db.createUser({'user':'analyticsuser', 'pwd':'', roles:['read']});
ユーザーが作成されたので、MongoDBコンソールからこのユーザーとして接続してみましょう:
mongo -u 'appuser' -p <servername>/applicationdb MongoDB shell version: 2.6.4 connecting to: <servername>/applicationdb >
正常に接続されているはずです。構文の最後にある「/applicationdb」は、MongoDBに「applicationdb」データベースの「appuser」を認証するように指示していることに注意してください。
複数のデータベースへのユーザーの追加
多くのシナリオでは、サーバー上に複数のデータベースを作成する必要があります。たとえば、このシナリオでは、分析の結果を保存するために別のデータベース「analyticsdb」を作成する必要がある場合があります。 「analyticsuser」には、「applicationdb」への「readonly」アクセスと「analyticsdb」への「readWrite」権限が必要です。
では、これをどのように実現するのでしょうか。各データベースに「analyticsuser」を追加する必要がありますか?これは、多くのユーザーとデータベースが追加されるため、長期的には管理上の悪夢を生み出します。幸いなことに、簡単な解決策があります。ユーザーの役割の割り当てを一元化し、単一のデータベースに保存できます。このシナリオでは、これらの割り当てを「admin」データベースに保存することを好みます。これは、サーバーの中央管理のハブであるためですが、別のデータベースに保存することもできます。
use admin db.createUser({user:'analyticsuser', pwd:'<pass>', roles:[{'role':'read', 'db':'applicationdb'}, { 'role':'readWrite', 'db':'analyticsdb'}]});
追加したら、「ユーザーの表示」を使用してユーザーの詳細を表示できます。管理者データベースは次のようになります。
use admin > show users { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "roles" : [{ "role" : "root","db" : "admin"},{"role" : "restore","db" : "admin"}] } {"_id" : "admin.analyticsuser", "user" : "analyticsuser", "db" : "admin", "roles" : [{"role" : "read","db" : "applicationdb"},{"role" : "readWrite","db" : 'analyticsdb"}] } >>
ユーザーが追加されたので、コンソールから接続して、上記で使用した構文を使用して認証を確認してみましょう。
mongo -u 'analyticsuser' -p <pass> <servername>/applicationdb
ただし、認証は失敗します:
2014-10-06T23:11:42.616+0000 Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 } at src/mongo/shell/db.js:1210 exception: login failed
その理由は、「analyticsuser」が「applicationdb」ではなく「admin」データベースで定義されているためです。これを指定する方法は、「–authenticationDatabase」パラメータを使用することです。
mongo -u 'analyticsuser' -p <pass> <servername>/applicationdb --authenticationDatabase 'admin'
今回は、ログインは成功します:
MongoDB shell version: 2.6.4 connecting to: <servername>/applicationdb
MongoDBで利用可能な他のさまざまな組み込みの役割をよりよく理解するには、組み込みの役割に関するMongoDBのドキュメントを参照してください。いつものように、さらに質問がある場合は、[email protected]までご連絡ください。