2014-03-07 2 views
0

이것은 기업 프로젝트의 일부입니다. 우리 회사에서 준비한 stackato 서버에서 응용 프로그램을 호스팅하려고합니다. 내 응용 프로그램은 mongodb를 지원하는 노드 프레임 워크를 사용합니다. db 서비스에 연결하고 JSON 객체를 삽입하는 간단한 스크립트를 작성했습니다.MongoError : 삽입/쿼리에 대해 인증되지 않았습니다. stackato

MongoError: not authorized for insert on 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(); 
     }); 
    });  

}); 

터미널 수익률이 노드를 가지고있는 I가 성공적으로 데이터베이스에 있지만 삽입에 연결할 수 있어요 는 말하는 오류를 반환 mongodb가 설치되었습니다. 이들은 당신이 내가 어떤 데이터가 성공적으로 삽입되지 않았 음을 재확인하기 위해 DB를 온라인으로 확인 코드

connecting to online db and now storing data in:db, db is opened., cannot insert the object into componentlist MongoError: not authorized for insert on db.componentlist

관련 될 수 콘솔 로그 메시지의 집합입니다. 추가 승인 명령이 누락 되었습니까?

답변

1

인증을위한 서버 옵션이 확실하지 않습니다. 기본 방법은 지금과 같이 연결에 대한 MongoClient 클래스를 사용하는 것입니다

선호하지만,이 방법은 잘 documented 같이 단지의 경우, 자격 증명이 전달되는 방식에 문제가있다
var MongoClient = require("mongodb").MongoClient; 

MongoClient.connect(
    "mongodb://<user>:<pass>@<host>:<port>/<db>", function(err, db) { 

    // everything else inside your "open.db" call 

. 이는 사용자가 사용하려는 사용자 계정으로 연결하고 있는지 확인하기위한 것입니다.

그 이상으로 올바른 사용자 인 경우 오류는이 사용자에게 데이터베이스에 대한 삽입을 수행 할 수있는 권한이 없음을 나타냅니다. 따라서 사용 권한을 확인해야 할 수도 있습니다. 따라서 계정에는 readWrite 역할이 적용되어야합니다.

+0

Perfect! 고마워, Neil. – user2938718

1

죄송합니다. 매우 늦은 답변이지만 비슷한 문제가있는 다른 사용자에게 도움이 될 수 있습니다. 하지만 Stackato 환경에서 동일한 문제가 발생했습니다. 그래서 당신은 데이터베이스 이름을 "componentlist"로 설정 한 것 같습니다. 그러나 Stackato에서는 mongodb URI 대체를 할 것입니다. 종종 임의 생성 된 사용자 이름, 암호 및 특정 고정 호스트와 포트를 생성합니다. 그리고 stackato 인스턴스를 사용하여 stackato 인스턴스에 로그인하면 ssh를 실행하고 "env"명령을 실행하면 stackato에 의해 생성 된 mongodb 서비스에 연결하는 데 사용 된 정확한 URI를 볼 수 있습니다. 데이터베이스 이름은 "db"일 가능성이 높으며 "componentlist"에 연결하려고하므로 인증 실패가 발생합니다.

데이터베이스 이름을 "db"로 변경하면 작동 할 수 있습니다. 내 stackato.yml 파일에 특정 데이터베이스 이름을 설정하는 방법을 알아 내려고 노력 중입니다.

관련 문제