본문 바로가기
Database/MongoDB

[MongoDB] 계정을 사용하여 DB 권한 제어하기

by SpiralMoon 2020. 1. 28.
반응형

계정을 사용하여 DB 권한 제어하기

계정을 사용하여 데이터베이스에 대한 쓰기/삭제, 관리 기능 등의 권한을 제어해보자.

2021년2월13일 업데이트


데이터베이스 보안 기초

우리가 사용하는 대표적인 DB들은(MySQL, MongoDB 등) 기초적인 보안 기능들을 제공한다.

 

첫 번째는 허용된 IP만 DB에 접근할 수 있도록 화이트리스트를 설정하는 것이고,

두 번째는 허용된 사용자만 DB에 접근할 수 있도록 계정을 관리하는 것이다.

 

이 글에서는 두 번째 방법을 이용해 MongoDB에 계정을 설정해 볼 것이다.


작업 환경

OS : Ubuntu 18.04 LTS

DB : MongoDB 3, 4 버전대


작업 순서

1. MongoDB 설치 확인

2. 설정 파일 수정

3. 계정 생성

4. 계정 확인


MongoDB 설치 확인

$ mongod --version

 

shell에 위 명령어를 쳐서 MongoDB가 설치되어있는지 확인한다.

 

mongod --version 실행 결과

이렇게 버전 정보가 뜨면 설치되어있다는 뜻이다.


설정 파일 수정

$ vi /etc/mongodb.conf

// 또는 

$ vi /etc/mongod.conf

 

shell에 위 명령어를 쳐서 MongoDB 설정 파일을 수정해야한다. 버전마다 이름이 다른것 같으니 주의

3 버전대에서 설정하는 방법

기본 설정 옵션

위 사진은 아무것도 변경하지 않은 MongoDB의 기본 설정 상태이다.

여기서 bind_ipDB에 연결할 수 있는 IP를 뜻하고, authDB에 연결할 때 계정 검사를 할 지 여부를 뜻한다.

 

기본 옵션에서는 auth가 주석으로 되어있기 때문에 주석을 풀어줘야한다.

매우 중요하다! 계정을 만들었어도 auth가 주석처리되있으면 계정 검사를 하지 않고 모두 통과시켜버리기 때문이다. 이것 때문에 해킹당한 적이 있다 ㅎㅎ...

 

bind_ip도 기본 상태에서는 로컬 IP만 허용하고 있는데 이러면 외부에서 MongoDB에 연결할 수 없다.

이 글에서는 모든 IP에서 접속 가능하도록 설정해놓고 진행한다.

 

auth 옵션을 활성화한 모습

모든 IP에서 접속할 수 있게 bind_ip를 0.0.0.0로 설정해주고 auth는 true로 해준다. 그리고 설정 파일을 저장한다.


4 버전대에서 설정하는 방법

security 옵션을 활성화한 모습

3 버전대의 설정 파일과는 내용이 조금 다르나 역할은 똑같다.

bindIp를 0.0.0.0으로 설정 해주고 security 속성 하위에 authoraization을 enabled 상태로 설정한다.


$ service mongodb restart

 

마지막으로, 변경된 설정대로 실행되도록 MongoDB를 재시작해준다.

 


계정 생성

$ mongo

 

shell에서 위 명령어를 쳐서 mongo shell로 접속한다.

 

mongo shell에 접속되었다.

 

 

> use admin

 

use admin 명령어로 MongoDB 내부의 admin db에 접속한다.

 

switched to db admin이 떠야한다.

 

db.createUser({
    user:'아이디',
    pwd:'비밀번호',
    roles: [
        {
            "role" : "userAdminAnyDatabase",
            "db" : "admin"
        },
        {
            "role" : "dbAdminAnyDatabase",
            "db" : "admin"
        },
        {
            "role" : "readWriteAnyDatabase",
            "db" : "admin"
        }
    ]
})

 

위는 새로운 계정을 만드는 쿼리로 계정의 아이디와 비밀번호, 계정이 가질 권한을 파라미터로 넣어줘야 한다.

위 처럼 넣으면 해당 계정은 모든 db에 쓰기, 읽기, db 생성 및 삭제 등의 작업이 가능해진다.

 

 

Successfully added user가 뜨면 성공.


계정 확인

> db.auth("아이디", "비밀번호")

 

계정이 제대로 만들어졌는지 확인하려면 위 명령어를 써서 로그인해보면 된다. 리턴값으로 1이 출력되면 로그인 성공이다.

 

db.getUsers()로 확인해보니 성공적으로 계정이 생성된 것을 확인할 수 있었다.


참고 자료

 

Manage Users and Roles — MongoDB Manual

Identify the privileges to grant or revoke. If the user requires additional privileges, grant to the user the role, or roles, with the required set of privileges. If such a role does not exist, create a new role with the appropriate set of privileges. To r

docs.mongodb.com

 

반응형

'Database > MongoDB' 카테고리의 다른 글

[MongoDB] /tmp/mongodb-27017.sock error operation not permitted  (0) 2021.10.17

댓글