MongoDB를 설치하면 최초에 authentication이 없다.
그래서 비밀번호나 id없이 접속하여 어떤 database에도 접근할수 있고 심지어 admin database에도 접근 가능하다. (물론 bindIp 설정을 건드리지 않았다면 local에서 만 접근 할수 있지만, 어쨌건 접근만 가능하면 login과정없이 들어가진다.)
설치과정에서 root의 비밀번호를 물어보는 mySql을 보다가 MongoDB를 보면 좀 의아하다..
그리고 그로 인해서 아래와 같은 문제도 발생 가능
일주일동안 27,000개 이상의 MongoDB가 랜섬웨어에 감염돼
-_-)... 잘 모르겠지만 Production에 적용하기 위해서는 DB자체 말고 DB가 설치된 서버에 무엇인가 보안을 위한 조치가 필요할것 같다.
어쨌건 처음에 root나 admin의 개념이 없기때문에 생성해 주어야 하는데, 명시적으로 계정과 비밀번호를 만들고, authentication option을 enable해주어야 한다.
좀더 자세히 설명하면
1. MongoDB에서 admin 계정 만들기
admin Database에서 createUser 명령어로 admin 계정을 만든다. 계정이름은 admin이 아니어도 상관없음
use admin
db.createUser( |
2. security.authorization 옵션 enable
sudo로 MongoDB 설정 파일을 수정해야 한다.
$ sudo vi /etc/mongod.conf |
파일이 열렸으면 아래 항목을 추가 한다.
security: authorization: enabled |
3. MongoDB 재시작
sudo service mongod restart |
$ mongo -u "admin" -p --authenticationDatabase "admin" MongoDB shell version v3.4.2 Enter password: connecting to: mongodb://127.0.0.1:27017 MongoDB server version: 3.4.2 > |
혹은 shell안에서 login하는 방법은 아래와 같다.
반드시 use admin으로 admin Database로 이동해주어야 한다.
use admin db.auth("admin", "welcome!" ) |
그런데... 위와 같이 계정을 만들고 비번을 만들어도 그냥 바로 mongo 라는 명령어로 shell에 접속 가능하다-_- 물론 접근한 이후에 Database에는 접근 불가
비록 admin을 만들었지만, 생성시 role을 admin Database에만 주었으므로, 다른 Database는 접근할 수 없다-_-
이건 admin도 admin이 아닌것도 아닌.....
다시말하면 위의 과정으로 생성된 계정은 admin Database에 대한 관리 권한을 가지게 되는 것이다.
따라서 실제 data를 저장하기 위한 Database에도 계정을 따로 만들어주어야 한다.
아니면 admin에 다 role을 추가 해주면 되긴 되겠으나..안해봄-_-
'Development > Database' 카테고리의 다른 글
MongoDB 기본 명령어 (0) | 2019.10.19 |
---|---|
MongoDB에서 Connection Pool 구성 하기 (0) | 2017.02.13 |
MongoDB Ubuntu에 설치하기 (0) | 2017.02.10 |