mongoDB

MongoDB – 계정 관리

  • mongod.conf
    • mongod.conf 파일은 mongodb 설정 파일입니다
    • mongoDB는 기본적으로 authorization이 활성화되어 있지 않아서 누구나 쉽게 접속할 수 있습니다
    • 접근 제어를 위해 별도의 authorization 활성화 설정을 해야합니다
    • mongod.conf 환경설정 더 알아보기
# mongod.conf file

# version 3.* 
auth=true

# version 4.* 
security:
   authorization: enabled
  • Dockerize시 계정 설정
    • Docker mongoDB 슈퍼 계정 관련 환경 변수
      • MONGO_INITDB_ROOT_USERNAME
      • MONGO_INITDB_ROOT_PASSWORD
  • Docker-Compose 작성 예시
    • 예시로 mongo-express도 함께 추가하였으나 mongo-express는 사용 시에만 참고하세요
    • mongo-express – Node.js, Express 및 Bootstrap3으로 작성된 웹 기반 MongoDB 관리 인터페이스
services:

  mongo:
    image: mongo
    restart: always
    environment:
      MONGO_INITDB_ROOT_USERNAME: root
      MONGO_INITDB_ROOT_PASSWORD: example

  mongo-express:
    image: mongo-express
    restart: always
    ports:
      - 8081:8081
    environment:
      ME_CONFIG_MONGODB_ADMINUSERNAME: root
      ME_CONFIG_MONGODB_ADMINPASSWORD: example
      ME_CONFIG_MONGODB_URL: mongodb://root:example@mongo:27017/
  • Docker Image 배포 예시
# 1. 이미지를 받아서 포트 지정 후 배포
docker run --name test-mongo -d --rm -p 27017:27017 mongo:4.2

# 2. 1번에서 DB 데이터를 볼륨 데이터로 마운트 추가
docker run --name test-mongo -d --rm -p 27017:27017 -v %cd%/db:/data/db/ mongo:4.2

# 3. 2번에서 로그 데이터 마운트, 환경설정 위치 지정 및 디렉터리 마운트
# 슈퍼계정 환경 변수를 적용하여 계정을 생성시킵니다.
docker run --name test-mongo -d --rm -p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=root \
-e MONGO_INITDB_ROOT_PASSWORD=secret \ 
-v %cd%/db:/data/db/ -v %cd%/conf:/etc/mongo \
-v %cd%/log:/var/log/mongodb \
mongo:4.2 --config /etc/mongo/mongod.conf 

1, 2번과 같이 Docker 배포 시 별도의 계정과 패스워드를 지정하지 않았으므로 authorization 비활성화를 위해 mongod.conf의 security.authorization 값이 disabled가 되도록 설정합니다

3번과 같이 Docker 배포 시 슈퍼 계정에 대한 환경 변수를 지정하였으므로 해당 계정으로 접속이 가능하도록 authorization 활성화를 위해 mongod.conf의 security.authorization 값이 enabled가 되도록 설정이 필요합니다

추가) 만약 슈퍼 계정을 생성 후 인증 과정를 활성화하지 않는다면 아래와 같은 에러와 함께 조회가 불가능합니다

robo 3t authorization error
  • admin DB
    • authorization Database
# admin DB 이동
use admin
  • 계정 조회
// 시스템의 모든 계정 조회
db.system.users.find()

// 해당 데이터베이스의 특정 사용자 조회
use test
db.getUser("test01")
  • 계정 생성 및 삭제
    • 계정은 권한을 적용하려는 데이터베이스로 이동 후 생성 및 삭제하도록 합니다
# 계정 생성
use testDB
db.createUser({ user: "test01", pwd: "mypassword", roles: [ "readWrite" ]})

# 계정 삭제
use testDB
db.dropUser("testUser")
  • role 생성 및 삭제
    • role은 적용하려는 데이터베이스로 이동 후 생성 및 삭제하도록 합니다
# role 생성
use testDB
db.createRole(
  {
      role: "DevOps",
      privileges: [],
      roles: [
        { role: "readWrite", db: "test01"}
      ]
  }
)

# role 삭제
use testDB
db.dropRole( "readPrices", { w: "majority" } )
  • 계정 접속
$ mongo -u "DevOps" --authenticationDatabase "admin"
Enter password:

참고 자료

댓글 한 개

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.