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

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

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

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



답변

예 .. 쉽게!

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를 추가합니다.


답변

참조 :

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" } ]
  }
)

답변