【问题标题】:Impossible to create users (or custom-based roles) in Mongo on server NodeJS无法在服务器 NodeJS 上的 Mongo 中创建用户(或基于自定义的角色)
【发布时间】:2017-11-22 19:09:55
【问题描述】:

我正在尝试直接从我们的 Express 服务器在我的数据库上创建用户,使用 Mongo 3.4 作为数据库。这是服务器的代码:

var express = require('express');

var bodyParser = require('body-parser');
var app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

var MongoClient = require('mongodb').MongoClient;
var url = 'mongodb://mongo:27017/myDb';

var dbvotes = "collection1";
var dbusers = "collection2";


//Functions for users
app.post('/newUser', function(req, res, db) {

    MongoClient.connect(url, function(err, db){

        //Ecriture dans la base user
        db.collection(dbusers).insertOne( {
            "name" : req.body.name,
            "surname" : req.body.surname,
            "username" : username,
            "password" : "pasadmin",
         });

        //Creation of the user in the DB
        db.createUser( { 'user': username, 'pwd': "pasadmin", roles: [] });


        db.close();
        });
    console.log("Inserted a new user in the database.");
    res.send("User added. Click precedent to add a new user.");
});

但是,每当客户端尝试插入新用户时,它都会有效地在用户集合中创建,但不是作为数据库的用户,因为我收到以下错误:TypeError: db.createUser is not a function web_1 |在 /app/app.js:47:6。

我尝试使用 db.addUser 代替,但是,自 Mongo 2.6 以来已弃用,并且也无法正常工作,并且 db.adminCommand 出现相同的错误,db.adminCommand 不是函数。在此之前,我一直在努力使用 Node 在数据库中创建自定义角色,并决定也通过 Mongo shell 来实现,但在数据库中逐个添加用户时,这不是一个选项。

当我在 Mongo shell 中使用这些函数时,命令正在运行,所以我想它来自我在服务器中实现 Mongo 的方式(通过 Docker),或者由于 Javascript 的一些限制。知道会是什么吗?

提前感谢社区!

【问题讨论】:

    标签: javascript mongodb express createuser


    【解决方案1】:

    正确的命令是:

    db.addUser( username, password, { roles: [ role ] } );
    

    其中role 是一些MongoDB role。更多信息可以从the source file找到。也可以是{ role: <string>, db: <string> }形式的对象,其中role为MongoDB角色,db为数据库的字符串名称。

    您也可以使用db.admin().addUser。如果用户可以访问多个数据库或者您想要用户的中心位置,这将是合乎逻辑的选择。

    但是,除非您正在开发实际的管理工具,否则我无法想象从您的应用程序中添加系统用户是个好主意。添加到数据库的普通“用户”将位于您自己的用户集合中。 system user 是可以直接访问您的数据库的人。

    【讨论】:

    • 感谢您的帮助!但是,这似乎不起作用。使用 db.admin(.).addUser 会给我以下消息:在 MongoDB >= 2.6 中不推荐创建没有角色的用户,这在我使用 MongoDB 3.4 时似乎是合乎逻辑的。至于消息的第二部分,这是一个有效的关注点,但我们正在开发这个应用程序作为安全课程,作为 MongoDB 中的访问控制应用程序,每个用户在数据库中获得一个配置文件对我们来说是有益的,无论是在集合中还是作为用户。
    • 我已经编辑了我的评论。您收到的消息只是一个警告,但我会注意它并传递一个角色(默认为 dbOwner 并且可能会在某个时候中断)。看起来驱动程序没有遵循正常的 MongoDB,并在 db 上保留了 addUser
    • 如果添加了角色,它确实有效!我将调整其余代码,以便我们继续在这段工作代码的基础上进行构建。非常感谢您,vox,您的时间和专业知识!
    猜你喜欢
    • 2011-05-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-10
    • 2014-10-22
    • 2018-09-27
    • 1970-01-01
    • 2017-05-10
    相关资源
    最近更新 更多