복붙노트

[MONGODB] 몽고에 인증 할 수 없습니다 "인증 실패"

MONGODB

몽고에 인증 할 수 없습니다 "인증 실패"

나는이 방향을 사용하여 몽고에 대한 관리 사용자를 만들었습니다 :

http://docs.mongodb.org/manual/tutorial/add-user-administrator/

내가 인증 할 수처럼 몽고 클라이언트에서 그것은 본다 :

> use admin
switched to db admin
> db.auth('admin','SECRETPASSWORD');
1
>

그러나 나는 다른 방법으로 연결할 수 없습니다. 예를 들면 :

오류를 제공합니다 :

JavaScript execution failed: Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" } at src/mongo/shell/db.js:L228

나는 인증이 등 / mongod.conf에서 진정한 =이있다.

나는 무엇을 놓치고?

해결법

  1. ==============================

    1.인증은 데이터베이스 수준에서 관리됩니다. 데이터베이스를 사용하여 시스템에 연결하려고하면 실제로 컬렉션 <데이터베이스> .system.users에서 제공하는 자격 증명을 확인 몽고. 그래서, 당신은 "테스트"에 연결하려고 기본적으로 할 때, 그것은 test.system.users의 자격 증명을보고 (그들이 admin.system.users에 저장되어있는 바와 같이) 그들을 찾을 수 없기 때문에 오류를 반환합니다. 모든 DB에서 읽을 수있는 권리와 쓰기를 갖는 것은 당신이 직접 연결할 수 있습니다 의미하지 않는다.

    인증은 데이터베이스 수준에서 관리됩니다. 데이터베이스를 사용하여 시스템에 연결하려고하면 실제로 컬렉션 <데이터베이스> .system.users에서 제공하는 자격 증명을 확인 몽고. 그래서, 당신은 "테스트"에 연결하려고 기본적으로 할 때, 그것은 test.system.users의 자격 증명을보고 (그들이 admin.system.users에 저장되어있는 바와 같이) 그들을 찾을 수 없기 때문에 오류를 반환합니다. 모든 DB에서 읽을 수있는 권리와 쓰기를 갖는 것은 당신이 직접 연결할 수 있습니다 의미하지 않는다.

    먼저 자격 증명을 잡고 데이터베이스에 연결해야합니다. 시험:

    mongo admin -u admin -p SECRETPASSWORD
    

    더 많은 정보를 원하시면,이를 확인 http://docs.mongodb.org/manual/reference/privilege-documents/

  2. ==============================

    2.나는 또한 사용자 인증 데이터가 저장된 데이터베이스를 지정하는 것이었다 필요로했던이 오류를 수신 :

    나는 또한 사용자 인증 데이터가 저장된 데이터베이스를 지정하는 것이었다 필요로했던이 오류를 수신 :

    업데이트 2017년 11월 18일 :

    mongo admin -u admin -p
    

    더 나은 솔루션입니다. 몽고, 당신의 암호를 그냥 끔찍한 보안 방법입니다 쉘의 역사로 일반 텍스트 암호를 설정하지 않습니다 이런 식으로 메시지를 표시합니다.

  3. ==============================

    3.당신은 당신의 몽고 쉘을 업그레이드해야합니다. 나는 로컬 몽고 쉘의 버전 2.4.9을했고, 나는 몽고 3 데이터베이스에 연결하려고이 오류가 발생했습니다. 3 쉘 버전을 업그레이드 문제를 해결했다.

    당신은 당신의 몽고 쉘을 업그레이드해야합니다. 나는 로컬 몽고 쉘의 버전 2.4.9을했고, 나는 몽고 3 데이터베이스에 연결하려고이 오류가 발생했습니다. 3 쉘 버전을 업그레이드 문제를 해결했다.

  4. ==============================

    4.나는이 명백한 것처럼 보일 수 있습니다 알고 있지만 나는 또한이 일을하기 전에 W / U 자 / N과 P의 주위에 작은 따옴표를 사용했다

    나는이 명백한 것처럼 보일 수 있습니다 알고 있지만 나는 또한이 일을하기 전에 W / U 자 / N과 P의 주위에 작은 따옴표를 사용했다

  5. ==============================

    5.MongoDB를 3.0, 지금은 다중 인증 메커니즘을 지원합니다.

    MongoDB를 3.0, 지금은 다중 인증 메커니즘을 지원합니다.

    사용자가 만든 새로운 사용자와 새로운 3.0 데이터베이스를 시작한 경우, 그들은 스크 램-SHA-1을 사용하여 생성 된 것이다.

    그래서 당신은 그 인증 할 수있는 드라이버가 필요합니다 :

    http://docs.mongodb.org/manual/release-notes/3.0-scram/#considerations-scram-sha-1-drivers

    당신이 데이터베이스가 기존 사용자 데이터와 2.X에서 업그레이드했다면, 그들은 여전히 ​​MongoDB를-CR을 사용하는 것, 사용자 인증 데이터베이스를 업그레이드해야 할 것이다 :

    http://docs.mongodb.org/manual/release-notes/3.0-scram/#upgrade-mongodb-cr-to-scram

    이제 달아나-SHA-1을 작성한 사용자와 접속하여 MongoDB 3.0 (커맨드 라인을 통해 몽고 클라이언트) 인증 데이터베이스를 지정해야하고, 드라이버를 사용하는 경우에, 다른 메커니즘을 사용한다.

    $> 몽고 -u 사용자 -p PASSWORD --authenticationDatabase 관리

    이 경우,도하다 "관리자"데이터베이스는 기본적으로 인증하는 데 사용됩니다.

  6. ==============================

    6.문제가 몽고의 문서에 기술 된 방법을 통해 생성 된 사용자가 해당 사용자가 "userAdminAnyDatabase"와 "dbAdminAnyDatabase"역할로 생성 된 경우에도 기본 데이터베이스 (테스트)에 연결할 수있는 권한이 없다는 것입니다 나타납니다.

    문제가 몽고의 문서에 기술 된 방법을 통해 생성 된 사용자가 해당 사용자가 "userAdminAnyDatabase"와 "dbAdminAnyDatabase"역할로 생성 된 경우에도 기본 데이터베이스 (테스트)에 연결할 수있는 권한이 없다는 것입니다 나타납니다.

  7. ==============================

    7.터미널 쉘 및 유형 몽고로 이동합니다.

    터미널 쉘 및 유형 몽고로 이동합니다.

    그런 다음 사용 DB_NAME을 입력합니다.

    그런 다음 입력 :

     db.createUser(
       {
         user: "mongodb",
         pwd: "dogmeatsubparflavour1337",
         roles: [ { role: "dbOwner", db: "db_name" } ]
       }
     )
    

    또한 시도 : db.getUsers을 ()

    const MongoClient = require('mongodb').MongoClient;
    
    // MongoDB Connection Info
    const url = 'mongodb://mongodb:dogmeatsubparflavour1337@stackoverflow.com:27017/?authMechanism=DEFAULT&authSource=db_name';
    // Additional options: https://docs.mongodb.com/manual/reference/connection-string/#connection-string-options
    
    // Use Connect Method to connect to the Server
    MongoClient.connect(url)
      .then((db) => {
        console.log(db);
        console.log('Casually connected correctly to server.');
        // Be careful with db.close() when working asynchronously
        db.close();
      })
      .catch((error) => {
        console.log(error);
      });
    
  8. ==============================

    8.이것은 특정 케이스의 종류이지만, 경우에 사람이 내 문제를 여기에 가져옵니다

    이것은 특정 케이스의 종류이지만, 경우에 사람이 내 문제를 여기에 가져옵니다

    MongoHQ에서, 그것은 당신에게 "비밀 번호"라는 필드를 보여주지,하지만 실제로 암호의 단지 해시입니다. 새 사용자를 추가하고 (MongoHQ가 광고를 표시하지 않습니다 때문에) 다른 암호를 저장해야합니다.

  9. ==============================

    9.몽고 쉘에 로그인하는 적절한 방법은

    몽고 쉘에 로그인하는 적절한 방법은

    몽고는 로컬 호스트 : 27,017 -u 'uuuuu'-p '> XXXXXX'--authenticationDatabase DBNAME

  10. ==============================

    10.또 다른 가능성 : 당신이 사용자를 생성 할 때, 당신은 실수로 당신이 원하는 것보다 관리자 이외의, 또는 다른 데이터베이스를 useing되었을 수 있습니다. 당신은 사용자가 실제로에서 만들어 졌는지 데이터베이스에 --authenticationDatabase를 설정해야합니다.

    또 다른 가능성 : 당신이 사용자를 생성 할 때, 당신은 실수로 당신이 원하는 것보다 관리자 이외의, 또는 다른 데이터베이스를 useing되었을 수 있습니다. 당신은 사용자가 실제로에서 만들어 졌는지 데이터베이스에 --authenticationDatabase를 설정해야합니다.

    MongoDB를 사용하면 쉘을 열 때 당신은 당신이 (db.createUser을 실행했을 때 실수로 테스트를 useing 있다면 --authenticationDatabase 시험보다는 --authenticationDatabase 관리자를 작성해야 것 때문에, 기본적으로 테스트 데이터베이스에 넣을 것 같다 ... ).

    당신은 MongoDB의 인스턴스를 실행중인 컴퓨터에 액세스 할 수있는 가정, y를 누른 후 (보안 아래에 중첩되어 인증 밖으로 코멘트) 및 /etc/mongod.conf에서 해제 권한은 서버를 다시 시작한 다음 실행할 수 있습니다 :

    mongo
    show users
    

    그리고 당신이 뭔가를 얻을 수 있습니다 :

    {
        "_id" : "test.myusername",
        "user" : "myusername",
        "db" : "test",
        "roles" : [
            {
                "role" : "dbOwner",
                "db" : "mydatabasename"
            }
        ],
        "mechanisms" : [
            "SCRAM-SHA-1",
            "SCRAM-SHA-256"
        ]
    }
    

    dB 값이 테스트를 동일 공지 사항. 나는 사용자를 만들 때, 처음 사용하는 관리자 또는 사용 desiredDatabaseName을 실행하지 않았기 때문에의 그. 당신은 db.dropUser와 사용자 ( "MyUserName 에다")를 삭제하고 다음과 같이 원하는 데이터베이스에서 다른 사용자를 생성 할 수 있습니다 :

    use desiredDatabaseName
    db.createUser(...)
    

    희망이이 물건 멍청한 놈으로 내 위치에 있던 사람을 도움이됩니다.

  11. ==============================

    11.당신이 시도 할 수 있습니다 : -

    당신이 시도 할 수 있습니다 : -

    mongo localhost:27017/admin -u admin -p SECRETPASSWORD
    

    이 게시물에 발견

    여기에 분명히 로컬 호스트는 다른 호스트가 될 수 있고, / 관리자 인증이 적용된 일부 다른 데이터베이스가 될 수

  12. ==============================

    12.우리는 서버를 몽고에 연결되는 곳에서 클라이언트의 몽고 버전을 확인합니다.

    우리는 서버를 몽고에 연결되는 곳에서 클라이언트의 몽고 버전을 확인합니다.

    내 경우는 몽고 서버 버전 Mongo4.0.0이었다 그러나 나의 클라이언트는 버전 2.4.9이었다. 몽고 CLI를 업데이트 할 몽고 버전을 업데이트합니다.

  13. from https://stackoverflow.com/questions/18216712/cannot-authenticate-into-mongo-auth-fails by cc-by-sa and MIT license