banner
小鱼

小鱼's Blog

MongoDB 入門

# MongoDB と mongosh のインストール#

## Ubuntu で MongoDB をデプロイする#

### MongoDB の tar パッケージを公式ウェブサイトからダウンロード#

公式ウェブサイトにアクセスして、tar パッケージのダウンロードリンクをコピーします。


image

### 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


image

## 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コマンドが用意されています。


image

## 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 に接続します。


image

## 問題の解決#

### 権限の問題#

ただし、この時点で一般ユーザーで挿入を実行するとエラーが発生します(root ユーザーでも実行するとエラーが発生します)。これは、以前の設定ファイルで auth チェックを true に設定したためです。


image

そのため、まず 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 を再接続します。


image

# ユーザーとロール#

## ロール#

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"}]})


image

db.createUser({user:"testadmin",pwd:"123456",roles:[{role:"dbAdmin",db:"test_data"},{role:"readWrite",db:"test_data"},{role:"userAdmin",db:"test_data"}]})


image

### ユーザーの表示と削除#

# adminデータベースに切り替える
use admin

# すべてのユーザーを表示する
db.system.users.find()

# ユーザーを削除する場合は、そのユーザーが存在するデータベースに切り替える必要があります
db.system.users.remove({user:"testadmin"})


image

スーパーユーザーにも削除権限がない場合は、その role にユーザーの削除権限があるかどうかを確認してください。


image

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。