티스토리 뷰



Mysql / MariaDB 에 익숙한 분들은 다소 어색할수 있는 MongoDB 에서 Authorization 기능을 사용하는 방법입니다.


MongoDB 의 설치방법은 아래를 참고하시기 바랍니다.

2015/10/05 - [Database/MongoDB] - Ubuntu 에서 MongoDB 3.0 설치방법



우선 간단히 RDBMS 와 다른점을 알려 드리면 RDBMS 는 설치와 동시에 root 패스워드를 생성하고 인증 체계를 확립합니다. 하지만 MongoDB, Redis 는 root 계정을 초기에 설정하지 않습니다. 따라서 아무 인증 없이 접속이 가능합니다.


1. 사용자 관리 계정 만들기


 우선 MongoDB 가 처음 설치된 상태에서 mongo 를 이용해 접속합니다.


$ mongo


그리고 아래의 명령어로 사용자 관리 계정을 생성하도록 합니다.


use admin
db.createUser(
  {
    user: "tutorialbook_io",
    pwd: "TutoriAL231",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)


 간단히 설명드리자면 admin 이라는 DB 를 이용하여 userAdminAnyDatabase 권한을 가진 유저를 생성한 것 입니다. userAdminAnyDatabase 가 가지는 권한은 여러가지가 있지만 기본적으로 데이터베이스의 사용자 관련 권한을 부여, 수정할 수 있는 권한을 가지게 됩니다.




2. 네트워크 접속 허용 및 포트변경 보안 ( Security ) 의 Authorization 기능 사용설정


 위와 같이 사용자 설정을 끝냇다면 이제 mongodb 의 설정을 할 차례 입니다. exit 로 mongodb 를 나온 후 /etc/mongod.conf 를 수정하도록 합니다.


$ sudo vim /etc/mongod.conf


 여기서 수정 해야할 부분은 net 부분과 authorization 부분입니다.


 net 은 port 와 bindIp 를 관리 하는대  여기서 port 는 원하시는 port 로 bindIp 는 네트워크 접속을 하시는 설정에 따라서 변경하시면 됩니다. * 기본 포트를 사용하셔도 상관 없긴하지만 변경하는 것을 추천 드립니다.


# network interfaces
net:
  port: 25321
  #bindIp: 127.0.0.1


 제 경우 위와 같이 port  는 25321 그리고 bindIP 는 주석을 주었습니다. 실제 서버에서 내부 네트워크 만으로 접속을 하게 된다면 bindIp 를 걸어서 운영하시기 바랍니다. 제 경우 테스트를 위한 서버 설정이기 때문에 풀어 주었습니다.


 * bindIP 의 경우 여러개의 IP 를 , (쉼표) 와 함께 나열할 수 있습니다  ex)  bindIp:127.0.0.1, 10.0.0.2, 192.168.0.2





그리고 하단의 #security 부분의 주석을 풀어 주시고 아래와 같이 authorization 을 추가하시기 바랍니다.


security:
   authorization: enabled


authorization: enabled 를 추가할 경우 비밀번호가 없는 사용자는 접속을 할 수 없게 됩니다. 따라서 1. 사용자 관리 계정 만들기에서 생성한 계정만이 접속이 가능하게 됩니다.


아래는 mongod.conf 의 결과 입니다.



이제 저장 후 나오신 후 mongodb 를 재시작 해주시기 바랍니다.


$ service mongod restart



2. 계정 접속 후 일반 DB 사용자 계정 만들기


 이제 기본적인 준비가 되었습니다. 외부에서 접속하기 위해 DB 를 만들어 권한을 넣어줄 차례 입니다. 우선 아래의 명령어로 DB 를 접속 하도록 합니다.


mongo --port <포트> -u "<사용자 계정>" -p "<비밀번호>" --authenticationDatabase "admin"

ex)
mongo --port 25321 -u "tutorialbook_io" -p "TutoriAL231" --authenticationDatabase "admin"


 접속이 되셨다면 아래의 명령어로 DB 와 사용자 계정의 생성이 가능합니다.


use 
db.createUser({ user: "<사용자 계정>",
          pwd: "<비밀번호>",
          roles: ["dbAdmin", "readWrite"]
})

ex)
use tutorialbook_io_user
db.createUser({ user: "tutorialbook_manager",
          pwd: "tutori2341",
          roles: ["dbAdmin", "readWrite"]
})


Roles 는 사용자의 권한으로 아래의 링크를 참고하시기 바랍니다.

MongoDB Roles


 이제 외부에서 DB 로 접속을 시도해볼 차례 입니다. 혹은 내부에서 테스트 해보고 싶으신분은 위의 명령어를 수정하여 사용이 가능합니다.


mongo --port <포트> -u "<사용자 계정>" -p "<비밀번호>" --authenticationDatabase ""

ex)
mongo --port 25321 -u "tutorialbook_manager" -p "tutori2341" --authenticationDatabase "tutorialbook_io_user"


 혹은 외부 접속기를 통하여 접속을 시도해 보도록 합니다. 제 경우 MAC 에서 MongoHub 를 이용합니다.


아래는 모두 정상적으로 접속된 모습입니다.


Console 로 접속시




MAC 의 MongoHub 로 접속시




만약 MongoDB 를 URI 를 이용해 접속하게 되는 상황이 있으시다면 간단히 아래에 포멧을 적어 두겠습니다.


mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database][?options]]

ex) 
mongodb://tutorialbook_manager:tutori2341@192.168.10.2:25321/tutorialbook_io_user


참고 자료 Connection String URI Format 


즐거운 개발 되시기 바랍니다.


공유하기 링크
댓글