본문 바로가기

Software Engineering/MongoDB

[MongoDB] 사용자 계정 생성 및 관리를 위한 사전 지식 정리

사진: Unsplash 의 Joshua Earle

 

내용 정리

  • mongosh를 사용한 접속 방법
$ mongosh -u {username} -p {password}
  • mongodb는 database > collection > document 순서로 데이터를 그룹화 한다.
  • use {database_name} 명령을 사용하면 해당 데이터 베이스를 사용하도록 설정한다. 데이터베이스가 없는 경우 생성 후 이동한다.
  • mongodb는 사용자 계정을 database 단위로 관리 한다. mydatabase1과 mydatabase2에 동일한 사용자가 있어도 서로 다른 사용자로 관리된다.
  • 현재 사용 중인 database에 생성하는 사용자 계정이 종속된다. 
  • 사용자를 생성하려면 db.createUser() 명령을 사용한다.
$ use {database_name}
$ db.createUser(...)
$ use {database_name}
$ db.dropUser("{user_name}")

 

  • mongodb는 미리 정의 된 사용자 역할(role)을 기반으로 database의 권한을 부여 한다. "{my_database}의 {role_name} 역할을 부여"하는 방식이다.
  • mongodb 설치 후 admin 사용자 생성, 일반 사용자 생성 순서로 진행한다.
  • admin 사용자는 아래 명령으로 생성한다.
# https://www.mongodb.com/docs/manual/tutorial/configure-scram-client-authentication/#create-the-user-administrator

use admin
db.createUser(
  {
    user: "myUserAdmin",
    pwd: passwordPrompt(), // or cleartext password
    roles: [
      { role: "userAdminAnyDatabase", db: "admin" },
      { role: "readWriteAnyDatabase", db: "admin" }
    ]
  }
)
  • mongodb 종료는 admin 명령으로 실행한다.
$ db.adminCommand( {shutdown: 1} )
  • mongosh 접속 이후 인증을 진행하려면 db.auth() 명령을 사용한다.
$ use admin
$ db.auth("{user_name}", "{mypassword}")
  • 특정 데이터베이스에 권한을 부여할 때는 database-specific role을 부여 한다.
Role 설명
read 데이터베이스의 데이터를 읽을 수 있음.
readWrite 데이터베이스의 데이터를 읽고 쓸 수 있음.
dbAdmin 데이터베이스의 스키마 관리 권한(인덱스 생성, 통계 확인 등).
userAdmin 데이터베이스 사용자 관리 권한(사용자 생성, 수정, 삭제).
dbOwner 데이터베이스 소유자 권한(모든 작업 수행 가능).
  • 클러스터 관련 작업이 필요할때는 cluster-wide role을 부여 한다.
Role 설명
clusterAdmin 클러스터 관리 권한(샤딩, 복제 설정, 클러스터 상태 점검 등).
clusterMonitor 클러스터 상태를 모니터링할 수 있음(읽기 전용).
hostManager 호스트 관리 권한(서버 상태 확인, 로그 접근).
backup 백업 권한(데이터 덤프 및 스냅샷 생성).
restore 데이터 복원 권한.
readWriteAnyDatabase 모든 데이터베이스에 읽기/쓰기 작업 수행 가능.
userAdminAnyDatabase 모든 데이터베이스에서 사용자 관리 가능.
dbAdminAnyDatabase 모든 데이터베이스의 스키마 관리 가능.
 

Built-In Roles in Self-Managed Deployments - MongoDB Manual v8.0

MongoDB grants access to data and commands through role-based authorization and provides built-in roles that provide the different levels of access commonly needed in a database system. You can additionally create user-defined roles.A role grants privilege

www.mongodb.com

  • 사용자 계정 현황을 보고 싶으면 db.getUsers() 명령을 사용한다.
$ db.getUsers()