MongoDB は 初期設定のままだと アクセス制御 がなく無制限にアクセスできてしまします。 さすがに実運用でこのまま無制限許可はあり得ないので、アクセス制御(ユーザー認証、ロール制御)を有効化します。
ここではもっとも単純なシングルサーバーを前提としたアクセス制御方法についてまとめます。
ユーザー管理 に関する 情報
まずはユーザー管理に関する各種情報とそれらの保存先についてです。
ユーザー情報が保存されているデータベースは admin
で、
admin
データベースの system.users
コレクションにユーザー情報が保持されています。
ユーザー管理が行えるロールには userAdmin
と userAdminAnyDatabase
の2種類があります。
userAdmin
は指定されたデータベースに対してのみユーザー管理が行える組み込みロールになります。
userAdminAnyDatabase
は admin
データベースに対してのみ指定できる特別な組み込みロールで、
このロールが付与されたユーザーはすべてのデータベースに対するユーザー管理が行えます。
ユーザー認証 の 有効化 手順
大まかな手順としては以下のようになります。 基本的には MongoDB サーバー上で作業することを前提にコマンドを記述しています。
管理ユーザーの追加
-
アクセス制御のない状態で MongoDB を起動
1mongod --dbpath "C:\data\db"
-
MongoDB へ接続
1mongo
-
ユーザー管理者を作成
admin
データベースに接続し、以下のコマンドを実行してユーザー管理者を作成します。 作成しているユーザー名はadmin
です。123456789use admin
db.createUser({
user: 'admin',
pwd: 'password',
roles: [{
role: 'userAdminAnyDatabase',
db: 'admin'
}]
})
MongoDB 再起動
-
MongoDB サーバー をアクセス制御付きで再起動
1mongod --auth --dbpath "C:\data\db"
MongoDB コンフィグファイル を利用した起動方法については 以下の MongoDB コンフィグファイル 設定 を参照してください。
通常ユーザーの追加
-
ユーザー名とパスワードを指定してユーザー管理者で MongoDB へ接続
アクセス制御を有効化した MongoDB への接続方法は「 MongoDB 接続と同時に認証する方法」と 「 MongoDB 接続後にユーザー認証する方法」があります。
MongoDB 接続と同時に認証する方法
mongo
コマンド の-u <username>
、-p <password>
、-authenticationDatabase <databasename>
オプションを利用して接続します。1mongo -u "admin" -p "password" -authenticationDatabase "admin"
MongoDB 接続後にユーザー認証する方法
まずは通常通り MongoDB へ接続します。
1mongo
認証が必要なデータベースへスイッチして
db.auth(<username>, <password>)
メソッドで認証を行います。12use admin
db.auth("admin", "password")
-
通常データベースにアクセスできるユーザーの作成
ユーザー管理者を作成してアクセス制御を有効化させると、権限のないデータベースへはアクセスできなくなります。 利用するデータベース毎にユーザーを作成する必要があります。
以下では
test
データベースへ接続してuser1
ユーザーをreadWrite
ロールで追加しています。 その他のロールについては以下の 組み込みロール を参照してください。12345678use test
db.createUser({
user: "user1",
pwd: "password",
roles: [{
role: "readWrite", db: "test"
}]
})
ユーザー名とパスワードを指定してデータベースへ接続
-
通常データベースに追加したユーザーで接続
接続方法は管理ユーザーのアクセス方法と同じで「MongoDB 接続と同時に認証する方法」と「 MongoDB 接続後にユーザー認証する方法」があります。 内容は同じなので詳細は割愛します。
MongoDB 接続と同時に認証する方法
1mongo -u "user1" -p "password" -authenticationDatabase "test"
MongoDB 接続後にユーザー認証する方法
1mongo
12use test
db.auth("user1", "password")
MongoDB コンフィグファイル 設定
通常運用で考えるとコマンド実行して MongoDB サーバー を起動することはないと思います。 MongoDB コンフィグファイル に起動オプションを指定しておき、そのコンフィグファイルを読み込んで起動する運用になると思います。
ここでは アクセス制御 を有効化させる MongoDB コンフィグ のサンプルと、起動コマンドを掲載します。
mogodb.config
1 2 3 4 5 6 7 | systemLog: destination: file path: C:\mongodb\server\log\mongod.log security: authorization: enabled storage: dbPath: C:\mongodb\server\data |
MongoDB サーバー 起動
1 | mongod --config "C:\data\mongod.config" |
※ MongoDB コンフィグファイルオプション の詳細は MongoDB - Configuration File Options を参照してください。
組み込みロール
MongoDB にはいくつかの組み込みロールが存在します。 ここではその中でも使いそうなものをいくつかピックアップして紹介します。
データベースユーザーロール
ロール | 説明 |
---|---|
read |
すべての非システムコレクションに対する読み取り権限と
|
readWrite |
|
データベース管理ロール
ロール | 説明 |
---|---|
dbAdmin |
スキーマに関するタスク、インデックス、統計情報の取得といった管理業務に関する権限。 この権限はユーザー管理やロール管理に関する権限を含みません。 |
dbOwner |
データベース管理者としての権限。
この権限には |
userAdmin |
データベースに対するユーザーおよびロールの管理を行う権限。
|
参考記事
最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!