한 걸음씩 기록하며
[MongoDB 계정 사용하여 권한 부여하기 (feat. Node.js, robo 3T] 본문
0. TLDR
- EC2로 열어놓은 서버 MongoDB에 접근하는 방법 중 하나(Robo3T 연결)
- MongoDB에서 계정을 생성하고, 해당 계정이 DB를 관리
1. DB 보안과 접근
- 서버에 있는 DB를 누구나 접근하면 큰일난다.
- 그래서 대부분의 DB들은 (MongoDB, MySQL 등) 다음과 같은 기초적인 보안 기능을 제공한다.
- 그렇다면 어떤 방식으로 DB에 접근할 수 있을까? 대부분 아래의 2가지 방식이다.
- Whitelist : 허용된 IP만 DB에 접근할 수 있도록 설정하는 방식
- 계정 : 허용된 사용자만 DB에 접근할 수 있도록 계정을 관리하는 방식
- 본 글은 2번째 방식인, 계정을 관리하여 접근을 허용하는 방식을 MongoDB에서 구현해볼 것이다.
2. 계정 생성하고 권한 부여하기
- 참고로 본 글은 아래와 같은 작업 환경에서 진행됩니다.
- OS : Ubuntu 18.04 LTS
- DB : MongoDB V4.2.18
- Node.js V16.14.0
0) 선행 작업
- OS에 node.js, MongoDB 설치가 되어있어야합니다.
- EC2에서 인바운드 규칙 편집에서 27017 포트를 열어주어야합니다. (일반적으로 27017 사용)
1) Mongo DB 계정 생성
- Mongo DB 접속
- 명령어를 쓰면 많은 내용이 뜨다가, > 이 뜨면 정상
$ mongo
- admin으로 DB 바꾸기
- admin은 Mongo DB 관리자
$ use admin
- 계정 생성하기
- 아래와 같이 생성하면 Successfully added user: { "user" : "test", "roles" : [ "root" ] } 와 같이 응답이 떠야함
$ db.createUser({user: "test", pwd: "test", roles:["root"]});
- 계정 로그인, 권한 확인하기
- db.auth로 로그인 할 수 있다. (정상적인 로그인이라면 리턴 값은 1)
- 로그인 상태에서 getUsers()를 입력하면 권한에 대한 정보가 나온다.
$ db.auth("아이디", "비밀번호")
$ db.getUsers();
2) 외부에 권한 주기
- Mongo DB 설정 파일 vi 에디터로 열기
$ sudo vi /etc/mongod.conf
- 설정 파일 변경
- i 를 누르면 수정 권한이 생긴다.
- 아래의 2가지 내용을 변경해주어야한다.
- bingIp : 0.0.0.0으로 수정
- #security 를 다음과 같이 수정해야함
- security: authorization: "enabled"
- 수정을 마무리하면 esc 누르고 :wq 입력하고 엔터
- 아래는 설정 파일을 발췌한 예시다.
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0
# how the process runs
processManagement:
timeZoneInfo: /usr/share/zoneinfo
security:
authorization: "enabled"
- Mongo DB 재시작
$ sudo service mongod restart
3.)Node.js 에서 설정
- Mongo DB URL 설정
- 아래와 같이 Mongo DB URL을 설정해준다.
'mongodb://test:test@localhost:27017/admin'
// id : pwd @ ip 주소 : port / db
- dbName 설정
- connect 아래 생성하여 접근할 db명을 설정해주어야한다.
4) robo 3T에서 연결
- address, port 입력
- EC2 ip주소와 인바운드 규칙 편집에서 열어준 port 번호를 기입한다.
- Authentication 작성
- db는 admin으로 설정, mongo DB에서 만든 계정과 비밀번호 입력
- Test 하고 Save 하기
- 위의 작업을 다 마무리 하고 Test 하면 아래와 같이 성공할 것이다. 그러면 Save 하고 마음 껏 사용!
참고
'JavaScript & Node.js' 카테고리의 다른 글
[Node.js 비동기 답게 쓰기] await => Promise.allSettled (0) | 2022.04.17 |
---|---|
[dotenv]란 무엇인가 (0) | 2022.02.12 |
[Generator]란 무엇인가 (0) | 2022.02.09 |
[Iteration, Iterable, Iterator]이란 무엇인가 (0) | 2022.02.09 |
[JSON & Ajax] 개념 간단 정리 (0) | 2022.02.06 |
Comments