mongoDB/mongoDB 다루기 with studio 3T

[mongoDB+studio3T] 유저 생성 + Node.js Express와 연결

찰리-누나 2022. 12. 31.

 

studio 3T를 사용해, 몽고db의 사용자를 추가하고 권한을 설정해본다. 만일 studio의 설치가 아직이라면 이 글을 따라하면 된다 : LINK

 

[node.js + MongoDB] 왕초보도 할수있는 윈도우에 몽고DB 설치하기 + Studio 3T 설치 및 사용법 + 부록) node

이 글은 회사의 요청으로 몽고디비를 다루게 된 비운의 디자이너 친구를 위해 쓰였습니다. 몽고DB : 윈도우에서 사용할 몽고DB 프로그램 Studio 3T : 몽고DB를 편하게 다룰수 있게 해주는 프로그램

make-somthing.tistory.com

 

 

studio3T로 사용자를 추가하고, 권한을 설정하는 방법은 공식 문서에도 잘 정리되어 있다.

공식 문서 : https://studio3t.com/knowledge-base/articles/user-manager/

 

 

진행하기 전에, 몽고db를 설치했을 때 자동으로 생긴 이 세 개의 데이터베이스는 무엇일까?

바로 얘네

 

이들에 대한 설명은 공식 문서 속에 꽁꽁 숨어있다. 바로 여기..

adminhttps://www.mongodb.com/docs/v6.0/reference/built-in-roles/

localhttps://www.mongodb.com/docs/v6.0/reference/local-database/

confighttps://www.mongodb.com/docs/v6.0/reference/config-database/

 

 

간단하게 설명하자면 다음과 같다.

 

admin

[ 인증과 권한 부여 ] 역할을 수행한다. 이곳에 유저를 만들어 보관할 것이다.

 

local

단일 서버에 대한 데이터를 저장하며, 복제할 수 없다. 

 

config

샤딩(sharding)된 몽고DB 클러스터는 config 데이터베이스를 사용홰 각 샤드의 정보를 저장한다.

 

 

우리는 단순하게 아 admin 데이터베이스에다가 유저를 만들어 보관하면 되는구나. 라고 생각하면 된다. 이제 사용자를 생성해보자.

 

상위 탭에서 user 버튼을 클릭하고, Add를 눌러 사용자를 추가한다.

 

 

 

Add를 누르면 다음과 같은 창이 나온다. 사용자 이름, 비밀번호를 입력하고 권한을 부여하거나 제거할 수 있다. 커스텀 데이터도 넣어줄 수 있는데 나는 사용하지 않을 것이다. admin이라는 이름으로, 모든 db에 대한 모든 권한을 가진 총 관리자 계정을 만든다.

 

 

 

왼쪽은 admin 에서 사용자를 생성할 때 설정할 수 있는 권한 목록이며, 오른쪽은 새로 만든 test 에서 사용자를 생성하고자 할 때 주어지는 권한 목록이다. admin에서 사용자를 생성하는 것이, 일반 db에서 생성하는 것 보다 편리하다는것을 알 수 있다. (각 권한들에 대한 설명 : https://www.mongodb.com/docs/v6.0/reference/built-in-roles/

 

 

 

문서를 쉽게 번역해보자. 유저는 관리자와 사용자로 나뉜다. 관리자는 말 그대로 [관리] 하는 사람이고, 사용자는 [사용만 하는 사람] 이다. 

 

먼저 사용자를 보자. [데이터베이스 사용자], 즉 Database User 는 데이터베이스를 관리하는 사람이 아닌 [사용하는 사람] 이라는 뜻이며, 다음과 같은 두 종류의 사용자가 있다.


 Database User

- 읽기만 할 수 있는 사람 (read) : 데이터를 찾고 읽을 수 있다.

- 읽고 쓸 수 있는 사람 (readWrite) : 바꾸고 찾고 index를 만들고 데이터 삽입하고 데이터를 지울 수 있다.


 

관리자에는 [데이터베이스 관리자] , [클러스터 관리자], [슈퍼유저] 가 있다.

 

데이터베이스 관리자DB를 관리하는 유저를 가리킨다. DB관리자는 가진 권한에 따라 세 종류의 관리자로 나뉜다.

 


● Database Administration Roles

- dbAdmin : 스키마 관련 작업, 인덱싱 및 통계 수집과 같은 관리 작업을 수행할 수 있다. 그러나 사용자 및 역할 관리에 대한 권한은 가지고 있지 않다. 

- dbOwner : 데이터베이스의 소유자를 뜻한다. 데이터베이스에 대한 모든 관리 작업을 수행할 수 있다. 이 역할은 readWrite, dbAdmin, userAdmin 을 합친 형태이다. admin 데이터베이스에서 생성된 관리자가 이 권한을 받으면, 슈퍼유저가 된다.

- userAdmin : 현재 데이터베이스에서 역할과 사용자를 생성하고 수정할 수 있다. 즉, 자신을 포함해 모든 사용자에게 모든 권한을 부여할 수 있다. admin 데이터베이스에서 생성된 관리자가 이 권한을 받으면, 슈퍼유저가 된다.


 

슈퍼유저 모든 데이터베이스에 대한, 모든 권한을 자신이 가지고 있는 사용자를 말한다. 모든 데이터베이스를 읽고 수정하고 삭제하고 작성할 수 있다. 슈퍼유저가 되려면 아래 권한이 필요하다.

 


● Superuser Roles (슈퍼유저)

- dbOwner   ( admin데이터베이스 로 범위가 지정된 경우)

- userAdmin  ( admin데이터베이스 로 범위가 지정된 경우)

- userAdminAnyDatabase


 

 

 

 

 

이제 권한에 대해 알았으니 admin 계정에 총 관리 권한을 주어본다. Grant Roles..버튼을 누르고, 아래 세 개의 권한을 눌러 Grant 하고 add한다.

 

admin 계정이 생성되었다.

 

 

test 데이터베이스의 dbAdmin과 readWrite 권한을 가진 chali 관리자를 생성해본다.

 

 

 

 

 


Node.js Express 백엔드 환경에서 mongodb와 연결한 후, 유저를 연결해주려면 다음과 같이 코드를 작성한다.

// 1. mongoose 모듈 가져오기
var mongoose = require('mongoose');
// 2. DB 세팅
mongoose.connect('mongodb://유저이름:비밀번호@localhost:27017/admin',{
    dbName:'디비이름'
},(error)=> {
    if(error)
    console.log('몽고디비 연결 오류',error);
    else 
    console.log('몽고디비에 연결되었습니다.')
});

 

댓글