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.