【问题标题】:MongoError: not authorized for insert/query; stackatoMongoError:未授权插入/查询;堆栈
【发布时间】:2014-03-07 09:05:05
【问题描述】:

这是公司项目的一部分。我正在尝试在我公司建立的 stackato 服务器上托管一个应用程序。我的应用程序有一个支持 mongodb 的节点框架。我编写了一个简单的脚本来尝试连接到 db 服务并插入一个 JSON 对象。 我能够成功连接到数据库,但在插入时,返回错误消息:

MongoError: 未授权在 db:componentlist 上插入

我的代码:

var mongo = require('mongodb');
var Db = mongo.Db;
var Server = mongo.Server;
var services;
var dbcreds;

var dbcreds = {
  //cant paste due to confidential reasons
};

  var server = new Server(
          dbcreds.host,
          dbcreds.port, 
          {user: dbcreds.username, pass: dbcreds.password}
      );

  db = new Db(dbcreds.db, server,{w:1});
  console.log('connecting to online db and now storing data in:' + dbcreds.db);


db.open(function(err, db) {
    if (err) { console.log('db connection error: ' + err);}
    console.log('db is opened.');

    var component = [
    {
        platform: "alpha",
        component1: "beta",

    }];

    db.collection('componentlist', function(err,collection){
        collection.insert(component, function(err, result){
        if(err){console.log("cannot insert the object into componentlist " + err);}         
        db.close();
        });
    });     

});

当我在安装了 node 和 mongodb 的机器上运行它时,终端会返回这个。 这些是一组可以与代码相关的控制台日志消息

连接到在线db,现在将数据存储在:db,db已打开。, 无法将对象插入组件列表 MongoError: 未授权 在 db.componentlist 上插入

我在网上查了db,再次确认没有数据插入成功。 我是否缺少任何额外的授权命令?

【问题讨论】:

    标签: mongodb node-mongodb-native stackato


    【解决方案1】:

    不确定用于身份验证的服务器选项。现在首选的方法是使用MongoClient 类进行如下连接:

    var MongoClient = require("mongodb").MongoClient;
    
    MongoClient.connect(
        "mongodb://<user>:<pass>@<host>:<port>/<db>", function(err, db) {
    
        // everything else inside your "open.db" call
    

    这是首选,但以防万一传递凭据的方式有问题,因为这种方式很好documented。这只是为了确保您以您打算使用的用户帐户进行连接。

    除此之外,只要这是正确的用户,则错误表明该用户缺乏在数据库上执行插入的权限。因此,您可能需要检查已授予该用户的权限。因此,该帐户需要应用 readWrite 角色。

    【讨论】:

    • 完美!非常感谢尼尔。
    【解决方案2】:

    很抱歉,如果这是一个很晚的回复,但也许这可以帮助其他有类似问题的人。但我在 Stackato 环境中遇到了同样的问题。因此,您似乎将数据库名称设置为“componentlist”,但在 Stackato 中,它将执行 mongodb URI 替换,该替换通常具有随机生成的用户名、密码和某些固定设置的主机和端口,如果您使用 stackato 登录到您的 stackato 实例ssh 并运行“env”命令,您可能会看到用于连接到由 stackato 创建的 mongodb 服务的确切 URI。数据库名称很可能是“db”,并且由于您尝试连接到“componentlist”,因此您将遇到授权失败。

    如果您将数据库名称更改为“db”,它可能会起作用。我试图弄清楚如何在我的 stackato.yml 文件中将数据库名称设置为更具体的名称。

    【讨论】:

      猜你喜欢
      • 2015-02-14
      • 2017-03-15
      • 2020-03-13
      • 1970-01-01
      • 2019-02-20
      • 2019-07-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-02
      相关资源
      最近更新 更多