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 "디비이름"
(비밀번호 입력)
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.