MongoDB 에서 사용자 인증 (authorization) 적용 방법

MongoDB 에서 사용자 인증 (authorization) 적용 방법


MongoDB 에서 Authorization 기능을 사용하는 방법입니다

1. 사용자 관리 계정 만들기

우선 MongoDB 가 처음 설치된 상태에서 mongo 를 이용해 접속.

$ mongo

그리고 아래의 명령어로 사용자 관리 계정을 생성

use admin
db.createUser(
  {
    user: "id",
    pwd: "passwod",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

2. 네트워크 접속 허용 및 포트변경 보안 ( Security ) 의 Authorization 기능 사용설정

이제 mongodb 의 설정을 할 것 입니다.
exit 로 mongodb 를 나온 후 /etc/mongod.conf 를 수정하도록 합니다.

$ sudo vim /etc/mongod.conf

여기서 수정 해야할 부분은 net 부분과 authorization 부분입니다.
net 은 port 와 bindIp 를 관리 하는대 여기서 port 는 원하시는 port 로
bindIp 는 네트워크 접속을 하시는 설정에 따라서 변경하시면 됩니다.

  • 기본 포트를 사용하셔도 상관 없긴하지만 변경하는 것이 좋다.
# network interfaces
net:
  port: 27017
  #bindIp: 127.0.0.1

제 경우 위와 같이 port 는 27017(다른걸로 변경) 그리고 bindIP 는 주석 처리. 실제 서버에서 내부 네트워크 만으로 접속을 하게 된다면 bindIp 를 걸어서 운영하는 것이 좋다. 제 경우 테스트를 위한 서버 설정이기 때문에 풀어 주었습니다.

  • bindIP 의 경우 여러개의 IP 를 , (쉼표) 와 함께 나열할 수 있습니다 ex) bindIp:127.0.0.1, 10.0.0.2, 192.168.0.2
    그리고 하단의 #security 부분의 주석을 풀어 주시고 아래와 같이 authorization 을 추가.
security:
   authorization: enabled

authorization: enabled 를 추가할 경우 비밀번호가 없는 사용자는 접속을 할 수 없게 됩니다. 따라서 1. 사용자 관리 계정 만들기에서 생성한 계정만이 접속 가능
이제 저장 후 mongodb 를 재시작.

3. 계정 접속 후 일반 DB 사용자 계정 만들기

이제 기본적인 준비가 되었다. 외부에서 접속하기 위해 DB 를 만들어 권한을 넣어줄 차례.

mongo --port <포트> -u "<사용자 계정>" -p "<비밀번호>" --authenticationDatabase "admin"
 
ex)
mongo --port 25321 -u "id" -p "password" --authenticationDatabase "admin"
 or
mongo --port 25321 -u "id" --authenticationDatabase "admin" -p
입력:****

접속이 후 아래의 명령어로 DB 와 사용자 계정 생성.

use <db 이름="">
db.createUser({ user: "<사용자 계정>",
          pwd: "<비밀번호>",
          roles: ["dbAdmin", "readWrite"]
})
 
ex)
use testdb
db.createUser({ user: "user",
          pwd: "user1234",
          roles: ["dbAdmin", "readWrite"]
})

Roles 는 사용자의 권한으로 몽고사이트 참조.
이제 외부에서 DB 로 접속을 시도 해본다.

mongo --port <포트> -u "<사용자 계정>" -p "<비밀번호>" --authenticationDatabase "<databse>"
 
ex)
mongo --port 25321 -u "tutorialbook_manager" -p "tutori2341" --authenticationDatabase "tutorialbook_io_user"
</databse>

혹은 외부 접속기를 통하여 접속을 시도해 보도록 합니다.
잘되라 본다~

댓글

가장 많이 본 글