source

MongoDB-CR 인증 실패

nicesource 2023. 5. 4. 20:04
반응형

MongoDB-CR 인증 실패

사용자를 인증하는 동안 다음 오류가 발생했습니다. purchase_user@purchase 실패했습니다.MongoDB-CR 인증에 실패했습니다.브라우저를 통해 웹 서비스에 액세스할 때 사용자 문서에 자격 증명이 없습니다.

하지만 저는 mongo에서 purchase_user를 인증할 수 있습니다 1.

mongoDB 콘솔로 이동하여 현재 사용자를 삭제하고 authSchema 버전을 5 대신 3으로 설정합니다. mongo 콘솔에서 다음 명령을 따릅니다.

mongo
use admin
db.system.users.remove({})    <== removing all users
db.system.version.remove({}) <== removing current version 
db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 })

이제 mongod를 다시 시작하고 새 사용자를 생성하면 정상적으로 작동할 것입니다.

참고: 운영 환경에서 업데이트를 사용하는 경우 테스트 DB에서만 제거 명령을 사용합니다.

Kubernetes 조타 장치 차트에 대한 인증 정보

되어 있는 (또는 " " " " " "는 " " 입니다.--authKubernetes 조타 차트에서 기본값으로 설정된 param)은 더 이상 MongoDB에 액세스할 수 없습니다.인증을 사용하지 않도록 설정하고 새 사용자를 만든 다음 다시 사용하도록 설정해야 합니다.

하고 Kubernetes를 추가해야 .--noauth인수로, 고전적으로 설치된 MongoDB에서와 같이 기본값이 아니기 때문입니다.에 대한 자세한 내용은 CLI 설명서를 참조하십시오.--noauth에 상응하는 및그상하는응에▁and는▁the--auth.

같은 문제가 있었습니다.제가 MongoDB 3를 사용하여 사용자를 만들 때 MongoDB-CR 대신 SCRAM-SHA-1을 인증 메커니즘으로 사용했습니다.제가 해야 할 일은:

  1. 리스트 항목
  2. 생성된 사용자를 삭제합니다.
  3. 컬렉션 관리자를 수정합니다.authSchema의 현재 버전이 5가 아닌 3(3은 MongoDB-CR을 사용함)인 system.version.
  4. 사용자를 다시 만듭니다.

지금은 문제없이 일을 해야 합니다.

위의 2단계는 명시적으로 자세히 설명되어 있지 않습니다. 저는 이 솔루션을 찾아 저를 위해 일했습니다.

var schema = db.system.version.findOne({"_id" : "authSchema"})
schema.currentVersion = 3
db.system.version.save(schema)

이것이 당신이 필요로 하는 답이라고 생각합니다.

인증을 사용하지 않고 3.0을 시작합니다.(인증을 사용할 수 없도록 설정해야 합니다. 그렇지 않으면 인증되지 않은 오류가 표시됩니다.)

실행("admin"을 선택한 후 db 사용):

var 스키마 = db.system.version.findOne({"_id" : "authSchema"})

schema.currentVersion = 3

db.system.version.save(저장)

auth를 사용하도록 설정한 상태에서 mongodb를 다시 시작합니다.

새 관리자를 만듭니다(이전 관리자는 이 해결 방법 이전에 만든 관리자는 작동하지 않습니다).

이제 일이 잘 될 겁니다.저도 이 문제 때문에 미칠 지경이었습니다.

답변은 다음과 같습니다. https://jira.mongodb.org/browse/SERVER-17459

위의 솔루션에 Vivek에 의한 추가 및 여기서 발췌한 설명

use admin
db.system.users.remove({})    <== removing all users
db.system.version.remove({}) <== removing current version 
db.system.version.insert({ "_id" : "authSchema", "currentVersion" : 3 })
  • MONGODB-CR 사용자를 만들려면 스키마만 다운그레이드하면 됩니다.일단 드라이버가 설치되면 authSchemaVersion 값에 관계없이 이전 드라이버가 작동합니다.그러나 authSchemaUpgrade를 실행하여 "3"에서 "5"로 변경하면 사용자가 분명히 업그레이드됩니다.
  • 새 사용자에 대한 제 의견은 기존 SCRAM 사용자가 있고 수동으로 스키마를 "3"으로 변경하면 사용자 문서가 새 스키마와 일치하지 않는다는 것입니다.그러나 이는 강제 적용되지 않지만 SCRAM 사용자는 SCRAM을 지원하는 모든 드라이버에서 계속 작동합니다.

mongo-java-driver를 3.0.3으로 업그레이드하고 다음을 사용합니다.

MongoCredential.createMongoCredential 대신 CreateScramSha1Credential

MongoCredential createMongoCRcredential = MongoCredential.createScramSha1Credential(mongoConfiguration.getDatabaseUserName(), mongoConfiguration.getAuthenticationDatabase(), mongoConfiguration.getDatabasePassword().toCharArray();

http://docs.mongodb.org/master/release-notes/3.0-scram/

저는 mongo 2 클라이언트를 사용하여 mongo 3 서버에 연결하려고 했습니다.클라이언트를 업그레이드하여 문제를 해결했습니다.

저도 이 오류를 겪고 있었습니다.

Spring Config 파일을 확인합니다.저는 "MONGODB-CR"이라는 이름의 컨스트럭터 Arg를 가지고 있었는데 "SCRAM-SHA-1"로 교체하여 문제를 해결했습니다.

mongodb 로그 파일을 미행하는 것은 제가 이것을 진단하는 데 도움이 되었습니다.

  • 제거Ubuntu에서 제공하는 mongodb-client 패키지
  • 공식 MongoDB에서 제공하는 mongodb-org-shell 설치

이것은 Ubuntu에서 제공하는 비공식 mongodb 패키지가 MongoDB에서 유지 관리되지 않기 때문에 문제를 해결했습니다.항상 공식 MongoDB mongodb-org 패키지를 사용해야 합니다. 이 패키지는 최신 주요 MongoDB 릴리스와 마이너 MongoDB 릴리스로 최신 상태로 유지됩니다.

아마도 오래된 뉴스일 것이고 문제가 해결되었지만, 같은 오류에 대한 제 경험을 추가합니다.

MongoDB 3.0을 사용하는 것과 정확히 동일한 문제가 있었고 3.0 이전의 db를 사용하도록 설정된 C# 드라이버가 있었습니다.

C#에서 "MongoDB"를 사용했습니다.Driver.CreateMongoCRCredentials()""를 생성하여 OP에서 오류가 발생했습니다.

(나에게) 수정 사항은 위의 명령을 "MongoDB"로 전환하는 것이었습니다.Driver.CreateCredential()"을(를) 생성합니다.

업그레이드된 시스템에서 "이전" 사용자(3.0 이전 버전)를 사용하여 발생할 수 있습니다.그러면 사용자가 새 인증확인 메커니즘으로 업그레이드하거나 서버의 인증확인 메커니즘을 다운그레이드해야 합니다.

2018년 6월 /usr/bin에 설치된 고대 클라이언트에서 내 Mongodb 버전 3.6에 연결하려고 시도한 후 이 오류가 발생했습니다.OS 표준 디렉터리 외부의 별도 폴더에 mongo DB를 설치하여 패키지 관리자가 설치한 이전 버전과 충돌했습니다.

MongoDB 3.6에서 인증 스키마를 업데이트하는 데 어려움을 겪고 있는 사용자(승인된 답변 참조):not authorized on admin to execute command그리고.removing FeatureCompatibilityVersion document is not allowed오류, 이것이 저에게 효과가 있었습니다.

번째 오류를 해결하려면:

> db.system.version.remove({})
WriteResult({
        "writeError" : {
                "code" : 13,
                "errmsg" : "not authorized on admin to execute command { update: \"system.version\", ordered: true, lsid: { id: UUID(\"58e86006-d889-440a-bd83-ad09fcd81747\") }, $db: \"admin\" }"
        }
})

리소스 및 이 역할을 가진 사용자에 대한 모든 작업을 허용하는 사용자 지정 역할을 생성한 다음 새 사용자와 함께 관리 데이터베이스에 로그인해야 했습니다.

mongo admin

db.createUser({user: 'admin', pwd: 'mypwd', roles: ['root']})
exit

mongo admin -u admin -p

db.createRole({role: 'fullaccess', privileges: [{resource: {anyResource: true}, actions: ["anyAction"]}], roles: []})
db.createUser({user: 'superadmin', pwd: 'mypwd', roles: ['fullaccess']})
exit

mongo admin -u superadmin -p

(단순히 사용)admin을 사용하는 사용자.root역할 또는 사용 안 함security.authorizationinconfig는 나에게 작동하지 않았고 업데이트를 시도할 때 여전히 같은 오류가 발생했습니다.system.version표).

그 후에 또 다른 오류가 발생했습니다.

> db.system.version.remove({})
WriteResult({
        "nRemoved" : 0,
        "writeError" : {
                "code" : 40670,
                "errmsg" : "removing FeatureCompatibilityVersion document is not allowed"
        }
})

이 문제를 해결하려면 다음만 업데이트해야 합니다.authSchema전체 컬렉션을 제거하는 대신 문서화합니다.

(일반적으로 운영 중인 시스템 테이블에서 모든 것을 맹목적으로 제거하지 말고 항상 업데이트의 의미를 확인해야 하므로 필요한 레코드만 업데이트해야 하는 또 다른 이유입니다.)

db.system.version.update({"_id": "authSchema"}, {currentVersion: 3})

이제 이전 인증 메커니즘으로 사용자를 생성할 수 있습니다.또한 사용자가 데이터베이스가 아닌 데이터베이스에 작성되도록 먼저 데이터베이스로 전환해야 할 수도 있습니다.admin하나. 그렇지 않으면 당신은 그것을 사용해야 할 것입니다.authSource=admin매개 변수입니다.

(저는 실제로 여기 누워 있습니다 - 여전히 생성될 것입니다.admin데이터베이스, 사용mydb.myuser대신 idadmin.myuser하지만 저는 MongoDB 문서에서 사용되는 것들을 설명하는 것과 같은 방식을 사용합니다.이전 버전에서는 이러한 방식으로 실제로 작동했으며 일반적으로 내부 구현 세부 사항에 대해 신경 쓰지 않아야 합니다.)

use mydb
db.createUser({user: 'myuser', pwd: 'mypwd', roles: [{role: 'dbOwner', db: 'mydb'}]})

그리고 청소하는 도 잊지 마세요.

use admin
db.system.version.update({"_id": "authSchema"}, {currentVersion: 5})
exit

mongo admin -u admin -p

db.dropUser('superadmin')
db.dropRole('fullaccess')

다음을 유지하는 것이 좋습니다.admin사용자 - 을(를) 사용하더라도 다시 생성할 수 없습니다.security.authorization비활성화 설정.여기에 기록이 있는 것처럼 보입니다admin.system.users테이블, 설정이 더 이상 작동하지 않으며 mongo는 인증이 필요합니다.

새로운 MongoDB 3.2.8 데이터베이스를 사용하는 Spring Boot 앱에서도 동일한 오류가 발생했습니다.Java Mongo 드라이버의 최신 버전(3.2.2)으로 업그레이드한 다음 application.properties의 URI에 인증 메커니즘 매개 변수를 추가하여 다음과 같이 작동할 수 있었습니다.

spring.data.mongodb.uri=mongodb://myusername:mypassword@localhost/?authSource=admin&authMechanism=SCRAM-SHA-1
spring.data.mongodb.database=test

언급URL : https://stackoverflow.com/questions/29006887/mongodb-cr-authentication-failed

반응형