私は空のログインとパス(デフォルトで設定)でdbにアクセスできないようにmongodbのパスワードを設定しようとしています。
私はmongoサーバーをstattingしています:
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の試行後、ログインできるようになるのですか?ありがとう。
PDATE2: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は正常に機能します。
あなたのコメントから、あなたはmViewerを使用していると述べています。 mViewerのバージョン0.9.1は認証をサポートしていません。 mViewer GitHubの この問題 によると、これはバージョン0.9.2で解決されており、10月にリリースされる予定でした。
認証を使用してノードを起動する前に、ノードにログオンしてユーザーを追加します。次に、ノードを_--auth
_で開始し、mViewerなしでシェルに接続します。
この時点で、管理データベースに接続して、管理ユーザーを認証できます。
_use admin
db.auth('root', 'root')
_
すべてのデータベースにアクセスできる管理ユーザーを設定したので、管理データベースに対して認証する必要があります。これを実行すると、すべてのデータベースにアクセスできるようになります。また、任意のデータベースで新しいユーザーを作成したり、すべてのデータベースの新しい読み取り専用ユーザーを作成したりできます。
1つのデータベースのみにアクセスできる新しいユーザーを作成する場合、そのユーザーはそのデータベースをuse
し、それに対してdb.auth(name, pass)
を実行する必要があります。
すべてのデータベースへの読み取り専用アクセス権を持つ新しいユーザーを作成する場合、それらのユーザーは_use admin
_に続いてdb.auth(name, pass)
を実行し、すべてのデータベースへの読み取り専用アクセス権を取得します
認証のセットアップについての詳細情報 ここ およびユーザーのセットアップに関する詳細情報 ここ
注:ノードを開始するときなし_--auth
_の場合、認証は有効になりません。これは、シェルとdb.auth('root','root')
を使用して接続できることを意味しますが、アクセスに関しては何もしません。 MongoDBは、_--auth
_コマンドラインオプションなしでデータベースへのアクセスを拒否しません(シャードセットアップまたはレプリカセットでは_--keyFile
_)