본문으로 바로가기



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 


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


저작자 표시 비영리 변경 금지
신고
크리에이티브 커먼즈 라이선스
Creative Commons License

댓글을 달아 주세요

튜토리얼북
블로그 이미지 눈싹 님의 블로그
VISITOR 오늘567 / 전체517,066