programing

mongo에 인증할 수 없습니다. "auth failures"

shortcode 2023. 3. 5. 21:48
반응형

mongo에 인증할 수 없습니다. "auth failures"

다음 명령을 사용하여 mongo 관리 사용자를 만들었습니다.

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

mongo 클라이언트에서 인증할 수 있을 것 같습니다.

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

하지만 다른 방법은 연결할 수 없습니다.예를 들어 다음과 같습니다.

mongo - u admin -p SECRET PASSWORD

에러가 표시됩니다.

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

있다auth = trueetc/mongod.conf.

제가 무엇을 빠뜨리고 있나요?

인증은 데이터베이스 수준에서 관리됩니다.합니다.<database>.system.users으로 " "test"에서 test.system.users는 에러에 ).admin.system.users). 쓸 수 직접 수 것은 모든 DB에서 읽고 쓸 수 있는 권한이 있다고 해서 직접 연결할 수 있는 것은 아닙니다.

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

mongo admin -u admin -p SECRETPASSWORD

상세한 것에 대하여는, http://docs.mongodb.org/manual/reference/privilege-documents/ 를 참조해 주세요.

또, 다음의 에러가 발생했습니다.필요한 것은, 사용자 인증 데이터가 격납되어 있는 데이터베이스를 지정하는 것이었습니다.

mongo - u admin -p SECRET PASSWORD --authenticationDatabase admin

2017년 11월 18일 갱신:

mongo admin -u admin -p

더 나은 해결책입니다.Mongo가 비밀번호를 입력하도록 지시할 것입니다.이렇게 하면 클리어 텍스트 비밀번호를 셸 이력에 입력하지 않게 됩니다.이것은 끔찍한 보안 관행일 뿐입니다.

mongo 쉘을 업그레이드해야 할 수 있습니다.버전 2.4.9의 mongo 셸을 로컬로 사용하고 있었는데 mongo 3 데이터베이스에 접속하려고 하면 오류가 발생하였습니다.셸 버전을 3으로 업그레이드하면 문제가 해결되었습니다.

당연한 것처럼 보일 수도 있지만, 작동하기 전에 u/n과 p/w 주위에 하나의 인용문을 사용해야만 했습니다.

mongo admin - u 'user' -p 'password'

MongoDB 3.0에서는 여러 인증 메커니즘을 지원합니다.

  1. MongoDB Challenge and Response(SCRAM-SHA-1) - 3.0 디폴트
  2. MongoDB Challenge and Response (MONGODB-CR) - 이전 기본값(< 3.0)

신규 사용자가 생성된 새로운 3.0 데이터베이스로 시작할 경우 SCRAM-SHA-1을 사용하여 작성됩니다.

이 때문에, 그 인증을 실시할 수 있는 드라이버가 필요합니다.

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

기존 사용자 데이터를 사용하여 2.x에서 데이터베이스를 업그레이드한 경우에도 MONGODB-CR은 계속 사용되므로 사용자 인증 데이터베이스를 업그레이드해야 합니다.

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

SCRAM-SHA-1로 작성된 사용자와 MongoDB 3.0에 접속하여 인증 데이터베이스를 지정(커맨드라인 mongo 클라이언트 경유)하고 드라이버를 사용하는 경우 다른 메커니즘을 사용해야 합니다.

$> mongo - u USER - p PASSWORD -- authentication Database admin

이 경우 "admin" 데이터베이스가 인증에 사용됩니다.이 데이터베이스도 기본값입니다.

이것으로 문제가 해결되었습니다.

터미널 쉘로 이동하여 입력mongo.

그런 다음 입력합니다.use 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);
  });

문제는 mongo documents에서 설명한 방법으로 작성된 사용자에게 기본 데이터베이스(테스트)에 접속할 권한이 없다는 것입니다.이 사용자는 "userAdminAnyDatabase" 및 "dbAdminAnyDatabase" 역할로 작성되어 있어도 마찬가지입니다.

또 다른 가능성:사용자를 생성했을 때 실수로 인해use다른 데이터베이스 입력admin아니면 당신이 원하는 것 말고도.설정해야 합니다.--authenticationDatabase사용자가 실제로 생성된 데이터베이스로 이동합니다.

mongodb당신을 곤경에 빠뜨린 것 같다test셸을 열 때 기본적으로 데이터베이스를 사용하기 때문에--authenticationDatabase test보다는--authenticationDatabase admin만약 당신이 우연히use입력test네가 뛰었을 때db.createUser(...).

mongodb 인스턴스를 실행하고 있는 머신에 액세스 할 수 있다고 가정하면, y는 에서 인가를 무효로 할 수 있습니다./etc/mongod.conf(삭제하다authorization보안에 의해 중첩됩니다).그리고 서버를 재시작한 후 다음 작업을 수행합니다.

mongo
show users

다음과 같은 결과를 얻을 수 있습니다.

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

주의:db값이 같다test그 이유는 사용자를 만들 때 처음 실행하지 않았기 때문입니다.use admin또는use desiredDatabaseName.이렇게 하면사용자를삭제할수있습니다.db.dropUser("myusername")원하는 데이터베이스 아래에 다음과 같이 다른 사용자를 작성합니다.

use desiredDatabaseName
db.createUser(...)

내 입장이었던 누군가가 도움이 됐으면 좋겠다.

이것도 시도해 보세요:-

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

투고에서 찾았습니다.

여기서 localhost는 다른 호스트일 수도 있고 /admin은 인증이 적용된 다른 데이터베이스일 수도 있습니다.

이건 특정 케이스지만 누군가 내 문제를 가지고 올 경우를 대비해서:

MongoHQ에서는 "password"라는 필드가 표시되지만 실제로는 비밀번호 해시일 뿐입니다.새 사용자를 추가하고 암호를 다른 곳에 저장해야 합니다(Mongo가본사에서 보여주지 않습니다.)

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

mongo localhost: 27017 - u 'uuuuu' - p '> xxxxx' -- authentication Database dbname

mongo admin -u root -p root

mongorestore -u root  --authenticationDatabase admin --db rtp_new mongo

mongo 서버에 접속하고 있는 클라이언트의 mongo 버전을 확인합니다.

제 경우 mongo 서버는 Mongo 4.0.0 버전인데 제 클라이언트는 2.4.9 버전입니다.mongo 버전을 업데이트하여 mongo CLI를 업데이트합니다.

는, 이 에러에 각를 떼어내는 에 발생하고 .<password>mongoURI가 있습니다.그것들을 제거하는 것은 마법처럼 효과가 있었다.

언급URL : https://stackoverflow.com/questions/18216712/cannot-authenticate-into-mongo-auth-fails

반응형