2
1

More than 5 years have passed since last update.

MongoDBを立てよう~ユーザ認証とBackup/Restore~(Windows)

Posted at

MongoDB 4.0.9
Windows10

ネットワーク上の複数の端末から複数のDBを安全に使えるように、管理者、あるいは指定のアプリケーション以外からDBにアクセスできないようにしたい。

MongoDBサーバーをセットアップしたあと、ユーザ認証で使えるようにする設定と、ついでにバックアップ/リストアのハナシ

インストール

公式からMongoDBをダウンロードしてインストール。
win版のver4からは、すべてデフォルトでインストールすると自動的にwindowsサービスにインストールされるはずなので、windowsのサービスを確認する。

2019-08-29_15h49_47.png

MongoDBのプロパティを見ると、実行ファイルのパスは

"C:\Program Files\MongoDB\Server\4.0\bin\mongod.exe" --config "C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg" --service

となっているはず。このmongod.cfgが設定ファイルとなる。あとでいじる。

ユーザの作成

デフォルトの設定では、mongoは認証なしで使えることになっている。
まずはMongoDBを利用する各アプリケーション用に、そのDBしか使えないユーザをそれぞれ作る。
さらに、ユーザを作れるユーザ管理用ユーザを作っておく。

以下のコマンドをMongoDBサーバが動いている端末で実行。

DBがないのにいきなりuse hogeしても問題なし。

mongo

use hoge
db.createUser(
    {
        user: "userForHoge",
        pwd: "PASSWORD",
        roles:
        [
            {
                role: "readWrite",
                db: "hoge"
            }
        ]
    }
)

use fuga
db.createUser(
    {
        user: "userForFuga",
        pwd: "PASSWORD",
        roles:
        [
            {
                role: "readWrite",
                db: "fuga"
            }
        ]
    }
)

use admin
db.createUser(
    {
        user: "userAdmin",
        pwd: "PASSWORD",
        roles:
        [
            {
                role: "userAdminAnyDatabase",
                db: "admin"
            }
        ]
    }
)

この後ユーザ認証を付けるので、これから先新しいDBを使いたいときは、まずuserAdminでログインしてユーザを作ってから、そのユーザでログインする必要がある。

設定 mongod.cfg

MongoDBサーバサービスが起動時に読み込む設定ファイルC:\Program Files\MongoDB\Server\4.0\bin\mongod.cfgを以下のように編集してMongoDBサーバサービスを再起動する。

変更は以下の通り

  • dbとlogの場所を使いやすい場所に(指定したpahtは既に存在する必要がある)
  • bindIp: 0.0.0.0 → すべてのIPアドレスから接続を許可
  • authorization: enabled → ユーザ認証を有効に ※コメントは消してあります
mongod.cfg
storage:
  dbPath: C:\path\to\db\
  journal:
    enabled: true

systemLog:
  destination: file
  path:  C:\path\to\mongo.log

net:
  port: 27017
  bindIp: 0.0.0.0

security:
    authorization: enabled

ログイン

ここまで完了したら、ネットワーク越しにmongoコマンドかCompassか、アプリかで確認しよう。
ユーザ認証しないと読み書きできないハズ。

DB:hogeの場合URLとしては

mongodb://userForHoge:PASSWORD@ホスト名:27017/hoge

mongoコマンドなら

mongo -u userForHoge -p PASSWORD --authenticationDatabase hoge

--authenticationDatabaseオプションは、認証用ユーザの在り処を示す。DBの中にユーザは作られるけれど、そのDB以外の操作許可も与えられる。

新しくDBを作ったりするときは、
1. mongodb://userAdmin:PASSWORD@ホスト名:27017/adminへログインして、DBに対して許可したユーザを作る
2. ログアウトする
3. 作ったユーザで入る

MongoDBをバックアップ

DB単位でバックアップする。

mongodump -u USER -p PASSWORD -d DBNAME --gzip --archive=C:\Garamon\Backup\DevHub

# ※古いmongodは--gzip、--archiveオプションが効かない
mongodump -u USER -p PASSWORD -d DBNAME C:\Garamon\Backup\DevHub

リストア

バックアップしたものを持ってきて、DB単位でリストア。
--dropオプションは、現在のデータをドロップする。

mongorestore -u USER -p PASSWORD --authenticationDatabase DBNAME --drop --gzip --archive=C:\Garamon\Backup\DevHub\archive.gz

# ※古い端末からのdumpの場合ディレクトリになっている
mongorestore -u USER -p PASSWORD --authenticationDatabase DBNAME -d DBNAME --drop DBNAME 
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1