Table of Contents
Dockerコンテナでmongodbを使っているが、ユーザー作成、パスワード設定など、まったく認証まわりの設定をしていなかったのでメモをしておく
docker-composeでコンテナを作成する
- 「MONGO_INITDB_ROOT_USERNAME」、「MONGO_INITDB_ROOT_PASSWORD」はユーザーを管理するadminデータベースのユーザーとパスワードを設定する。
- ユーザー:root
- パスワード:pass
version: '2'
services:
mongo:
image: mongo:3.4
env_file: .env
ports:
- $MONGO_PORT:$MONGO_PORT
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=pass
container_name: mongo-db
restart: always
privileged: true
コンテナにログインする
docker exec -it mongo-db /bin/bash
mongoコマンドでDBへ繋ぐ
mongo
adminユーザDBを確認する
> use admin
switched to db admin
adminのDBへ切り替わった
docker-composeで設定したユーザー名、パスワードで認証する
> db.auth("root","pass")
1
認証されたら、「1」が返ってくる
管理者ユーザーの確認をする
> db.system.users.find()
{ "_id" : "admin.root", "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "GGkn2gqig+GXudesfzDAAvyw==", "storedKey" : "nacHccQ/dk4sdfsfsdfdqwnocvU=", "serverKey" : "5lIjsdsfdjjJHYsd+EZj/+QIltImlc=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
アプリ用のDBへ切り替える
> use appdb
switched to db appdb
アプリ用のユーザーを作成する(特定のデータベースのみ管理者権限をもつユーザの作成)
- ユーザー:app_user
- パスワード:app_pass
- DB名:appdb
- 権限:dbOwner ※権限がよくわかんないけど、なんか強そうなんで設定した。詳しくは以下のサイトで確認
http://makaaso.hatenablog.com/entry/2015/08/20/150455
> db.createUser(
{
user: "app_user",
pwd: "app_pass",
roles:
[
{
role: "dbOwner",
db: "appdb"
}
]
}
)
Successfully added user: {
"user" : "app_user",
"roles" : [
{
"role" : "dbOwner",
"db" : "appdb"
}
]
}
use appdbでDBを切り替えることが大切、もし切り替えしてないと現在のDBでユーザーが作成されてしまう・
ユーザの削除
> use データベース名
> db.system.users.remove({user:"username"})
mongooseでのURI設定はこんな感じ
mongodb://ユーザー:パスワード@ホスト:27017/DB名