Web Hacking/Study

Relational DBMS

박연준 2023. 7. 1. 22:55

Background: Relational DBMS

DBMS란?

일상 생활에서 생기는 다양한 정보를 기록하기 위해 다이어리와 노트를 사용하듯이, 컴퓨터도 정보를 기록하기 위해 데이터베이스 (Database)를 사용한다. 그리고 데이터베이스를 관리하는 애플리케이션을 **DataBase Management System(DBMS)**이라고 한다.

다수의 사람들이 데이터를 생성하고, 참조하고, 수정하는 웹 서버의 특수한 환경에 가장 적합한 자료구조로 채택된 것이 데이터베이스이며, 최근의 웹 서비스에는 거의 필수적으로 포함되어야 한다.

웹 서비스는 데이터베이스에 정보를 저장하고, 이를 관리하기 위해 **DataBase Management System (DBMS)**을 사용한다.

DBMS는 데이터베이스에 새로운 정보를 기록하거나, 기록된 내용을 수정, 삭제하는 역할을 한다.

DBMS는 다수의 사람이 동시에 데이터베이스에 접근할 수 있고, 웹 서비스의 검색 기능과 같이 복잡한 요구사항을 만족하는 데이터를 조회할 수 있다는 특징이 있다.

DBMS는 크게 관계형과 비관계형을 기준으로 분류하며, 다양한 종류의 DBMS가 존재합니다.

종류 대표적인 DBMS

Relational  
(관계형) MySQL, MariaDB, PostgreSQL, SQLite
Non-Relational  
(비관계형) MongoDB, CouchDB, Redis

Relational DBMS

**Relational DataBase Management System (RDBMS, 관계형 RDBMS)**는 1970년에 Codds가 12가지 규칙을 정의하여 생성한 데이터베이스 모델이다.

RDBMS는 행 (Row)과 열 (Column)의 집합으로 구성된 테이블의 묶음 형식으로 데이터를 관리하고, 테이블 형식의 데이터를 조작할 수 있는 관계 연산자를 제공한다.

Codds는 12가지 규칙을 정의했지만 실제로 구현된 RDBMS들은 12가지 규칙을 모두 따르지는 않았고, 최소한의 조건으로 앞의 두 조건을 만족하는 DBMS를 RDBMS라고 부르게 되었다.

RDBMS에서 관계 연산자는 **Structured Query Language (SQL)**라는 쿼리 언어를 사용하고, 쿼리를 통해 테이블 형식의 데이터를 조작한다.

SQL

**Structured Query Language (SQL)**는 RDBMS의 데이터를 정의하고 질의, 수정 등을 하기 위해 고안된 언어이다.

SQL은 구조화된 형태를 가지는 언어로 웹 애플리케이션이 DBMS와 상호작용할 때 사용된다.

SQL은 사용 목적과 행위에 따라 다양한 구조가 존재하며 대표적으로 아래와 같이 구분된다.

언어 설명

DDL  
(Data Definiton Language) 데이터를 정의하기 위한 언어이다.
데이터를 저장하기 위한 스키마, 데이터베이스의 생성/수정/삭제 등의 행위를 수행한다.  
DML  
(Data Manipulation Language) 데이터를 조작하기 위한 언어이다.
실제 데이터베이스 내에 존재하는 데이터에 대해 조회/저장/수정/삭제 등의 행위를 수행한다.  
DCL  
(Data Control Language) 데이터베이스의 접근 권한 등의 설정을 하기 위한 언어이다. 데이터베이스 내에 이용자의 권한을 부여하기 위한 GRANT와 권한을 박탈하는 REVOKE가 대표적이다.

DDL

웹 어플리케이션은 SQL을 사용해서 DBMS와 상호작용을 하며 데이터를 관리한다.

RDBMS에서 사용하는 기본적인 구조는 데이터베이스 → 테이블 → 데이터 구조 이다.

데이터를 다루기 위해 데이터베이스와 테이블을 생성해야 하며, DDL을 사용해야 한다.

DDL의 CREATE명령을 사용해 새로운 데이터베이스 또는 테이블을 생성할 수 있다.

  • 데이터베이스 생성

User이라는 데이터베이스를 생성하는 쿼리문이다.

CREATE DATABASE User;
  • 테이블 생성

 앞서 생성한 데이터베이스에 Board 테이블을 생성하는 쿼리문이다.

USE User;
# Board 이름의 테이블 생성
CREATE TABLE Board(
idx INT AUTO_INCREMENT,
boardTitle VARCHAR(100) NOT NULL,
boardContent VARCHAR(2000) NOT NULL,
PRIMARY KEY(idx)
);

DML

생성된 테이블에 데이터를 추가하기 위해 DML을 사용합니다.

 

새로운 데이터를 생성하는 INSERT, 데이터를 조회하는 SELECT, 그리고 데이터를 수정하는 UPDATE의 예시입니다.

 

  • 테이블 데이터 생성

Board 테이블에 데이터를 삽입하는 쿼리문이다.

INSERT INTO
	Board(boardTitle, boardContent, createdDate)
Values(
	'Hello',
	'World !',
	Now()
);
  • 테이블 데이터 조회

Board 테이블의 데이터를 조회하는 쿼리문이다.

SELECT
	boardTitle, boardContent
FROM
	Board
Where
	idx=1;
  • 테이블 데이터 변경

Board 테이블의 컬럼 값을 변경하는 쿼리문이다.

UPDATE Board SET boardContent='Users'
	Where idx=1;

DCL

데이터베이스 시스템에서 사용자 및 역할에 대한 권한을 관리하는 명령어들을 포함한다.

DCL 명령어를 사용하여 데이터베이스 내부의 객체(테이블, 뷰, 프로시저 등)에 대한 접근 권한 및 작업 권한을 부여하거나 취소할 수 있다.

  • GRANT

GRANT는 특정 사용자나 역할에 대해 데이터베이스 객체에 대한 권한을 부여한다.

 

 board 테이블에 대해 SELECT, INSERT 권한을 user 사용자에게 부여하는 예시 코드이다.

 

GRANT SELECT, INSERT ON board TO user;
  • Revoke

REVOKE는 데이터베이스 객체에 대한 권한을 취소합니다.

 

board 테이블에 대해 user 사용자의 INSERT 권한을 취소하는 예시입니다.

 

'Web Hacking > Study' 카테고리의 다른 글

SQL Injection 실습(2)  (0) 2023.07.01
Non-Relational DBMS  (0) 2023.07.01
SQL Injection 취약점  (0) 2023.07.01
CSS Injection 취약점  (0) 2023.06.26
Client Side Template Injection 취약점  (0) 2023.06.26