MongoDB + 서버

2025. 6. 17. 11:42·데이터베이스

1편

https://9na0.tistory.com/202


어제 비밀번호 안걸어서 레전드 사건 발생

비트코인 내놔 당했다

이거 삭제해야됨 해커 계속 들어옴 

 

비밀번호를 잘 설정하자~!


 

MongoDB 사용자 인증 설정 가이드

MongoDB에서 사용자 인증을 설정할 때는 정확한 순서가 중요함. 이 순서를 따르지 않으면 인증이 활성화된 이후에 접근 불가능한 상황이 생길 수 있음. 다음은 보안을 강화하면서도 문제 없이 설정하는 권장 절차임.


권장 설정 순서

  1. MongoDB가 인증 없이 실행 중인지 확인
  2. MongoDB는 기본적으로 인증이 꺼진 상태로 시작됨. 따라서 처음 설치 후 특별히 설정을 하지 않았다면 인증 없이 접속 가능함. 이때 관리자 사용자를 먼저 만들어야 함.
  3. mongo 또는 mongosh 셸로 접속 후 admin DB로 이동
  4. mongo // 또는 mongosh use admin
  5. 관리자 권한을 가진 사용자 생성
    db.createUser(
      {
        user: "adminUser",
        pwd: "yourStrongPassword",
        roles: [
          { role: "userAdminAnyDatabase", db: "admin" },
          { role: "readWriteAnyDatabase", db: "admin" } // 필요에 따라 추가
        ]
      }
    )
    
    userAdminAnyDatabase는 다른 사용자를 만들거나 권한을 부여할 수 있는 관리자 권한임. readWriteAnyDatabase는 모든 DB에 대해 읽기/쓰기 권한을 부여하는 역할임.
  6. 관리자 계정은 인증을 켜고 나서 MongoDB에 접속할 수 있는 유일한 통로임. 비밀번호는 강력한 것으로 설정해야 함.
  7. mongod.conf 파일에서 인증 활성화 설정
    security:
      authorization: enabled
    
    만약 security 섹션 자체가 없다면 새로 추가해도 됨.
  8. 설정 파일에서 아래와 같이 authorization: enabled를 추가하거나 주석을 해제함. 보통 이 파일은 /etc/mongod.conf에 위치함(Linux 기준).
  9. MongoDB 서버 재시작
    • Linux: sudo systemctl restart mongod
    • Windows: net stop MongoDB 후 net start MongoDB
  10. 설정을 반영하려면 MongoDB 서버를 재시작해야 함.
  11. 생성한 사용자로 재접속 후 인증 확인
    mongo -u adminUser -p yourStrongPassword --authenticationDatabase admin
    
    또는 mongosh를 사용하는 경우도 위와 동일함. 정상적으로 로그인되고 show dbs 같은 명령이 실행되면 인증 설정이 완료된 것임.
  12. 인증이 활성화되었으므로 이제부터는 사용자 이름과 비밀번호를 입력해야 접속 가능함.

왜 이 순서를 지켜야 하나?

  • 인증이 꺼진 상태에서 사용자 생성하는 이유는, MongoDB는 기본적으로 인증 없이 누구나 접속 가능함. 이 상태에서 먼저 관리자 계정을 만들어놔야 나중에 인증이 켜졌을 때 접속할 수 있는 통로가 확보되는 것임.
  • 만약 인증을 먼저 켜버리면 인증된 사용자가 없는 상태가 되어, 접속 자체가 불가능해짐. 이 경우 인증을 다시 끄고 재설정하는 번거로움이 생기게 됨.

결론:
반드시 인증이 꺼진 상태에서 관리자 계정을 먼저 만들고, 그 다음에 인증을 활성화하고 서버를 재시작하는 방식으로 진행해야 함. 이 순서를 어기면 MongoDB에 접근 자체가 막혀버릴 수 있음.


[사용자 관리]

use erp

데이터베이스 선택 

 

db.createUser({
user:"koo",
pwd:"7654321",
roles:[{role:"readWrite",db:"erp"}]
});

사용자 등록 (아이디 / 패스워드 / 역할 / 사용DB)

역할은 readWrite면 충분함 super권한 안줘도됨 뚫리기나하지!!!!

역할 종류 역할 이름 적용 범위 설명 예시
데이터베이스 사용자 역할 read 특정 데이터베이스 특정 데이터베이스의 시스템이 아닌 컬렉션에 대한 읽기 전용 권한을 부여합니다.
{ role: "read", db: "mydb" }
readWrite 특정 데이터베이스 특정 데이터베이스의 시스템이 아닌 컬렉션에 대한 읽기 및 쓰기(삽입, 업데이트, 삭제) 권한을 부여합니다.
{ role: "readWrite", db: "erp" }
readAnyDatabase 모든 데이터베이스 모든 데이터베이스의 시스템이 아닌 컬렉션에 대한 읽기 전용 권한을 부여합니다. (admin DB에서만 정의 가능)
{ role: "readAnyDatabase", db: "admin" }
readWriteAnyDatabase 모든 데이터베이스 모든 데이터베이스의 시스템이 아닌 컬렉션에 대한 읽기 및 쓰기 권한을 부여합니다. (admin DB에서만 정의 가능)
{ role: "readWriteAnyDatabase", db: "admin" }
데이터베이스 관리 역할 dbAdmin 특정 데이터베이스 특정 데이터베이스에 대한 관리 작업(인덱스 생성, 통계 수집, 컬렉션 생성/삭제 등)을 수행할 수 있도록 합니다. 사용자 및 역할 관리는 제외됩니다.
{ role: "dbAdmin", db: "erp" }
userAdmin 특정 데이터베이스 특정 데이터베이스에서 사용자 및 역할을 생성하고 수정할 수 있는 권한을 부여합니다.
{ role: "userAdmin", db: "erp" }
dbOwner 특정 데이터베이스 특정 데이터베이스에 대한 **모든 권한 (readWrite, dbAdmin, userAdmin 포함)**을 부여합니다. 해당 데이터베이스의 소유자와 같습니다.
{ role: "dbOwner", db: "mydb" }
userAdminAnyDatabase 모든 데이터베이스 모든 데이터베이스에서 사용자 및 역할을 생성하고 수정할 수 있는 권한을 부여합니다. (admin DB에서만 정의 가능)
{ role: "userAdminAnyDatabase", db: "admin" }
dbAdminAnyDatabase 모든 데이터베이스 모든 데이터베이스에서 데이터베이스 관리 기능을 수행할 수 있는 권한을 부여합니다. (admin DB에서만 정의 가능)
{ role: "dbAdminAnyDatabase", db: "admin" }
클러스터
관리 역할
clusterAdmin 전체 클러스터 (admin DB) 가장 높은 클러스터 관리 접근 권한을 제공합니다. (clusterManager, clusterMonitor, hostManager 역할의 권한을 포함)
{ role: "clusterAdmin", db: "admin" }
clusterManager 전체 클러스터 (admin DB) 클러스터에 대한 관리 및 모니터링 기능을 제공합니다.
{ role: "clusterManager", db: "admin" }
clusterMonitor 전체 클러스터 (admin DB) MongoDB 모니터링 도구(예: Cloud Manager, Ops Manager 모니터링 에이전트)에 대한 읽기 전용 접근을 제공합니다.
{ role: "clusterMonitor", db: "admin" }
hostManager 전체 클러스터 (admin DB) 개별 서버를 모니터링하고 관리할 수 있는 권한을 제공합니다.
{ role: "hostManager", db: "admin" }
backup 전체 클러스터 (admin DB) mongodump와 같은 백업 작업을 수행할 수 있는 권한을 제공합니다.
{ role: "backup", db: "admin" }
restore 전체 클러스터 (admin DB) mongorestore와 같은 복원 작업을 수행할 수 있는 권한을 제공합니다.
{ role: "restore", db: "admin" }

 

db.getUsers();

생성된 가상의 사용자 리스트 출력 

 

db.auth("koo","kona5520!");

로그인

 

db.dropUser("koo");

생성된 사용자를 삭제 

 

다음단계를 위해 사용자 다시 만듦

 

db.changeUserPassword("koo","1234567");

비밀번호 변경

비밀번호는 적어도 7자리 이상으로 만들어야함

짧은 비번은 하루만에 뚫림

 

[Collection]

db.createCollection('members',{})

db.members.drop();

삭제

 

db.createCollection('members',{
capped:true,
size:1500,
max:20,
});

생성

 

db.getCollectionNames();

show collections

목록확인


use cms;

 

db.createUser({
user:"koo",
pwd:"1234567",
roles:[{role:"dbAdmin",db:"cms"}]
});

 

db.createCollection('board',{
capped:true,
size:1500,
max:10,
});

 

db.auth("koo","다른DB에만든사용자비번");

아이디가 같다고 같은 사용자아님 동명이인의 개념


[서버 세팅]

[nodejs]

node --version

nodejs 읎다

 

yum search epel-release

검색

 

yum install epel-release

설치

 

yum search nodejs

검색

 

yum install nodejs

설치

 

node --version

npm --version

둘다 잘 나오면 성공

 

[웹디렉토리 생성]

핵심 : 사용자, 권한

 

su cms

cd /home/cms

mkdir www

chmod 755 www

cd ..

chmod 755 cms

 

만약 다른 사용자로 만들었다면 chown 사용

 

[nginx 설정]

vi /etc/nginx/nginx.conf

 

서버블록의 root 경로를 

/home/cms/www;

로 변경 

 

systemctl restart nginx;

재실행

 

[nodejs]

su cms

cd /home/cms/www

 

npm install mongodb

몽고라이브러리 설치 

 

[js파일 하나 생성]

db.js

//해당 node서버에서 라이브러리를 호출 
const { MongoClient } = require('mongodb');

//mongodb 접속 경로 및 데이터베이스명 
const uri='mongodb://test.koona.kr:27017/cms';

var client = new MongoClient(uri);	//접속체크 
var db = null;

async function abc(){
	try{
		await client.connect();		//연결 응답 대기 상황  
		console.log("MongoDB connect success!");
	}catch(error){
		console.log(error);
	}finally{
	}
}

abc();	//해당 데이터베이스를 연결하는 함수를 호출

 

 

[js파일 업로드]

만든 js를 업로드하기

 

[js파일 실행]

이제 가동하자

node db.js

 

[몽고에 더미데이터 넣기]

db.board.insertOne({"idx":1,"subject":"공지사항 테스트","writer":"관리자","texts":"공지 테스트중"})
넣기

 

db.board.find();

확인

 

[js파일 재업]

//해당 node서버에서 라이브러리를 호출 
const { MongoClient } = require('mongodb');

//사용자 접속 정보
var userid = encodeURIComponent('koo');
var userpw = encodeURIComponent('비번');
var host = "test.koona.kr:27017";
var dbnm = "cms";

//mongodb 접속 경로 및 데이터베이스명 
const uri=`mongodb://${userid}:${userpw}@${host}/${dbnm}`;

var client = new MongoClient(uri);	//접속체크 
var db = null;

async function abc(){
	try{
		await client.connect();		//연결 응답 대기 상황  
		console.log("MongoDB connect success!");
		db = client.db(dbnm);	//DB연결 정보 및 컬렉션 연결 준비 
		var collection = db.collection('board');	//컬렉션 이름
		 
		var query = await collection.find({}).toArray();
		console.log("공지 리스트 : ", query);
	}catch(error){
		console.log(error);
	}finally{
	}
}

abc();	//해당 데이터베이스를 연결하는 함수를 호출

 

[서버에서 실행]

굿 👍

저작자표시 비영리 변경금지 (새창열림)
'데이터베이스' 카테고리의 다른 글
  • [서버] postgresql 설치, 세팅
  • [Mongo DB] 스터디
  • [Oracle] 백업, 복구
  • [Oracle] 기초 3
9na0
9na0
응애
  • 9na0
    구나딩
    9na0
  • 전체
    오늘
    어제
    • 분류 전체보기 (211)
      • Web (118)
      • Java (28)
      • 데이터베이스 (14)
      • 세팅 (12)
      • 과제 (3)
      • 쪽지시험 (2)
      • 정보처리기사 (4)
      • 서버 (25)
  • 블로그 메뉴

    • 링크

      • 포폴
      • 구깃
    • 공지사항

    • 인기 글

    • 태그

      net1
      io_dto
      exam1_1~10
      net3
      file24
      notice_writer
      java_io1~10
      spring-boot
      ab1
      datalist
      net4
      noticewriteok
      macbook pro m4
      file25_t
      re_java10
      re2
      net5~10
      Oracle
      net2
      file25
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.3
    9na0
    MongoDB + 서버
    상단으로

    티스토리툴바