MongoDB 관리자 및 DB 사용자 추가 ( Docker 환경 기준 )

MongoDB 는 기본 설정값으로 시작하면 별다른 권한 설정이 없어서 모든 DB에 아무나 접속할 수 있습니다. 보안을 강화하고 DB 간의 독립적으로 작동하도록 하기 위해 사용자 인증을 통해 사용할 수 있도록 할 수 있습니다

Docker 를 이용한 관리자 추가

Docker Compose 나 Portainer 를 사용한다면 손쉽게 관리자를 지정해 MongoDB 서비스를 시작할 수 있습니다.

version: '2'

services:

  mongo:
    image: mongo
    restart: always
    environment:
        MONGO_INITDB_ROOT_USERNAME: root
        MONGO_INITDB_ROOT_PASSWORD: (최고관리자비밀번호설정)
        # 참고로 Portainer stack 으로 올리는 경우 비밀번호 첫자리가 빠지는 경우가 있다.
    ports:
        - "27017:27017"
    volumes:
            - /(mongodb 데이터를 저장할 경로):/data/db

docker-compose 를 사용한다면 위의 내용을 적당한 경로에 docker-comose.yml 로 저장하고 아래와 같이 실행하면 몽고디비 서비스를 실행할 수 있습니다.

> sudo docker-compose up -d

portainer.io 를 사용하는 경우 Stacks 에 Add stack 선택 후 위 내용을 Web editor 내용으로 넣고 Deply the stack 버튼을 누르면 됩니다.

일반적인 관리자 계정 추가

만약 docker 를 사용하지 않고 직접 사용하고 있다면 아래와 같이 먼저 인증이 없는 상태에서 관리자 계정을 추가합니다.

$ mongo 
> use admin
> db.createUser({
    user: "admin",
    pwd: "관리자비밀번호",
    roles: [{
      role: "userAdminAnyDatabase",
      db: "admin"
    }]
  })

관리자를 추가하고 나서 인증 기능을 설정파일에 허용하도록 설정합니다.

$ sudo vi /etc/mongod.conf

# 아래 부분을 추가합니다.
security:
authorization: 

mongo 서버 재시작

$ sudo systemctl restart mongod

관리자로 로그인

> mongo -u root -p --authenticationDatabase "admin"
(비밀번호 입력)

DB사용자 추가

일반적인 특정 DB 에 대해서만 접근가능한 사용자를 아래와 같이 생성합니다.

# 우선 몽고쉘이 접속합니다.

> db.createUser({
  user: "사용자아이디"
  pwd: "비밀번호"
  roles: [{
    role: "dbOwner", 
    db: "디비이름"
  }]
})

DB 사용자로 로그인

> mongo -u 사용자아이디 -p --authenticationDatabase "디비이름"
(비밀번호 입력)