MongoDBに認証を設定する

f:id:utouto97:20210704222355j:plain

MongoDBに認証を設定する

MongoDBはデフォルトでは認証が設定されていません。
つまり、MongoDBに接続できれば、誰でもDBを操作することができてしまいます。
このままでは、セキュリティ的に大問題なので、ユーザー認証を設定し、ログインしないとDB操作できないようにします。

管理ユーザーを作成する

まず、はじめに、データベース全体を管理する管理ユーザーを作成します。
管理ユーザーはadminデータベースに作成します。
ユーザーの作成はcreateUser()です。

use admin
db.createUser({
 user: "admin",
 pwd: "password",
 roles: [
  {
   role: "userAdminAnyDatabase",
   db: "admin"
  },
 ]
})

やっていることは、use adminでadminデータベースを選択し、createUser()でユーザーを作成しているだけです。
権限として、userAdminAnyDatabaseを指定することで、 各データベースの管理ユーザーとしています。

管理ユーザーでログイン

db.auth("ユーザー名", "パスワード")でログインすることができます。

db.auth("admin", "password")

ログインに成功すれば1が返ってきます。
ログイン失敗時は0です。

一般ユーザーを作成

では、一般のデータベースを選択し、そのデータベースのユーザーを作成していきます。
ここでは、testというデータベースに一般ユーザーを作成しています。

use test
db.createUser({
 user: "user1",
 pwd: "password",
 roles: [
  {
   role: "readWrite",
   db: "test"
  },
 ]
})

認証をONにしてMongoDBを起動

ユーザーを作成できたので、MongoDBのアクセスに認証を必要とします。
サーバーの起動時に、--authオプションを付けることで、認証が必要になります。

$ mongod --auth

mongoコマンドでログインする

mongoコマンドでアクセスする場合、-uオプションでユーザー名、-pオプションでパスワードを設定することでログインすることができます。
このとき、--authenticationDatabaseでデータベースを指定します。

$ mongo -u "user1" -p "password" --authenticationDatabase "test"

終わり