본문 바로가기

back-end/db

MongoDB/ MongoDB Compass로 MongoDB 연결하고 권한 지정하기

 

MySQL에 Workbench가 존재한다면 MongoDB에는 MongoDB Compass가 존재한다!

 

 

MongoDB Compass 다운로드

 

해당 링크에서 각자 환경에 맞는 버전의 MongoDB Compass를 설치한다.

 

 

Try MongoDB Tools - Download Free Here

Free download for MongoDB tools to do more with your database. MongoDB Shell, Compass, CLI for Cloud, BI Connector and other database tools available.

www.mongodb.com

 

 


 

 

MongoDB Compass로 DB 접속하기

 

연결

 

MongoDB 설치 시 별도의 권한 설정이나 port 지정을 하지 않았다면 위의 초기 설정에서 바로 Connect를 연결하면 로컬 DB로 정상 연결되는 것을 확인할 수 있다.

 

 

연결 후 최초 화면

* 나의 경우 로컬 MongoDB의 port를 37017로 지정해 37017로 연결되는 것이 정상이다

 


 

별도의 설정 없이 MongoDB를 설치했을 경우 해당 DB는 모든 연결에 대해 열려 있게 되므로 (처음 연결 시 username과 password 같은 인증 정보를 입력하지 않았음에도 정상 연결이 되었던 것!) 이후 추가 작업을 통해 인증된 사용자만 DB에 접속할 수 있도록 설정해보자.

 

 


 

MongoDB 기본 설정 확인하기

 

MongoDB Shell 오픈

우측 하단의 화살표 표시 또는 좌측 하단의 _MONGOSH를 클릭해서 MongoDB Compass에 내장된 MongoDB Shell을 오픈할 수 있다.

 

초기에 연결되어 있는 test는 MongoDB의 default database이므로 우리는 권한 설정을 이어가기 위해 admin database로 이동해 작업을 계속한다.

 

admin database로 이동

use admin

 

 

현재 등록 사용자 확인

show users

 

 

현재 admin database의 collection 보기

show collections

 

 

현재 admin database에는 어떠한 사용자 정보도 존재하지 않고, 기본 설정 정보인 system.version collection만 존재하는 것을 확인할 수 있다. 한번 설치된 MongoDB의 버전 어떻게 지정되어 있는지 확인해보면,

 

 

Docker로 설치한 버전이 잘 적용되어 있는 것을 확인할 수 있다.

 

이제 기본적인 확인 절차가 끝났으므로, 아무나 DB에 접근할 수 없도록  계정을 생성해보자.

 


 

MongoDB 접근 계정 생성하기

 

방금까지 접속되어 있던 admin databse에서 작업을 계속한다.

 

사용자 생성 명령어 알아보기

MongoDB의 공식 문서의 db.createUser() 관련 부분을 참조해 명령어를 먼저 파악해보자.

 

{
  user: "<name>",
  pwd: passwordPrompt(),      // Or  "<cleartext password>"
  customData: { <any information> },
  roles: [
    { role: "<role>", db: "<database>" } | "<role>",
    ...
  ],
  authenticationRestrictions: [
     {
       clientSource: ["<IP>" | "<CIDR range>", ...],
       serverAddress: ["<IP>" | "<CIDR range>", ...]
     },
     ...
  ],
  mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
  passwordDigestor: "<server|client>"
}

 

추가로 지정할 수 있는 여러 옵션들이 잇지만, 내가 원하는 건 단순하게 DB에 접근할 권한 통제 정도이므로 user, password, roles 정도의 옵션만 지정해 사용하면 될 것 같다.

 

현재 DB에 어떠한 계정도 존재하지 않으므로, 모든 권한을 가지는 관리자 계정을 만드는 것을 목적으로 roles 부분을 어떻게 지정해야 하는지 알아보자.

 

MongoDB 권한 정보 알아보기

 

Built-In Roles — MongoDB Manual

Docs Home → MongoDB Manual 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

www.mongodb.com

 

userAdminAnyDatabase

The userAdminAnyDatabase role does not restrict the privileges that a user can grant. As a result, userAdminAnyDatabase users can grant themselves privileges in excess of their current privileges and even can grant themselves all privileges, even though the role does not explicitly authorize privileges beyond user administration. This role is effectively a MongoDB system superuser.

 

 

 

사용자 생성 명령어 실행

 

db.createUser(
	{
		user: "username", 
		pwd: "password", 
		roles: [ { role: "userAdminAnyDatabase", db: "admin" }, "readWriteAnyDatabase" ] 
	}
)

 

 

 

 

 

 

 

 

 

 

Ref.

 

db.createUser() — MongoDB Manual

Docs Home → MongoDB Manual db.createUser(user, writeConcern)Creates a new user for the database on which the method is run. db.createUser() returns a duplicate user error if the user already exists on the database.mongosh MethodThis page documents a mong

www.mongodb.com

 

Manage Users and Roles — MongoDB Manual

Docs Home → MongoDB Manual This tutorial provides examples for user and role management under the MongoDB's authorization model. Create a User describes how to add a new user to MongoDB.If you have enabled access control for your deployment, you must aut

www.mongodb.com

 

'back-end > db' 카테고리의 다른 글

MongoDB/ Window local 환경에서 Docker로 MongoDB 실행하기  (0) 2023.07.24