mongodb 데이터베이스 생성 및 계정 생성, 권한 부여


아래는 MongoDB에서 데이터베이스를 생성하고, 사용자 계정을 추가하며, 적절한 권한을 부여하는 방법에 대한 단계별 가이드입니다. 기본적으로 MongoDB는 사용자가 접속할 때 인증 없이 접속할 수 있도록 설정되어 있으나, 실제 운영 환경에서는 인증을 활성화하여 보안을 강화하는 것이 좋습니다.


1. MongoDB 셸 접속

MongoDB 서버가 실행 중이라면, 터미널 혹은 명령 프롬프트에서 아래와 같이 기본 mongosh (또는 이전 버전의 mongo 쉘)를 실행합니다.

mongo

또는 최신 버전의 경우:

mongosh

2. 원하는 데이터베이스 선택(또는 생성)

MongoDB에서는 사용자가 지정한 데이터베이스가 존재하지 않을 경우, 최초 데이터를 삽입할 때 자동으로 생성됩니다. 우선 사용할 데이터베이스로 전환합니다.

예를 들어, myDatabase 라는 데이터베이스를 사용하고자 한다면:

use myDatabase

위 명령을 실행하면 현재 작업 데이터베이스가 myDatabase로 설정되며, 데이터가 삽입되면 데이터베이스가 생성됩니다.


3. 사용자 계정 생성 및 권한 부여

데이터베이스가 선택되었으면 이제 해당 데이터베이스에 접근할 사용자 계정을 생성하고, 그 계정에 알맞은 권한을 부여할 수 있습니다. MongoDB에서는 db.createUser() 메서드를 사용하여 이를 수행합니다.

예를 들어, myUser라는 사용자 계정을 myDatabase 데이터베이스에 대해 생성하고, readWrite 권한을 부여하려면 다음과 같이 명령을 실행합니다.

db.createUser({
  user: "myUser",      // 생성할 사용자 이름
  pwd: "myPassword",   // 사용자 암호 (강력한 암호를 사용하세요)
  roles: [
    { role: "readWrite", db: "myDatabase" }   // myDatabase에서 읽기/쓰기 권한 부여
  ]
})

이 명령은 해당 데이터베이스에 대해 읽기 및 쓰기(readWrite) 작업을 수행할 수 있는 사용자를 생성합니다.

주요 역할(Role) 설명

  • read: 데이터베이스에서 읽기 전용 액세스를 제공합니다.
  • readWrite: 데이터베이스에서 데이터 읽기 및 쓰기(삽입, 수정, 삭제 등)가 가능합니다.
  • dbAdmin: 데이터베이스 관리 작업(인덱스 관리, 통계 등)을 수행할 수 있습니다.
  • userAdmin: 해당 데이터베이스의 사용자 관리를 할 수 있습니다.

복수의 역할을 부여하고 싶을 경우, roles 배열에 원하는 역할을 추가할 수 있습니다.

예를 들어, 데이터 읽기/쓰기 권한과 데이터베이스 관리 권한을 모두 부여하려면:

db.createUser({
  user: "myUser",
  pwd: "myPassword",
  roles: [
    { role: "readWrite", db: "myDatabase" },
    { role: "dbAdmin", db: "myDatabase" }
  ]
})

4. 인증 활성화 및 연결

실제 운영 환경에서는 MongoDB 설정 파일(mongod.conf)에서 보안을 위해 인증을 활성화합니다. 인증을 활성화하려면 설정 파일에 다음과 같이 추가합니다.

security:
  authorization: enabled

서버를 재시작한 후, MongoDB 셸 또는 클라이언트 애플리케이션에서는 생성된 사용자 계정을 사용하여 접속합니다.

예를 들어, 셸에서 접속할 때:

mongo -u myUser -p myPassword --authenticationDatabase myDatabase

이 명령은 myDatabase에서 인증 후 접속할 수 있도록 해줍니다.

이처럼 MongoDB에서 데이터베이스 생성, 사용자 계정 생성 및 권한 부여는 간단한 명령어를 통해 수행할 수 있습니다. 실습을 통해 명령어에 익숙해지고, 운영 환경에서는 반드시 인증을 활성화하여 데이터베이스 보안을 강화하는 것이 중요합니다.


답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다