MongoDB 4.0.9
Windows10
ネットワーク上の複数の端末から複数のDBを安全に使えるように、管理者、あるいは指定のアプリケーション以外からDBにアクセスできないようにしたい。
MongoDBサーバーをセットアップしたあと、ユーザ認証で使えるようにする設定と、ついでにバックアップ/リストアのハナシ
インストール
公式からMongoDB
をダウンロードしてインストール。
win版のver4からは、すべてデフォルトでインストールすると自動的にwindowsサービスにインストールされるはずなので、windowsのサービスを確認する。
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 → ユーザ認証を有効に
※コメントは消してあります
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