57
61

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

MongoDBのユーザ管理

Last updated at Posted at 2017-09-16

#はじめに
MongoDBのユーザ管理について記します。
詳細は公式マニュアルをご覧下さい。

#概要
MongoDBはデフォルトの場合、認証・認可機能が有効になっておらず、無制限で使えます。ここでは、MongoDBの認証・認可機能の概要と使い方を記します。

MongoDBの認証方式にはSCRAM-SHA-1とMONGODB-CR(Challenge and Response)、X.509公開鍵認証が用意されており、デフォルトはSCRAM-SHA-1です(バージョン3.0以降)。Enterprise版ではさらに、Kerberos認証、LDAPプロキシ認証に対応しているそうです。

#作業の流れ
まず、MongoDBのユーザ管理者を登録します。
次に認証・認可を有効にします。
最後に一般ユーザを登録します。

#環境

使用環境 バージョン
CentOS 7.4.1708
MongoDB v3.4.9

#ユーザ管理者の登録
まずはユーザの管理者を登録します。これはcreate usersやgrant rolesなどで一般ユーザの登録や権限の割り当てを行うユーザで、userAdminロールやuserAdminAnyDatabaseロールを割り当てられたユーザになります。

MongoDBのユーザ情報はadminデータベースで管理します。adminデータベースに接続して、ユーザ管理者を登録します。

# MongoDBに接続する。
mongo

# adminデータベースに接続する。
use admin

# ユーザ管理者を登録する。
db.createUser({
  user:"管理者のID(adminなど)",
  pwd:"パスワード",
  roles:[{ role:"userAdminAnyDatabase", db:"admin" }]
})

#MongoDBの認証・認可を有効にする
認証・認可機能を有効にするため、MongoDBのインスタンスを再起動します。mongodの実行時に--authオプションを付けます。

mongod --auth --dbpath /var/lib/mongo

なお、systemctlで起動する場合、/etc/mongod.confに以下を追記します。

# security:のコメントアウトを外し忘れないように!
security:
  authorization: enabled

これで認証・認可が有効になりました。

ユーザ管理者でログインする

ユーザ管理者でMongoDBに接続します。mongoコマンドで接続した後にdb.authを使ってユーザ管理者としてログインする方法と、mongoコマンドの実行時にユーザ管理者としてログインする方法があります。

  • db.authで認証する方法
$ mongo
> use admin
> db.auth("管理者のID", "パスワード")
  • mongoコマンドで認証する方法
$ mongo -u "ユーザ管理者" -p "パスワード" --authenticationDatabase="admin"

#ユーザ登録
ユーザを登録する際には登録先のデータベースを指定する必要があります。このデータベースをauthentication databaseと呼びます。
ユーザがmongoコマンドでログインする際には、--authenticationDatabaseオプションでこのデータベースを指定する必要があります。

なお、ユーザに権限を割り当てることで、authentication database以外のDBにも接続可能となります。

ユーザの登録は以下のコマンドとなります。

> use [データベース名(authentication databaseとなる)]
> db.createUser(
  {
    user: "ユーザ名",
    pwd:"パスワード",
    roles:[
       {role:"readWrite",  db:"使用するデータベース名"},
       {role:"readWrite",  db:"使用するデータベース名"},
       ・・・
    ]
  }
)

rolesには、このユーザが使用するデータベースとそのデータベースに対するロールを複数指定できます。

#接続してみる
作成したユーザでデータベースに接続するには以下を実行します。

$ mongod -u "ユーザ名" -p "パスワード" --authenticationDatabase="登録時に指定したauthentcation databaseの名前"

#ロール一覧
用意されているロールは以下の通り。詳細はBuilt-In Rolesを参照のこと。

種別 ロール名 概要
Database User Roles read システム系のDBやコレクション以外のデータを読む権限
readWrite システム系のDBやコレクション以外のデータを読み書きする権限
Database Administration Roles dbAdmin データベースの管理権限
dbOwner システム全体の管理権限。readWrite、dbAdmin、userAdminロールと関連付いている。
userAdmin ユーザやロールの管理者
Cluster Administration Roles clusterAdmin クラスタの管理権限。clusterManager、clusterMonitor、hostManagerロールと紐付く。
clusterManager クラスタの運用管理権限
clusterMonitor クラスタのモニタリングツールに対する参照権限
hostManager サーバの運用管理権限
Backup and Restore Roles backup データのバックアップ権限
restore バックアップデータからのリストア権限
ALL-Database Roles readAnyDatabase 全てのDBの読み取り権限
readWriteAnyDatabase 全てのDBの読み書き権限
userAdminAnyDatabase 全てのDBのユーザ管理権限
dbAdminAnyDatabase 全てのDBのデータベース管理権限。dbAdminと同等。
Superuser Roles root システム全体の管理権限。readWriteAnyDatabase、dbAdminAnyDatabase、userAdminAnyDatabase、clusterAdmin roles、restore、backupが紐付く。
Internal Role __system 内部処理用の権限。割り当ててはいけない。
57
61
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
57
61

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?