NoSQL
- DBMS는 다음과 같이 나뉨
> Relational(관계형): MySQL, MariaDB, PostgreSQL, SQLite
> Non-Relational(비관계형): MongoDB, CouchDB, Redis
> 관계형은 행과 열의 집합인 테이블 형식으로 데이터를 저장하고, 비관계형은 테이블 형식이 아닌 키-값 (Key-Value) 형태로 값을 저장함
MongoDB
- JSON 형태인 도큐먼트(Document)를 저장
- _id 필드가 Primary Key 역할을 맡음
- 연산자
이름 | 설명 |
$eq | 지정된 값과 같은 값 찾기(equal) |
$in | 배열 안의 값들과 일치하는 값 찾기(in) |
$ne | 지정된 값과 다른 값을 찾기(not equal) |
$nin | 배열 안의 값들과 다른 값 찾기(not in) |
$and | AND |
$or | OR |
$expr | 쿼리 언어 내에서 집계식 사용 가능 |
$regex | 지정된 정규식과 일치하는 문서 찾기 |
$text | 지정된 텍스트 검색 |
$where | Javascript 표현식을 만족하는 문서 찾기 |
- 쿼리 비교
SQL | MongoDB |
SELECT * FROM 테이블명; | db.테이블명.find() |
SELECT * FROM 테이블명 WHERE user_id="admin"; | db.테이블명.find( {user_id:"admin"} ) |
SELECT user_pw FROM 테이블명 WHERE user_id="admin"; | db.테이블명.find( {user_id:"admin"}, {user_pw:1,_id:0} ) |
Redis
- 키-값(Key-Value)의 쌍을 가진 데이터를 저장
- 다른 데이터베이스와 다르게 메모리 기반의 DBMS여서 빠른 속도가 특징
- 명령어
> GET key #key에 대한 value 조회
> SET key value #새로운 데이터 추가
> DEL key #데이터 삭제
> EXISTS ksy #데이터 유무 확인
CouchDB
- MongoDB와 같이 JSON 형태인 Document를 저장
- 웹 기반의 DBMS로, REST API 형식으로 요청을 처리
NoSQL Injection(MongoDB)
1) 방법
- 연산자를 활용하여 시도한다.
2) 워게임 내 문제
* 코딩을 통해 실행하면 더 간편할 것으로 생각되나 아직 시도 안해봄