アクセス制御を有効にした MongoDB に接続する

アクセス制御を有効にした MongoDB に接続する

関連記事


実際に運用しようという段階でもなく、ちょっと遊んでみようと初めただけの Node.js+MongoDB ですが、起動時の WARNING が気になり、後回しでもよかったかもしれないアクセス制御が先行してしまっています。



アクセス制御を有効にして MongoDB を起動する

結局、実運用であれば、誰でも入れるデータベースなんてのはあり得ませんので、管理者ユーザーを作成して、アクセス制御を有効にして起動し、各データベースはロールを指定した一般ユーザーで運用するということになると思います。

すでに「MongoDB 起動後の WARNING を消す」で管理者ユーザーは作成してありますので、アクセス制御を有効にして MongoDB を起動します。


>mongod --auth --port 27017 --bind_ip 127.0.0.1 --dbpath c:\mongodb\data

MongoDB 起動後の WARNING を消す」を参照してください。


一般ユーザーを作成する

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

>mongo -u "myUserAdmin" -p "password" -authenticationDatabase "admin"

MongoDB 起動後の WARNING を消す」を参照してください。


f:id:ausnichts:20180124201010j:plain


一般ユーザーを作成する

Node.js から MongoDB への接続テスト で作成した myproject に読み書き用ロールを持った一般ユーザーを作成してみます。


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

f:id:ausnichts:20180124201833j:plain


一般ユーザーでログイン

データベース myproject にログインして登録されているデータを見てみましょう。


>mongo -u "user1" -p "abc123" -authenticationDatabase "myproject"

>use myproject

>db.documents.find()

f:id:ausnichts:20180124204640j:plain

成功ですね。


サンプルコードで試す

Node.js から MongoDB への接続テストで試したサンプルコードを作成した一般ユーザーでログインするように変更します。


const url = 'mongodb://user1:abc123@localhost:27017/myproject';

これでいけると思います。

const MongoClient = require('mongodb').MongoClient;
const assert = require('assert');

// Connection URL
const url = 'mongodb://user1:abc123@localhost:27017/myproject';

// Database Name
const dbName = 'myproject';

// Use connect method to connect to the server
MongoClient.connect(url, function(err, client) {
  assert.equal(null, err);
  console.log("Connected successfully to server");

  const db = client.db(dbName);

  client.close();
});

f:id:ausnichts:20180125185641p:plain

OKですね。