2016-07-27 18 views
0

localhostにmongodを、dbに "test"を、ユーザーに "john"というローカルテスト環境があります。 robomongoでは、ユーザー "john"がdb "test"で表示されます。私は ":// localhostを:MongoDBの27017" URIを経由して接続db.authenticate()にアクセスできない - "ユーザーが見つかりません"

  • :私のNode.jsのプログラムで

    (ないデータベースが指定されていない)

  • db.db( "テスト") - > OK
  • db.authenticate( "ジョン"、 "XXX") - > err.messageは、ローカルホスト上のmongod

を "認証に失敗しました" である: "UserNotFound:ジョン@テストユーザーを見つけることができませんでした"

"test"データベースでユーザーを作成し、 "test"に対して認証するにはどうすればよいですか?

ありがとうございます。

+0

https://docs.mongodb.com/manual/core/security-users/ – TW80000

+0

テストデータベースに「show users」が実行されていることの出力を提供してください。 – helmy

+0

ノードmongodbドライバまたはormをmongooseのように使用していますか? –

答えて

0

認証できるようにするには、管理データベースにログインする必要があります。

「テスト」データベースへのアクセス権を与え、アクセス権を持つ役割を作成してユーザー "john"に割り当てます。

あなたがユーザーを追加するために、あなたが権限を持つ管理者またはユーザーを持っていることを確認してください(ブルーバード約束とtypescriptですを使用して)http://mongodb.github.io/node-mongodb-native/2.1/api/からMongoのドライバを使用している場合doc

0

、より詳細な情報を確認してからすることができます

MongoClient.connect('mongodb://localhost:27017/test') 
    .then(
     (db) => { 
      return db.authenticate(
       <admin from above username>, 
       <admin from above password> 
      ) 
      .then(
       (success) => { 
        if(success) { 
         return Promise.resolve(db) 
        } else { 
         return Promise.reject('Yikes!'); 
        } 
       } 
      ) 
     } 
    ) 
    .then(
     (db) => { 
      const options = { 
       w: 1, 
       roles: ['readWrite'] 
      } 
      return db.addUser(
       <username>, 
       <password>, 
       options 
      ) 
     } 
    ); 

1)基本的に、ユーザーを追加する権限を持つユーザー(adminなど)としてユーザーを追加する必要があるデータベースに接続します。検索に成功すると、dbオブジェクトが作成されます。

2)割り当てたいロールを決定します。この場合、私は 'readWrite'をハードコードしています。

3)db.addUserは、ユーザー名とパスワード(およびロールであるオプション)を使用して呼び出します。 http://mongodb.github.io/node-mongodb-native/2.1/api/Db.html#addUser

+0

すべてのauswersありがとう! これは込み入ったものです。私がMongoDBの認証についてもっと読んで学ぶほど、私はもっと混乱します。 ローカルホストで、新しいテストデータベースを削除して作成しました。このデータベース(「admin」ではなく)では、認証できるohneを追加しました。これは、「管理者」にすべてのユーザーを追加することを私に呼びかける文書とは対照的です。 「正しい」方法は何ですか?私のMongoDBサーバーは、独自のユーザーを持ついくつかのアプリケーションをホストする必要があります。 –

+0

私はそれぞれのクライアントが独自のデータベースを取得するアプリケーションに取り組んでいるので、私の答えに記述されているように、各クライアントのそれぞれのデータベースにユーザーを追加します。しかし、すべてのユーザーは管理データベースに格納されているので、 'system.users'テーブルを検索して(存在するかどうかなど)それらの情報を見つけることができます。 –

関連する問題