mongodbを使ってみる (8) - ユーザー設定 -

2013-01-18T00:00:00+00:00 MongoDB

今頃かって話ですが、MongoDBで操作するにはユーザー認証が必要っていう設定をやってみる事に

とりあえずユーザー設定をする前段階で

db.samples.save({ name: "hoge" })
db.samples.find()

// { "_id" : ObjectId("50f7533baa1adeb4c2bf432b"), "name" : "hoge" }

っていうのは普通に無難に出来る事を前提に確認しておく。でMongoDBでユーザー認証しないとダメになるケースにするにはmongodb.confを設定しないといけない模様

auth = true

を設定しておく。多分デフォルトで書かれてるけどコメントされてると思うので。でMongoDBを再起動。んでユーザーを作る

use admin

// ユーザーID: test1 パスワード:testで作る
db.addUser("test1", "test")

// 一度ログイン処理しておかないと以降が処理出来ない
db.auth("test1", "test")

// ユーザーID: test2 パスワード: testで作る(但しリードオンリー)
db.addUser("test2", "test", true)

っていう感じで作るとdb.system.usersに格納されているのでfind(show usersでも良いっぽい)すると

{
  "_id" : ObjectId("50f76961e832fd5a08ff5353"),
  "user" : "test1",
  "readOnly" : false,
  "pwd" : "129f550b0b221fc14f5127f6b1be5060"
}
{
  "_id" : ObjectId("50f76979e832fd5a08ff5354"),
  "user" : "test2",
  "readOnly" : true,
  "pwd" : "e81ab577bdd505b13f1489e5295fe1be"
}

な感じになってる。で一度mongo shellを一度抜けておく。で再度mongo shell起動して

db.samples.find()

をすると

error: {
        "$err" : "unauthorized db:sample lock type:-1 client:127.0.0.1",
        "code" : 10057
}

んまぁログイン処理しとらんので。

use admin
db.auth("test1", "test")

use sample
db.samples.find()

っていう感じでログインしないと正常に結果が返ってこない。でtest2ユーザーはリードオンリーで作ったので

use admin
db.auth("test2", "test")

use sample

// 読み込みは出来る
db.samples.find()

//unauthorizedで処理出来ない
db.samples.save({ name: "fuga" })

という感じでユーザー認証していない場合とかをエラーにしたりとかリードオンリーなユーザーにするとかっていうのはこんな感じ。

参考: http://learnmongo.com/posts/quick-tip-mongodb-users

AppWidgetでListView MongoDB(Perlクライアント)でtailable Cursorを使う