39. MongoDB Replication Part 9. - Replication with Authentication
MongoDB에서 인증을 통해 master와 slave 노드 간 복제를 하고자 할 경우에는 slave 노드가 master 노드의 데이터에 접근할 수 있는 권한을 설정할 수 있는 방법이 있습니다.
접근을 하고자 하는 master 노드의 db에 username과
password를
지정하여 user를
추가하고 slave 노드에도 동일한 username
과 password
를 갖는 user
를 추가합니다.
user
를 추가하는 방법은 createUser()
메써드를 사용하는 것입니다. 예를 들어, test
라는 db
에 다음과 같이 user
를 추가해 보도록 하겠습니다:
> use test
switched to db test
> db.createUser(
... {
... user: "cinema4d",
... pwd: "12345",
... roles: [ ]
... }
... )
Successfully added user: { "user" : "cinema4d", "roles" : [ ] }
user
추가에 성공하면 위와 같이 Successfully added user: {...}
라는 메시지가 출력됩니다.
그러면 현재 db
(test)에 user
가 어떻게 기록되어 있는지 살펴보기 위해 다음과 같이 입력해 보도록 하겠습니다:
> db.getCollectionNames()
[ ]
어떻게 된 일인지 db
의 내용이 비어있습니다다. 다음과 같이 입력했더니,
> show dbs
admin 0.078GB
local 0.328GB
test (empty)
test db
는 비어있는 것으로 나옵니다. 그러면 과연 user
는 어느 db
에 저장될까요? user
는 admin db
에 통합으로 저장되고 관리됩니다.
다음과 같이 입력하여 저장된 user
의 정보를 확인해 보도록 하겠습니다:
> use admin
switched to db admin
> db.getCollectionNames()
[ "system.indexes", "system.users", "system.version" ]
> db.system.users.find().pretty()
{
"_id" : "test.cinema4d",
"user" : "cinema4d",
"db" : "test",
"credentials" : {
"MONGODB-CR" : "ba6dbf8d9b4a23d806cd25700dd9f891"
},
"roles" : [ ]
}
위에서 보는 바와 같이, user
는 admin db
의 system.users
컬렉션에 저장되어 있습니다.
단, _id
를 살펴보면 이 user
가 어느 db
에 할당되어 있는지 알 수 있습니다.
- 참고: MongoDB 버전 2.6부터
addUser()
메써드는 사라지고, 대신createUser()
메써드를 사용하도록 하고 있으니, 버전에 따른 혼동이 없길 바랍니다.
필드 | 타입 | 설명 |
---|---|---|
user | 문자열 | 새 user의 이름. |
pwd | 문자열 | user의 password. |
customData | 도큐먼트 | 옵션. 임의의 정보. |
roles | 배열 | user의 역할. |
새로운 user
추가 시, 역할(Role)을 추가하는 예는 다음과 같습니다:
> use test2
switched to db test2
> db.createUser(
... {
... user: "gchoi",
... pwd: "0123",
... roles: [ "readWrite", "dbAdmin" ]
... }
... )
Successfully added user: { "user" : "gchoi", "roles" : [ "readWrite", "dbAdmin" ] }
> use admin
switched to db admin
> db.getCollectionNames()
[ "system.indexes", "system.users", "system.version" ]
> db.system.users.find().pretty()
{
"_id" : "test.cinema4d",
"user" : "cinema4d",
"db" : "test",
"credentials" : {
"MONGODB-CR" : "ba6dbf8d9b4a23d806cd25700dd9f891"
},
"roles" : [ ]
}
{
"_id" : "test2.gchoi",
"user" : "gchoi",
"db" : "test2",
"credentials" : {
"MONGODB-CR" : "ceddf25b1d6234e46546d6714ff6a94e"
},
"roles" : [
{
"role" : "readWrite",
"db" : "test2"
},
{
"role" : "dbAdmin",
"db" : "test2"
}
]
}
이로써 Replication에 대한 내용을 마무리하고, 다음 글부터는 Sharding에 대하여 다루도록 하겠습니다.