계정을 사용하여 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가 설치되어있는지 확인한다.
이렇게 버전 정보가 뜨면 설치되어있다는 뜻이다.
설정 파일 수정
$ vi /etc/mongodb.conf
// 또는
$ vi /etc/mongod.conf
shell에 위 명령어를 쳐서 MongoDB 설정 파일을 수정해야한다. 버전마다 이름이 다른것 같으니 주의
3 버전대에서 설정하는 방법
위 사진은 아무것도 변경하지 않은 MongoDB의 기본 설정 상태이다.
여기서 bind_ip는 DB에 연결할 수 있는 IP를 뜻하고, auth는 DB에 연결할 때 계정 검사를 할 지 여부를 뜻한다.
기본 옵션에서는 auth가 주석으로 되어있기 때문에 주석을 풀어줘야한다.
매우 중요하다! 계정을 만들었어도 auth가 주석처리되있으면 계정 검사를 하지 않고 모두 통과시켜버리기 때문이다. 이것 때문에 해킹당한 적이 있다 ㅎㅎ...
bind_ip도 기본 상태에서는 로컬 IP만 허용하고 있는데 이러면 외부에서 MongoDB에 연결할 수 없다.
이 글에서는 모든 IP에서 접속 가능하도록 설정해놓고 진행한다.
모든 IP에서 접속할 수 있게 bind_ip를 0.0.0.0로 설정해주고 auth는 true로 해준다. 그리고 설정 파일을 저장한다.
4 버전대에서 설정하는 방법
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()로 확인해보니 성공적으로 계정이 생성된 것을 확인할 수 있었다.
참고 자료
'Database > MongoDB' 카테고리의 다른 글
[MongoDB] /tmp/mongodb-27017.sock error operation not permitted (0) | 2021.10.17 |
---|
댓글