web-dev-qa-db-ja.com

Mongodbシャーディング-構成サーバーとMongo認証

かなり早くデータベースをシャーディングする必要があり、mongosサーバーとconfigサーバーで認証を有効にするためのベストプラクティスが何であるかがわかりません。

すべてをパスワードで保護してもらいたいのですが。

  1. 各構成サーバーでauthを有効にする必要がありますか?
  2. もしそうなら、それぞれに同じユーザーを設定しますか?管理データベースだけですか?または、構成データベース用に作成する必要がありますか?
  3. モンゴスにいる間はユーザーを作成する必要がないと思います。これは、configとシャード自体から継承する必要があるためです。
  4. 新しいシャードを追加する場合、新しいシャード上のシャードデータベースごとに同じユーザーを設定する必要がありますか?

ありがとう!

6
nakkor

私はこれらを一度に1つずつ取ります:

各構成サーバーで認証を有効にする必要がありますか?

はい、基本的に、実行するmongodのすべてのインスタンスで認証を有効にする必要があります(キーファイル、 認証を意味します )。

もしそうなら、それぞれに同じユーザーを設定しますか?管理者データベースのためだけですか?または、構成データベース用に作成する必要がありますか?

シャード環境の管理データベースは、実際には構成サーバー上に存在します。したがって、3つすべてにadminデータベースのコピーが作成されます(これらは互いに同一になります)。常にmongosを介して構成データベースに接続する必要があり、そこで他のデータベースを作成することはないため、特定のユーザーを追加する必要はありません。

モンゴスにいる間はユーザーを作成する必要がないと思います。これは、configとシャード自体から継承する必要があるためです。これは正しいですか?

最初に追加するシャードは、既存のデータベースがある場合、それらのデータベースのプライマリシャードになります(永久に)。その後、複数のシャードにまたがってコレクションをシャーディングした場合でも、そのプライマリシャードにはそれらのデータベースの認証レコードが含まれます。シャードの後に​​作成される後続のデータベースは別のシャードに存在する可能性があり、それらの資格情報はそこに格納されます。基本的な経験則は次のとおりです。mongosを使用して、シャード環境でユーザーを管理します。

注:上記はMongoDB 2.4以下で当てはまります。 2.6で計画された変更により、すべての資格情報がシャード環境の構成データベースに集中化され、複雑さが緩和されます。ただし、経験則は引き続き適用されます。mongosを使用してください

新しいシャードを追加する場合、新しいシャード上のシャードデータベースごとに同じユーザーを設定する必要がありますか?

前の質問への答えが示すように、これは必要ありません常にmongosを介して接続する限り(推奨-それは知っています各データベースのプライマリシャードは何であり、認証リクエストを適切にルーティングします)。すべてのシャードにユーザーを配置する必要があるEdgeのケースがいくつかあります。その場合、各シャードにユーザーを追加(および維持)する必要がありますが、一般的な使用では必須ではありません。

3
Adam C

ここ を見て答えを見つけてください。 keyFileとネットワークレベルのアクセス制御(通常はサーバーを保護するためのファイアウォール)を使用することをお勧めします。

Kerberos認証は、最近のバージョンのmongodbでもサポートされています。あなたは情報を見つけることができます ここ

1
yaoxing