アクセス制御を有効にした MongoDB に接続する
実際に運用しようという段階でもなく、ちょっと遊んでみようと初めただけの Node.js+MongoDB ですが、起動時の WARNING が気になり、後回しでもよかったかもしれないアクセス制御が先行してしまっています。
01アクセス制御を有効にして MongoDB を起動する
結局、実運用であれば、誰でも入れるデータベースなんてのはあり得ませんので、管理者ユーザーを作成して、アクセス制御を有効にして起動し、各データベースはロールを指定した一般ユーザーで運用するということになると思います。
すでに「MongoDB 起動後の WARNING を消す」で管理者ユーザーは作成してありますので、アクセス制御を有効にして MongoDB
を起動します。
>mongod --auth --port 27017 --bind_ip 127.0.0.1 --dbpath c:\mongodb\data
「MongoDB 起動後の WARNING を消す」を参照してください。
02一般ユーザーを作成する
管理者ユーザーでログイン
>mongo -u "myUserAdmin" -p "password" -authenticationDatabase "admin"
「MongoDB 起動後の WARNING を消す」を参照してください。
一般ユーザーを作成する
Node.js から MongoDB への接続テスト で作成した myproject に読み書き用ロールを持った一般ユーザーを作成してみます。
use myproject db.createUser({ user: "user1", pwd: "abc123", roles: [{ role: "readWrite", db: "myproject" }] })
一般ユーザーでログイン
データベース myproject にログインして登録されているデータを見てみましょう。
>mongo -u "user1" -p "abc123" -authenticationDatabase "myproject" >use myproject >db.documents.find()
成功ですね。
03サンプルコードで試す
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(); });
OKですね。