【问题标题】:Mongodb Secure Server Setup with Mongoose使用 Mongoose 设置 Mongodb 安全服务器
【发布时间】:2017-12-16 17:59:37
【问题描述】:

我试图成功的设置是有一个创建数据库的节点进程,其他服务器以安全的方式访问这些数据库。
所以我的想法是使用用户从节点创建数据库并通过。然后打开服务器的mongodb端口打开访问并锁定mongo admin用户。如果这个理论是好的:

  1. 如何使用 mongoose 创建用户,以便只有该用户才能访问数据库?
  2. /etc/mongodb.conf 上我应该只添加bind_ip = 0.0.0.0 就可以了吗?

PS:我使用的是 Ubuntu 16:04 和最新的 Mongodb。

编辑:2017 年 8 月 13 日
到目前为止,我取得的成功是将addUser = db.createUser({user: "admin",pwd: "admin",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]}); 用于管理数据库,在数据库位于--auth 下时与其连接,并尝试通过该连接创建其他数据库,如下所示。

var adminConnection = mongoose.createConnection('mongodb://admin:admin@localhost:27017/admin', {
    useMongoClient: true
});
console.log(typeof adminConnection.db.executeDbAdminCommand);//function

【问题讨论】:

  • 您可以使用猫鼬创建用户。它只是用于连接和执行 mongodb 的 CURD 操作的驱动程序
  • 我已经更新了我的答案,可能已经解决了您的问题,并将帮助您解决其他 mongodb 和 ubuntu 问题

标签: node.js mongodb mongoose server ubuntu-16.04


【解决方案1】:
Your  /etc/mongod.conf  YAML file will be look like this

storage:
  dbPath: /var/lib/mongodb
  journal:
    enabled: true

# where to write logging data.
systemLog:
  destination: file
  logAppend: true
  path: /var/log/mongodb/mongod.log


# network interfaces  put your ip in bindIp in form of Array like below
net:
  port: 27017
  bindIp: [127.0.0.1,84.20.57.18]

#before enabling security authorization you must add mongodb database user
security:
  authorization: "enabled"

#Replication oplogsize mb set based on Main Memory of your Ubuntu Server (It will be good to set 1024 for speed of database Operation). In replSetName give your Replica set name or your Project Name Ex: smartcity
replication:
  oplogSizeMB: 1024
  replSetName: "smartcity"

在 node js 中如何使用 mongoose 并连接到你的 mongodb 数据库如下

var mongoose = require('mongoose');
var options = {
    useMongoClient:true
};
var dbUrl = 'mongodb://<dbusername>:<dbpassword>@<db-ipaddress>:27017/<dbname>?replicaSet=<replicasetname>';//Ex:"mongodb://smartcityUser:smartcity1234@84.20.57.18:27017/smartcity?replicaSet=smartcity"

mongoose.connect(dbUrl,options);
mongoose.Promise = global.Promise;

愿我的工作解决您的问题,一切顺利

【讨论】:

  • mongod.conf 看起来是合乎逻辑的,我会使用类似的东西。关于 node.js 现在,看下面。 ` var dbUrl = 'mongodb://coolone:cooltwo@localhost:27017/coolthree'; mongoose.createConnection(dbUrl, { useMongoClient: true });猫鼬.Promise = global.Promise; ` 基本上是我添加的,但我得到了MongoError: Authentication failed. 我正在使用createConnection,因为我的应用程序与具有不同数据库的 mongodb 连接。
  • 简单问题,我们如何连接用户并传递给不存在的数据库?
【解决方案2】:

一般来说,我几乎做了我想做的事。这是解决方案。

var a_conn = mongoose.createConnection('mongodb://admin:admin@localhost:27017/admin', {
    useMongoClient: true
});
a_conn.once('open', function() {
    a_conn.useDb('w_one');
    a_conn.otherDbs[0].db.addUser('user', 'pass', {
        db: 'w_one',
        roles: ["readWrite"]
    });
    var Schema = mongoose.Schema({});
    var Collection = a_conn.otherDbs[0].model('cool', Schema, 'cool');
    var doc = new Collection({});
    doc.save(function() {
        doc.remove(function() {
            var testConn = mongoose.createConnection('mongodb://user:pass@localhost:27017/w_one', {
                useMongoClient: true
            });
            testConn.once('open', function() {
                //Collection.collection.drop('cool');
                console.log('Database is ready.');
            });
        });
    });
});

通常我用文档创建集合来创建数据库,当我删除该集合时,数据库会自动被删除,如果有不删除它的选项,这将是解决方案的一个很好的改进。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 2011-06-20
    • 2011-12-31
    • 1970-01-01
    • 2022-01-22
    • 2016-04-17
    相关资源
    最近更新 更多