mongodb 연결 URI에서 인증 데이터베이스와 대상 데이터베이스를 별도로 지정하는 방법은 무엇입니까?


13

monurib에 연결하기 위해이 연결 URI를 사용하고 mongodb://user:password@localhost/admin있습니다. admin봇 인증 및 대상 데이터베이스로 사용 됩니다. uri를 admin인증 으로 사용 하지만 다른 데이터베이스에 연결할 수있게하려면 어떻게해야합니까? 예를 들어 아래 명령을 참조하십시오.

mongo --host localhost -u user -p password --authentication admin test

위의 명령은 인증 admin데이터베이스로 사용되지만 데이터베이스에 연결 test됩니다. uri에서 어떻게 똑같은 일을 할 수 있습니까?

답변:


26

예 .. 쉽게!

mongo "mongodb://test:testpwd@localhost/test?authSource=admin"
MongoDB shell version v3.4.6
connecting to: mongodb://test:testpwd@localhost/test?authSource=admin
MongoDB server version: 3.4.6
MongoDB> db
test
MongoDB> 

대상 DB를 "기본"문자열의 끝에두고 매개 변수 authSource에 인증 DB를 추가합니다.


그렇습니다, 이것은 내가 찾고있는 것입니다. 감사합니다
Joey Yi Zhao

4

참조 :

https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options

아래 형식을 사용해야하며 관리자 데이터베이스를 사용할 필요가 없습니다.

mongodb : // user : password @ localhost / test? authSource = admin

/ database 선택 사항. 연결 문자열에 username : password @ 형식의 인증 자격 증명이 포함 된 경우 인증 할 데이터베이스의 이름입니다. / database를 지정하지 않고 연결 문자열에 자격 증명이 포함 된 경우 드라이버는 관리 데이터베이스를 인증합니다.

test데이터베이스에 사용자가 있는지 확인하십시오 . 이 문서의 섹션 6을 참조하십시오.

인증 사용

배치에 필요한 추가 사용자를 작성하십시오.

사용자를 작성하는 데이터베이스 (이 예제에서 테스트)는 해당 사용자의 인증 데이터베이스입니다. 사용자는이 데이터베이스를 인증하지만 다른 데이터베이스에서 역할을 가질 수 있습니다. 즉, 사용자의 인증 데이터베이스는 사용자의 권한을 제한하지 않습니다.

use test
db.createUser(
  {
    user: "myTester",
    pwd: "xyz123",
    roles: [ { role: "readWrite", db: "test" },
             { role: "read", db: "reporting" } ]
  }
)

이 URI를 시도했지만 작동하지 않습니다. test올바르지 않은 인증 데이터베이스 로 사용하려고하기 때문 입니다. 내가 사용할 필요가 admin인증 데이터베이스로와 연결 test데이터베이스.
Joey Yi Zhao

수정 된 답변.
SqlWorldWide

답변 주셔서 감사합니다. 그러나 데이터베이스 인스턴스에서 사용자 역할을 변경하고 싶지 않습니다. 인스턴스를 변경하지 않는 솔루션이 있습니까?
Joey Yi Zhao

그것이 MongoDB에 의해 설계된 방식입니다.
SqlWorldWide

이것은 mongo uri가 이것을 달성 할 수 없다는 것을 의미합니까?
Joey Yi Zhao
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.