Nice programing

"@"가있는 MongoDB 비밀번호

nicepro 2020. 10. 23. 18:57
반응형

"@"가있는 MongoDB 비밀번호


Node.js에서 Mongoose를 사용하여 사용자 이름과 비밀번호로 MongoDB 데이터베이스에 연결하려고합니다. 모든 문서는 연결 문자열이 다음과 같아야한다고 말합니다.

  mongodb://username:password@host:port/db

그러나 암호에는 '@'문자가 포함되어 있습니다. 몽구스가 이해할 수있는 연결 문자열을 어떻게 만들 수 있습니까? 비밀번호에서 '@'를 이스케이프 할 수 있습니까? 아니면 다른 연결 방법을 사용해야합니까?


다음 구문을 사용하십시오.

mongoClient.connect("mongodb://username:p%40ssword@host:port/dbname?authSource=admin", { 
        useNewUrlParser: true
    }, function(err, db) {

    }
);

비밀번호에 특수 문자가있는 경우 :

const dbUrl = `mongodb://adminUsername:${encodeURIComponent('adminPassword')}@localhost:27017/mydb`;

URL 문자열에 비밀번호를 포함하는 대신 호출 options매개 변수 mongoose.connect를 사용하여 비밀번호를 지정하십시오.

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pass: 'p@ssword'},
                 callback);

나는 또한 같은 문제에 직면했습니다. 인코딩 된 암호를 연결 문자열에 추가하여 해결했습니다. 그리고 그것은 잘 작동합니다.

(1) https://www.url-encode-decode.com 에서 비밀번호를 인코딩합니다.
(2) 비밀번호를 인코딩 된 비밀번호로 바꿉니다.
(3) 잘 작동합니다.

예 :
실제 암호 : ABCDEX $ KrrpvDzRTy` @ drf. '; 3X
인코딩 된 암호 : ABCDEX % 24KrrpvDzRTy % 60 % 40drf. % 27 % 3B3X

mongodb : // user1 : ABCDEX%24KprpvDzRTy%60%40drf.%27%3B3X@dstest.com : 1234, ds1234-test.com : 19889 / mongo-dev? replicaSet = rs-ds123546978 & ssl = true ',


대신 pwd를 사용하여 버전 3.2에서 나를 위해 일했습니다.

mongoose.connect('mongodb://localhost/test',
                 {user: 'username', pwd: 'p@ssword'},
                 callback);

내 친구, 이것을 시도하십시오.

    mongoose.connect("mongodb://localhost:27017/test?authSource=admin",
                     {user: 'viettd', pass: 'abc@123'});

test내 db 이름
admin은 내 인증 용 db
viettd는 내 사용자 이름
abc@123은 내 암호


위에서 언급 한 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 더 자세히 조사한 결과 useNewUrlParser 매개 변수를 포함해야한다는 것을 알았습니다.

mongoose.connect(db, {
    useNewUrlParser : true
    },
    err => {
    if (err){
        console.error('Error: ' + err)
    }
    else{
        console.log('Connected to MongoDb')
    }
})

내가 이해 한 바에 따르면 이것을 사용하려면 특정 버전의 MongoDB가 필요합니다. 자세한 내용 은 useNewUrlParser를 true로 설정하여 "현재 URL 문자열 구문 분석기가 사용되지 않음"경고 방지를 확인 하십시오.

경고를 제거하는 것이지만 버전은 필수 매개 변수에도 영향을줍니다.

모든 특수 문자를 테스트하지는 않았지만 확실히 '@ # $'와 함께 작동합니다.

도움이 되었기를 바랍니다.


Mongodb 네이티브 Node.js 드라이버를 사용하는 경우 3.1 드라이버 버전에서 이것이 작동합니다. URL에 인증 정보가 포함되어 있지 않다고 가정합니다.

MongoClient = require('mongodb').MongoClient;
let options = {
    useNewUrlParser: true,
    auth: {
        user: 'your_usr',
        password: 'your_pwd'
    }
};
MongoClient.connect(url, options, callback);

또는 URL에 인증 정보를 포함하려면 다음과 같이하십시오.

let url = "mongodb://username:" + encodeURIComponent("p@ssword") + "@localhost:27017/database"

연결 문자열로만 문자열을 받아들이는 다른 도구사용하여 DB에 연결해야하는 경우가 있습니다 . 따라서 @ 기호를 % 40으로 변경하십시오.


Also, if your password contains a percentage, %, 
 Because the percent ("%") character serves as the indicator for percent-encoded octets, it must be percent-encoded as "%25" for that octet to be used as data within a URI

for example, if your password is John%Doe, the new transformed password will be John%25Doe or
If password is Paul%20Wait, New Password will be Paul%2520Wait

mongoClient.connect("mongodb://username:John%25Doe@host:port/dbname", function(err, db) {
// password is John%Doe
    }`enter code here`
);

이 솔루션에는 추가 종속성이 필요하지만 마침내 저에게 효과적이었습니다.

mongodb-uri프로젝트에 추가 하고 코드에 다음 줄을 추가합니다.

const mongoose = require('mongoose')
const mongodbUri = require('mongodb-uri')
let mongooseUri = mongodbUri.formatMongoose(config.mongo.uri)
mongoose.connect(mongooseUri, config.mongo.options)

이 제안은 mongooseGitHub 문제 # 6044 에서 발견되었습니다 .


Mongo Compass로 연결하는 경우 ( MacOSx ) mongodb.com에서 클러스터 -> 보안 (Tab)으로 이동하십시오.

클러스터 보안

그때

비밀번호 수정 (사용자 이름의 수정 버튼 누르기) :여기에 이미지 설명 입력

모달 / 팝업 / 대화 상자가 표시됩니다 : 이름 아래에있는 비밀번호 편집을 누르십시오 (버튼은 기본적으로 회색으로 표시되지만 이름 바로 아래에 나타납니다)-> 그런 다음 사용자 업데이트를 누르 십시오.

대화 상자 팝업의 EditPassword

다음 :

실행중인 경우 mongo db 나침반 응용 프로그램을 닫습니다. (Mongo 종료)

Mongo Compass 종료

다음 단계:

mongodb.com.의 개요 탭으로 돌아가 연결을 선택 합니다.

OverView로 돌아 가기 : 개요로 돌아가서 연결을 선택하십시오.

다음 단계:

팝업 대화 상자에서 MongoDB Compass와 연결을 선택한 다음 다음보기에서 사용할 버전을 선택합니다 (바람직하게는 VersionNumber 이전 ).MongoDB Compass와 연결

버전 선택

그때:

제공된 URI 문자열을 복사 하십시오 .

Uri 문자열 복사

MongoDB Compass 애플리케이션을 다시 엽니 다.

그리고 그것은 당신에게 옵션을 /를 URI 문자열을 사용하는 팝업 감지를 줄 것이다 : 클릭 URI 문자열 감지

마지막 단계:

새 암호를 입력하고 연결합니다 . 이제 연결이 성공할 것입니다.새 비밀번호를 입력하고 연결

참고 URL : https://stackoverflow.com/questions/7486623/mongodb-password-with-in-it

반응형