13

空のログインとパス(デフォルトで設定)でdbにアクセスできないように、mongodbのパスワードを設定しようとしています。

私はmongoサーバーを起動しています:

sudo ./mongod

クライアントの開始:

./mongo

パスワードの設定:

use admin
db.addUser("root", "root")
exit

出力は次のとおりです。

MongoDB shell version: 2.2.0
connecting to: test
> use admin
switched to db admin
> db.addUser("root", "root")
{
    "user" : "root",
    "readOnly" : false,
    "pwd" : "2a8025f0885adad5a8ce0044070032b3",
    "_id" : ObjectId("50c90b94e28c41a388104f64")
}
> exit

ただし、空の資格情報で認証しようとしても (mViever 管理 UI を使用しています)、それでも機能します。そうしないと、root/root でアクセスできません。私が間違っていることは何ですか?

また、-auth パラメータを使用して mongo サーバーを起動しようとしましたが、同じ結果になりました。

./mongod -auth

UPD: -auth パラメータで開始した後、どのパスでもログインできません。取得:

Thu Dec 13 03:27:38 uncaught exception: error {
    "$err" : "unauthorized db:admin ns:admin.system.users lock type:1 client:127.0.0.1",
    "code" : 10057
}

更新:何が起こっているのかわかりません...

> db.auth("root","root");
1
> ^C
bye

ログインできます。./mongod --auth再起動してみましょう./mongo:

MacBook-Pro-Ilya:bin ilyarusanen$ ./mongo
MongoDB shell version: 2.2.2
connecting to: test
> db.auth("root","root")
Error: { errmsg: "auth fails", ok: 0.0 }
0
> db.test.insert({"yeah":"2342"})
Fri Dec 14 08:52:05 uncaught exception: getlasterror failed: { "errmsg" : "need to login", "ok" : 0 }
> use admin
switched to db admin
> db.addUser("root","root")
Fri Dec 14 08:52:14 uncaught exception: error {
    "$err" : "unauthorized db:admin ns:admin.system.users lock type:1 client:127.0.0.1",
    "code" : 10057
}
> db.auth("root","root")
1

なぜ最初にログインできるのですか?mongo を再起動した後にログインできないのはなぜですか? また、addUser の試行に失敗した後、ログインできるようになるのはなぜですか? ありがとう。

UPDATE2 : MongoHub は正常に認証されているようです。ただし、NodeJS からはまだログインできません。次のようなコードを使用します。

mongo_db.open(function(err,data){
  if(data){
    data.authenticate("root", "root",function(err2,data2){
         if(data2){
             console.log("Database opened");
         }
         else{
             console.log(err2);
         }
    });
  } else {
       console.log(err);
  }
});

そして私は得る:

{ [MongoError: auth fails] name: 'MongoError', errmsg: 'auth fails', ok: 0 }

ただし、同じ資格情報を持つ MongoHub は正常に動作します。

4

1 に答える 1

8

あなたのコメントから、mViewerを使用していると述べています。mViewer のバージョン 0.9.1 は認証をサポートしていません。mViewer GitHub のこの問題によると、これはバージョン 0.9.2 で解決されており、10 月にリリースされる予定でした。

認証を使用してノードを開始する前に、ノードにログオンしてユーザーを追加します。次に、--authmViewer を使用せずにノードを起動し、シェルに接続します。

この時点で、管理データベースに接続して管理ユーザーを認証できます。

use admin
db.auth('root', 'root')

すべてのデータベースにアクセスできる管理者ユーザーを設定したので、管理者データベースに対して認証する必要があります。これが完了すると、すべてのデータベースにアクセスできるようになります。また、任意のデータベースで新しいユーザーを作成したり、すべてのデータベースに対して新しい読み取り専用ユーザーを作成したりできます。

1 つのデータベースのみにアクセスできる新しいユーザーを作成する場合、そのユーザーはuseそのデータベースdb.auth(name, pass)に対してアクセスする必要があります。

すべてのデータベースへの読み取り専用アクセス権を持つ新しいユーザーを作成すると、そのユーザーはすべてのデータベースへuse admindb.auth(name, pass)読み取り専用アクセス権を取得します。

認証の設定の詳細についてはこちらを、ユーザーの設定の詳細についてはこちらを参照してください。

注:なし --authでノードを開始すると、認証は有効になりません。これは、シェルに接続できることを意味しますがdb.auth('root','root')、アクセスに関しては何もしません。MongoDB は、--authコマンド ライン オプションなしでデータベースへのアクセスを拒否しません (--keyFileシャード セットアップまたはレプリカ セット内)。

于 2012-12-14T04:08:52.877 に答える