# MongoDB と mongosh のインストール#
## Ubuntu で MongoDB をデプロイする#
### MongoDB の tar パッケージを公式ウェブサイトからダウンロード#
公式ウェブサイトにアクセスして、tar パッケージのダウンロードリンクをコピーします。
### Ubuntu でのインストール#
以下のコマンドを実行して tar パッケージをダウンロードします。
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu2004-6.0.7.tgz
解凍します。
tar -zxvf mongodb-linux-x86_64-ubuntu2204-6.0.7.tgz
解凍されたファイルを /usr/local/mongodb に移動します。
mv mongodb-linux-x86_64-ubuntu2204-6.0.7/ mongodb/
### 設定#
ディレクトリ内に logs と data フォルダを作成します。
mkdir logs
mkdir data
logs フォルダ内で以下のコマンドを実行します。
touch mongodb.log
次に bin ディレクトリに移動し、mongodb.conf という設定ファイルを作成します。
# データファイルの保存場所
dbpath = /usr/local/mongodb/data
# ログファイルの保存場所
logpath = /usr/local/mongodb/logs/mongodb.log
logappend=true
# ポート
port = 27017
# デーモンモードで実行するかどうか
fork = false
# 認証モード
auth=true
# リモート接続
bind_ip=0.0.0.0
### bin ディレクトリで起動#
起動コマンドを実行します。
./mongod -f mongodb.conf
バックグラウンドで起動する場合は、--fork を追加します。
./mongod --fork -f mongodb.conf
## MongoDB シェルのインストール#
圧縮ファイルをダウンロードします。
wget https://downloads.mongodb.com/compass/mongosh-1.6.0-linux-x64.tgz
解凍します。
tar -zxvf mongosh-1.6.0-linux-x64.tgz
解凍されたファイルの名前を変更します。
mv mongosh-1.6.0-linux-x64 mongosh
mongosh/bin
ディレクトリには、mongoDB データベースサーバーに接続するためのmongosh
コマンドが用意されています。
## bin ディレクトリを環境変数 PATH に追加する#
現在、mongod
コマンドのパスはmongodb/bin
にあり、mongosh
コマンドのパスはmongosh/bin
にあります。これらのパスを Path 環境変数に追加する必要があります。
以下のコマンドを実行して環境変数を編集します。
vi ~/.bashrc
ファイルの最後に以下を追加します。
PATH=$PATH:$HOME/bin:/usr/local/mongodb/bin:/usr/local/mongosh/bin
保存した後、設定を有効にするために以下のコマンドを実行します。
source ~/.bashrc
## 起動#
MongoDB は次のコマンドで起動できます。
mongodb --fork -f mongodb.conf
mongosh は直接実行します。
mongosh
mongosh はデフォルトで mongodb:localhost:27017 に接続します。
## 問題の解決#
### 権限の問題#
ただし、この時点で一般ユーザーで挿入を実行するとエラーが発生します(root ユーザーでも実行するとエラーが発生します)。これは、以前の設定ファイルで auth チェックを true に設定したためです。
そのため、まず auth を false に変更してから再起動する必要があります。
ps -ef | grep mongodb
kill -9 ポート番号
再起動後、admin コレクションでスーパーユーザーアカウントを作成し、作成後に設定ファイルの auth を true に変更し、mongo プロセスを再起動すれば OK です。
#### スーパーユーザーの作成#
>use admin
>db.createUser({user:"root",pwd:"XXXXXX",roles:[{role:"userAdminAnyDatabase",db:"admin"},{role:"readWriteAnyDatabase",db:"admin"}]})
作成後、MongoDB を再起動し、mongosh を再接続します。
# ユーザーとロール#
## ロール#
Built-In Roles(組み込みのロール)
データベースユーザーロール:read、readWrite;
データベース管理ロール:dbAdmin、dbOwner、userAdmin;
クラスタ管理ロール:clusterAdmin、clusterManager、clusterMonitor、hostManager;
バックアップとリストアロール:backup、restore;
すべてのデータベースロール:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
スーパーユーザーロール:root
// これらのロールのいくつかは、間接的または直接にシステムのスーパーユーザーアクセスを提供します(dbOwner、userAdmin、userAdminAnyDatabase)
内部ロール:__system
各ロールの機能
Read:指定されたデータベースの読み取りを許可します。
readWrite:指定されたデータベースの読み書きを許可します。
dbAdmin:指定されたデータベースで管理関数を実行する権限を許可します。例:インデックスの作成、削除、統計の表示、system.profileへのアクセス
userAdmin:system.usersコレクションに書き込む権限を許可します。指定されたデータベースでユーザーの作成、削除、管理ができます。
clusterAdmin:adminデータベースでのみ使用可能で、シャーディングとレプリケーションセットに関連するすべての関数の管理権限をユーザーに与えます。
readAnyDatabase:adminデータベースでのみ使用可能で、すべてのデータベースの読み取り権限をユーザーに与えます。
readWriteAnyDatabase:adminデータベースでのみ使用可能で、すべてのデータベースの読み取りおよび書き込み権限をユーザーに与えます。
userAdminAnyDatabase:adminデータベースでのみ使用可能で、すべてのデータベースのuserAdmin権限をユーザーに与えます。
dbAdminAnyDatabase:adminデータベースでのみ使用可能で、すべてのデータベースのdbAdmin権限をユーザーに与えます。
root:adminデータベースでのみ使用可能。スーパーアカウント、スーパー権限
## ユーザー#
### 一般ユーザーの作成#
// adminデータベースに切り替える
use admin
// auth認証を実行し、認証に成功すると1が返されます
db.auth("root","パスワード")
// データベースに切り替えるか作成する(例:test)
use test
db.createUser({user:"user",pwd:"123456",roles:[{role:"readWrite",db:"test"}]})
db.createUser({user:"testadmin",pwd:"123456",roles:[{role:"dbAdmin",db:"test_data"},{role:"readWrite",db:"test_data"},{role:"userAdmin",db:"test_data"}]})
### ユーザーの表示と削除#
# adminデータベースに切り替える
use admin
# すべてのユーザーを表示する
db.system.users.find()
# ユーザーを削除する場合は、そのユーザーが存在するデータベースに切り替える必要があります
db.system.users.remove({user:"testadmin"})
スーパーユーザーにも削除権限がない場合は、その role にユーザーの削除権限があるかどうかを確認してください。