05-03 07:38
Notice
Recent Posts
Recent Comments
관리 메뉴

Scientific Computing & Data Science

[MongoDB] Replication / Replication with Authentication 본문

Data Science/MongoDB

[MongoDB] Replication / Replication with Authentication

cinema4dr12 2014. 4. 10. 15:36

by Geol Choi | 

MongoDB에서 인증을 통해 마스터와 슬레이브 노드 간 복제를 하고자 할 경우에는 슬레이브 노드가 마스터 노드의 데이터에 접근할 수 있는 권한을 설정할 수 있는 방법이 있다.

접근을 하고자 하는 마스터 노드의 db에 username과 password를 지정하여 user를 추가하고 슬레이브 노드에도 동일한 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에 대하여 다루도록 하겠다.

'Data Science > MongoDB' 카테고리의 다른 글

[MongoDB] Sharding / Shard Keys  (0) 2014.04.13
[MongoDB] Sharding / Introduction  (0) 2014.04.13
[MongoDB] Replication / Replication State & Local DB  (0) 2014.04.09
[MongoDB] Replication / Sync  (0) 2014.04.09
[MongoDB] Replication / Oplog  (0) 2014.04.06
Comments