MongoDB의 Sharding과 ReplicaSet의 User는 각각 별개임.

admin DB의 User는 물론, 각 DB별 User도 전부 별개로 동작함.


Sharding 상태일 경우 mongos로 접속하여 생성한 User는 전체 Shard를 기준으로 동작하며,

ReplicaSet의 경우 해당 mongod로 접속하여 생성한 User는 해당 ReplicaSet 내에서만 유효함.


그러므로 보안설정을 적용하려면 ReplicaSet에도 따로 인증을 추가하는게 좋으며,

Sharding과 설정을 동일하게 하는 것이 추후 관리에 편할 것이라 생각됨.


// replica set의 root 생성

[root@localhost]# /db/mongodb/bin/mongo HOSTNAME:REPLSET_PORT

REPLSET_0001:PRIMARY> use admin

REPLSET_0001:PRIMARY> db.createUser({user:"root", pwd:"비밀번호1", roles:["root"]})


// mongos로 replica set에서 생성한 root로 접근시도

[root@localhost]# /db/mongodb/bin/mongo HOSTNAME:MONGOS_PORT

mongos> use admin

mongos> db.auth("root", "비밀번호1")

// 실패

Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 }

0


// sharding의 root 생성

[root@localhost]# /db/mongodb/bin/mongo HOSTNAME:MONGOS_PORT

mongos> use admin

mongos> db.createUser({user:"root", pwd:"비밀번호2", roles:["root"]})


// replica set에서 mongos의 root로 접근시도

[root@localhost]# /db/mongodb/bn/mongo HOSTNAME:REPLSET_PORT

REPLSET_0001:PRIMARY> use admin

REPLSET_0001:PRIMARY> db.auth("root", "비밀번호2")

Error: 18 { ok: 0.0, errmsg: "auth failed", code: 18 }

0


// 일반 User도 위와 동일한 결과







Posted by bloodguy
,