mongodb 3.0에서 구버전 클라 접속
TL;DR
admin.system.version 컬렉션의 authSchema를 3으로 낮춘다.
절차
인증 해제 후 재시작
다음과 같이 인증을 끄고 서버를 재시작. 인증 안끄면 system.version 컬렉션을 아예 건드릴 수 없다.
security: # keyFile: "/data/key/keyfile" authorization: "disabled"
스키마 버전 변경, 사용자 생성
admin.system.version 컬렉션의 authSchema 항목을 변경한 다음 사용자를 생성한다.
use admin; // Use MongoDB 2.6 auth schema (default auth mechanism: MONGODB-CR) db.system.version.save({ "_id" : "authSchema", "currentVersion" : 3 }); db.createUser( { user: "root2", pwd: "root2", roles: [ "root" ] } );
이렇게 생성된 유저는 다르게 보이게 된다.
db.system.users.find() { "_id" : "admin.root", "user" : "root", "db" : "admin", "credentials" : { "SCRAM-SHA-1" : { "iterationCount" : 10000, "salt" : "M5DcpS5ns+skpfY3zrssKA==", "storedKey" : "7Ekup4Ifxtnfi97OMR6cqov+35U=", "serverKey" : "5nIHY/RcdjTLu+4p84XLNjuRhkA=" } }, "roles" : [ { "role" : "root", "db" : "admin" } ] } { "_id" : "admin.root2", "user" : "root2", "db" : "admin", "credentials" : { "MONGODB-CR" : "359a1cb5090b2b65bc64c47ef5b38b24" }, "roles" : [ { "role" : "root", "db" : "admin" } ] }
원복
인증 안쓰고 살기는 좀 그러니까 위에서 수정한 config 변경을 원래대로 하고 인스턴스 재시작.
비고
ver 3으로 내려놓은 상태에서도 ver 5일때 생성한 사용자는 정상적으로 접속된다
샤드 클러스터 환경이라면 config db 세 대를 모두 고쳐야 적용될 것이다. 서비스를 아예 내리고 세 대를 동시에 고치지 않는다면 데이터 불일치 등이 발생할 수 있어서 작업이 좀 클 것 같은데.. 행운을 빈다
ver 5로 다시 올려보지는 않았다 (귀찮아서) createUser 명령 동작 방식에만 적용되는 거라면 상관 없겠거니..
적어도 보안 측면에서 SCRAM-SHA-1이 좋은 것은 맞다
출처
mongodb-user newsgroup, SERVER-17459















