DB 権限まわり
ログイン
MongoDB の認証機能を有効にしていた場合
mongo
で入った後に、以下のコマンド
use admin # DB 選択
db.auth("user_name", "password") # 認証
もしくは、mongo
で入る際に以下でログイン
mongo DB名 -u ユーザ名 -p パスワード
ユーザ操作
- 基本的に、対象となる DB を
use データベース名
で選んでから行う - ユーザ作成前に、事前に DB を作成しておくこと
# ユーザ一覧 確認
db.getUsers()
# 全 DB の管理者権限 (CRUD 含む) をもつユーザ 作成
db.createUser({user:"user_name", pwd:"password", roles:[{role:"userAdminAnyDatabase", db:"admin"}]})
# 特定の DB の管理者権限をもつユーザ 作成
db.createUser({user:"user_name", pwd:"password", roles:[{role:"dbOwner", db:"db_name"}]})
# 特定の DB の一般ユーザ 作成
db.createUser({user:"user_name", pwd:"password", roles:[{role:"read", db:"db_name"}]})
db.createUser({user:"user_name", pwd:"password", roles:[{role:"readWrite", db:"db_name"}]})
# パスワード変更
db.changeUserPasword("user_name", "new_password")
# ユーザにロールを追加 (例: 読み取り権限 付与)
db.grantRolesToUser("user_name", [{role:"read", db:"db_name"}])
# ユーザのロールを削除 (例: 読み取り権限 剥奪)
db.revokeRolesFromUser("user_name", [{role:"read", db:"db_name"}])
# ユーザ削除
db.dropUser("user_name")
CRUD 操作: DB
- 基本的に、対象となる DB を
use データベース名
で選んでから行う
# DB 一覧
show dbs
# 使用 DB 切り替え
use データベース名
# 現在選択している DB 確認
db.stats()
# DB 作成 (実際は 1 件でもコレクションを作成しないと表示されない)
use データベース名
# DB 削除 (use で選択されているものが削除される)
db.dropDatabase()
CRUD 操作: コレクション
- 基本的に、対象となる DB を
use データベース名
で選んでから行う
# コレクション 一覧
show collections
# コレクション 作成
db.createCollection('collection_name')
# コレクション 削除
db.コレクション名.drop()
CRUD 操作: ドキュメント
- 基本的に、対象となる DB を
use データベース名
で選んでから行う
# ドキュメント 一覧 (全件 検索)
db.コレクション名.find()
# ドキュメント 一覧 (CLI でも見やすく整形してくれるオプション)
db.コレクション名.find().pretty()
# ドキュメント 検索 (AND 条件)
db.コレクション名.find({column1: 'aaa', column2: 10})
# ドキュメント 検索 (OR 条件検索)
db.コレクション名.find({column_name1: 'aaa'}, {column_name2: 10})
# ドキュメント 検索 (否定 条件検索 (index に注意))
db.コレクション名.find({column_name: {$ne: 'aaa'}})
# ドキュメント 検索 (「xxx より大きい」 条件検索)
db.コレクション名.find({column_name: {$gt: 10}})
# ドキュメント 検索 (「xxx 以上」 条件検索)
db.コレクション名.find({column_name: {$gte: 10}})
# ドキュメント 検索 (「xxx 未満」 条件検索)
db.コレクション名.find({column_name: {$lt: 10}})
# ドキュメント 検索 (「xxx 以下」 条件検索)
db.コレクション名.find({column_name: {$lte: 10}})
# ドキュメント 検索 (正規表現で検索)
db.コレクション名.find({column_name: /^aaa/})
# ドキュメント ソート (昇順 検索)
db.コレクション名.find().sort({column_name: 1})
# ドキュメント ソート (降順 検索)
db.コレクション名.find().sort({column_name: -1})
# ドキュメント 件数
db.コレクション名.count()
# ドキュメント 検索 (件数指定)
db.コレクション名.limit(20)
# ドキュメント 作成 (コレクション が万が一無くても自動で同時に生成される)
db.コレクション名.insert({new_column1: 'new_value', new_column2: 999})
# ドキュメント 作成 (Date 型で作成する場合)
db.コレクション名.insert({date_column: ISODate("2019-03-03T09:00:00+09:00")})
# ドキュメント 更新 (第 1 引数が更新条件、 第 2 引数が更新内容)
db.コレクション名.update({column_name: 'aaa'}, {$set: {column_name: 'bbb'}})
# ドキュメント 削除
db.コレクション名.remove({column_name: 'aa'})
CRUD 操作: インデックス系
- 基本的に、対象となる DB を
use データベース名
で選んでから行う
# インデックス作成 (インデックス貼るだけ)
db.コレクション名.ensureIndex({column_name: 1})
# インデックス作成 (インデックスに名前をつける)
db.コレクション名.ensureIndex({column_name: 1}, {name: 'index name'})
# インデックス削除
db.コレクション名.dropIndex('index name')
# ユニーク (一意) 制約
# sparse: true にしないと 「null」 もユニークの制約対象になってしまう
db.コレクション名.ensureIndex({column: 1}, {unique: true, sparse: true})
ユーザのロール
用意されている主なロール。詳細は、公式の「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 | 内部処理用の権限。割り当ててはいけない |