Dev Log

MongoDB 사용시, 인증 기능 설정하기

DevHyo 2021. 8. 3. 20:56

MongoDB를 사용하여 간단한 프로젝트를 진행하는 도중, MongoDB 인증을 설정하는 방법에 대해서 정리해봤습니다. (Docker 기반의 내용을 다루고 있습니다.)

docker-compose를 통한 Mongo 컨테이너 실행

docker-compose.yml는 아래와 같은 내용들로 정의되어 있습니다.

version: '3.3'

services:
  my-mongo:
    image: mongo
    container_name: my-mongo
    ports:
      - "27017:27017"
    # Authentication를 설정하기 위해서, command: [--auth]를 주석 처리해야한다. 나머지 내용은 따로 정리하고 링크를 달 것!
    # command: [--auth]
    restart: always
    networks:
      - my-mongo_net

networks:
  my-mongo_net:
    driver: bridge

docker-compose.yml 정의된 내용을 기반으로 컨테이너를 실행합니다.

$ docker-compose up -d

Docker 기반의 Mongo 컨테이너가 실행되면, 인증을 위한 사용자들 등록

  • 저는 DataGrip을 사용해서 접속했습니다.

console 창을 열어서 아래와 같은 명령어를 수행합니다.

use admin; # admin DB 선택
// Root 계정 등록
db.createUser({
    user: "root",
    pwd: "1234",
    roles: ["root"]
});
use test_db; # 사용자를 등록할 DB를 선택한다.
// test_db의 readWrite만 수행할 수 있는 사용자 등록
db.createUser({
    user: "test",
    pwd: "1234",
    roles: ["readWrite"]
});

현재 사용중인 모든 Connection을 반드시 닫아야 합니다.


스크린샷 2021-08-03 오후 8 59 33

docker-compose.yml를 다시 수정

command 에 --auth로 되어 있는 부분을 주석 해제합니다.

version: '3.3'

services:
  my-mongo:
    image: mongo
    container_name: my-mongo
    ports:
      - "27017:27017"
    # Authentication를 설정하기 위해서, command: [--auth]을 주석 해제! 
    command: [--auth]
    restart: always
    networks:
      - my-mongo_net

networks:
  my-mongo_net:
    driver: bridge

그리고 나서, Mongo 컨테이너를 다시 실행합니다.

$ docker-compose up -d

MongoDB에 인증이 설정이 잘 되었는지 확인

docker 컨테이너 안으로 접속합니다.

$ docker exec -it my-mongo bash

아래의 명령어를 입력하여, MongoDB 접속합니다.

# admin DB 접속
root@a7c0a5eafcfc:/# mongo -u root -p 1234 --authenticationDatabase admin
# test DB 접속
root@a7c0a5eafcfc:/# mongo -u test -p 1234 --authenticationDatabase test_db

접속이 잘 되었다면, 아래의 명령어를 통해 db 목록들을 확인할 수 있습니다.

----- MongoDB 접속 -----
> show dbs;

마지막으로 인증 과정 없이 접속하게 되면, DB 목록들을 볼 수 없습니다.

root@a7c0a5eafcfc:/# mongo
----- MongoDB 접속 -----
> show dbs;

참고