[DataBase] 데이터베이스 포렌식 도구

 

데이터베이스


(1) 데이터베이스 포렌식 도구

  • 데이터베이스는 DBMS마다 다르고 용량이 커서 일반 포렌식 도구로 분석 수행 시 어려움이 있음

  • 각 DBMS의 감사와 관리 기능을 보완하는 도구를 사용하여 분석해야 함

 

1-1. Oracle LogMiner

  • 오라클 데이터베이스 버전 8i부터 사용할 수 있는 감사 도구

  • SQL 쿼리문을 적절하게 입력 > 바이너리 형식으로 된 Redo 로그를 분석할 수 있음

  • 분석뿐만 아닌, 변경 이전 시점으로 데이터를 되돌리는 데에도 유용하게 사용

 

1-1-1. LogMiner 기능

  • 데이터베이스의 변경 기록을 트랜잭션 / 사용자 / 테이블 / 시간대 별로 확인 가능

  • 데이터가 언제 변경되었는지 확인 가능

  • 시간의 흐름에 따른 데이터 성향과 패턴 분석 용이

 

참조 사이트 : www.dba-oracle.com/t_cbo_using_logminer.htm  

 

Using LogMiner

      Using LogMiner Oracle Database Tips by Donald BurlesonJuly 24, 2015 Someone has deleted Mr. Ford from Scott's EMP table, and everyone disavows any knowledge of the event. However, you are very suspicious of one of your users, who has a tendency of be

www.dba-oracle.com

 

1-2. Toad

  • Quest Software사에서 개발한 데이터베이스 관리 도구

  • 자동화 작업, 직관적 작업 흐름, 빌트인 기능 등으로 생산성을 극대화

  • 원하는 데이터에 빠르게 접근 가능하며, 서버나 데이터, 스키마를 동기화하고 비교하여 어떤 부분이 변했는지 쉽게 확인 가능

  • 자동화 기능으로 반복적 비교 작업, 쿼리문 튜닝, SQL 스캔 및 최적화를 수행

  • 지원하는 DBMS는 Oracle, SQL Server, DB2, SAP, MySQL

 

참조 사이트 : https://www.toadworld.com/

 

Toad World

Toad World homepage Join the millions of users who trust Toad products. With nearly 20 years of development, Toad leads the way in database development, database management, and data analysis.

www.toadworld.com

 

1-3. Adminer

  • PHP로 작성된 무료 도구

  • 데이터베이스, 테이블, 릴레이션, 인덱스, 사용자를 관리하는 데 사용

  • 사용자 이름과 비밀번호를 입력하여 데이터베이스 서버에 접속, 새로운 데이터베이스 생성, 기존 데이터베이스 조작 등이 가능

  • 지원하는 DBMS는 MySQL, MSSQL, Oracle, MongoDB, PostgreSQL 등

 

참조 사이트 : www.adminer.org/en/editor/  

 

Adminer Editor

Adminer Editor is both easy-to-use and user-friendly database data editing tool written in PHP. It is suitable for common users, as it provides high-level data manipulation.

www.adminer.org

 

1-4. SQLite Database Browser

  • 오픈 소스 기반의 SQL 도구로 SQLite 데이터베이스 파일 생성 및 변경 가능

  • 애플리케이션 자체에서 사용된 SQL 명령어 기록을 보는 것이 가능

  • 기본 기능은 SQLite 형식의 데이터베이스 파일 내부 인덱스, 레코드 등을 분석

  • csv 파일에서 테이블, SQL 덤프 파일에서 데이터베이스를 import 또는 export하는 기능

 

참조 사이트 : www.sqlitebrowser.org/dl/  

 

Downloads - DB Browser for SQLite

Windows Our latest release (3.11.2) for Windows: Note - If for any reason the standard Windows release does not work (e.g. gives an error), try a nightly build (below). Nightly builds often fix bugs reported after the last release. 😄 macOS Our latest relea

www.sqlitebrowser.org

 

1-5. Sequel Pro

  • Mac OS를 위한 오픈 소스 기반의 MySQL/MariaDB 데이터베이스 관리 도구

  • 설치와 수행이 빠르고, 초보자도 사용하기 쉬운 GUI 방식으로 구성

  • 프로그램을 실행하기 위한 Java가 필요하지 않고, 클라우드 서비스 지원

  • MySQL 데이터베이스를 로컬 또는 원격으로 접속 가능

 

참조 사이트 : www.sequelpro.com

 

Sequel Pro

Perfect Web Development Companion Whether you are a Mac Web Developer, Programmer or Software Developer your workflow will be streamlined with a native Mac OS X Application!

www.sequelpro.com


# Reference

 

http://www.yes24.com/Product/Goods/87579830

[DataBase] DCL (데이터 제어어)

 

데이터베이스


(1) DCL (Data Control Language, 데이터 제어어)

  • 데이터베이스 접근 및 사용에 대한 권한 할당이나 회수하는 명령어

  • GRANT, REVOKE, COMMIT, ROLLBACK 등이 있음

  • COMMIT, ROLLBACK은 TCL(Transaction Control Language)로 분류되는 경우도 있음

 

TCL : 데이터베이스 상태를 변화시키는 논리적 작업 단위

 

 

가) GRANT

  • 사용자에게 데이터베이스 오브젝트에 대한 권한 부여

[그림 1] GRANT

 

privilege_name

  • 사용자에게 부여된 접근 권한

  • 접근 권한은 시스템 권한과 오브젝트 권한으로 나뉨

 

[표 1] 시스템 권한과 오브젝트 권한

시스템 권한 CREATE
ALTER
DROP
...
오브젝트 권한 INSERT
SELECT
UPDATE
EXECUTE
...

 

 

Object_name

  • TABLE, VIEW, STORED PROC, SEQUENCE와 같은 데이터베이스 오브젝트 이름

 

user_name

  • 권한을 부여받을 사용자 이름

 

PUBLIC

  • 모든 사용자에게 권한을 부여할 경우 사용

 

ROLES

  • 권한들을 하나의 그룹으로 묶은 것

 

데이터베이스 사용자 수가 많을 때 권한 부여 및 회수를 좀 더 편리하게 한다.

 

 

다음은 몇 가지 시스템 ROLE에 들어있는 권한 목록이다.

 

[표 2] Microsoft Access 데이터 타입

System ROLE 권한
CONNECT CREATE TABLE
CREATE VIEW
CREATE SYNONYM
CREATE SEQUENCE
CREATE SESSION
...
RESOURCE CREATE PROCEDURE
CREATE SEQUENCE
CREATE TABLE
CREATE TRIGGER
...
DBA 모든 시스템 권한

 

RESOURCE : 주로 데이터베이스 오브젝트에 대한 접근을 제한할 때 사용

 

 

WITH GRANT OPTION

  • 해당 사용자가 다른 사용자에게 접근 권한을 부여할 수 있게 함

[그림 2] WITH GRANT OPTION

 

 

나) REVOKE

  • 사용자의 데이터베이스 오브젝트에 대한 접근 권한을 회수

[그림 3] REVOKE

 

 

다) COMMIT

  • RDBMS의 트랜잭션을 종료시키고 데이터베이스 내의 변화 내용이 다른 모든 사용자가 볼 수 있도록 함

  • 데이터 변경 시 아직 임시적인 상태로 있는 데이터를 저장 > 데이터가 변경 및 저장되었음을 확실히 함

  • 여기서 트랜잭션은 데이터베이스의 가장 작은 작업 단위이며, 데이터베이스에 내린 명령어의 연속

  • 트랜잭션은 프로그래머에 의해 수동적으로 수행될 수 있으며, 자동화 프로그램을 사용하여 자체적 수행도 가능

  • 보통 이전 COMMIT부터 이후 COMMIT 이전까지를 트랜잭션으로 봄 

[그림 4] COMMIT

 

DELETE 명령을 수행 후에 COMMIT을 입력하면, 해당 테이블에서 student_id가 '1420891'인 레코드를 삭제한 변경 상태를 확실하게 저장한다는 의미가 된다.

 

 

라) ROLLBACK

  • 말 그대로 이전 작업을 되돌리는 명령

  • 이전 COMMIT 또는 ROLLBACK 명령 전까지의 상태를 복구할 수 있다.

  • COMMIT과 사용법이 같음

[그림 5] ROLLBACK

 

student_info 테이블에 'Hannah'라는 학생 정보를 넣었다가 ROLLBACK 명령을 입력하면 테이블 갱신 이전 상태로 돌아가게 된다.

 

 

여기까지 SQL의 DDL, DML, DCL을 모두 확인하였다.

 

데이터베이스 포렌식을 효율적으로 하기 위해서는 SQL 쿼리문을 능숙하게 사용할 수 있어야 한다.


# Reference

 

http://www.yes24.com/Product/Goods/87579830

[DataBase] DML (데이터 조작어)

 

데이터베이스


(1) DML (Data Mgnipulation Language, 데이터 조작어)

  • 데이터베이스의 데이터 조회나 검색하는 명령어 SELECT

  • 데이터 삽입, 수정, 삭제하는 명령어 INSERT, UPDATE, DELETE

 

가) SELECT

  • 데이터베이스에서 원하는 데이터 조회

  • 다양한 활용 가능

  • 매우 자주 쓰이는 명령어 중 하나

[그림 1] SELECT

 

SELECT는 원하는 데이터를 뽑아내고 자 할 때 가장 많이 쓰는 쿼리 명령어로 WHERE, LIKE, HAVING, JOIN 등의 구문과 함께 쓰일 수 있다.

 

SELECT를 다음과 같이 다양하게 활용 가능하다.

 

AS

  • SELECT로 선택한 Column에 별칭을 부여하는 역할

  • 결과 테이블이 출력될 때 Column 이름은 별칭으로 나타남

[그림 2] SELECT AS

 

ORDER BY

  • 결과 테이블의 레코드를 오름차순 또는 내림차순으로 정렬 

[그림 3] SELECT ORDER BY

 

WHERE

  • SELECT 구문에 조건을 추가할 때 사용

  • 일반적 구문 형식은 가장 기본적인 select ~ from 구문 뒤에 where 키워드와 조건을 붙임

[그림 4] SELECT WHERE

 

조건식은 주로 'Column 이름', '연산 기호', '조건 값' 순서로 온다.

 

[그림 5] SELECT WHERE 조건식

 

LIKE

  • WHERE 구문 안에 위치

  • SELECT에서 뽑은 Column 안의 문자열 데이터의 패턴을 명시하여 찾을 때 사용

  • 조건절에서 어떻게 사용하느냐에 따라 수많은 로그에서 내가 원하는 로그만을 출력할 때 매우 유용하게 사용

[그림 6] SELECT LIKE

 

문자열의 패턴을 명시할 때는 와일드카드라는 것을 사용한다.

 

DB 종류마다 와일드카드가 조금씩 다르며, 다음 표와 같이 대표적인 와일드카드가 있다.

 

 

[표 1] 와일드카드 설명

기호 설명 예시
% 0개 또는 여러 개의 문자가 올 수 있다는 의미 se%는 se, seek, seel, sell, secret 등 se로 시작하는 문자열 의미
c%t는 cat, cut 등 c로 시작하고 t로 끝나는 문자열 의미
%p는 app, cup, sip 등 p로 끝나는 문자열 중 하나를 의미하며, 0개의 문자열이 올 수도 있으므로 p도 해당
_ 하나의 문자가 올 수 있다는 의미 s_t는 sit, sat 등 s와 t 사이에 하나의 문자가 오는 문자열 의미
[] []안에 명시한 문자들 중 하나의 문자가 올 수 있다는 의미  h[i,a]t는 hit 또는 hat을 의미 
- 문자의 범위를 나타낼 때 사용 h[a-l]t는 h와 t 사이에 a부터 l 중 하나의 문자가 올 수 있다는 것을 의미
hat, hit가 여기에 해당
^ NOT을 의미 h[^a-l]t는 h와 t 사이에 a부터 l까지의 문자를 제외한 다른 하나의 문자만이 들어올 수 있다는 것을 의미
hat, hit은 여기에 포함되지 않고, hot, hut이 포함

 

MS Access의 경우 %는 *로, _는 ?로, ^는 !로 사용하며, 하나의 숫자 문자를 나타낼 때는 #을 사용한다.

 

 

AND, OR, NOT

  • WHERE 구문과 함꼐 조건문을 만족하는 레코드만을 뽑아낼 때 사용

[그림 7] AND, OR, NOT

 

 

BETWEEN

  • WHERE 구문에서 조건을 명시할 때 값의 범위 표현

[그림 8] BETWEEN

 

IN

  • WHERE 구문의 조건에서 다양한 값을 명시할 때 사용

[그림 9] IN

 

IN 안에 또 다른 SELECT 구문을 사용하여 조건에 여러 값을 명시할 수 있다.

 

[그림 10] IN SELECT

 

IN 안의 SELECT 구문이 가장 먼저 수행 된다.

 

먼저 email_list 테이블에서 email 문자열 데이터가 '@gmail.com'으로 끝나는 것들 중 user_name을 뽑아낸다.

 

여기서 뽑아낸 데이터들이 바깥에 있는 WHERE 구문 emp_name의 조건 값이 된다.

 

만약 IN 안의 SELECT 구문을 실행하여 얻어낸 데이터들이 'Betty', Carol', 'Demian' 이라면 employee_table에서 emp_name이 'Betty', 'Carol', 'Demian'인 레코드의 emp_name과 emp_num 정보를 보여주는 결과 테이블이 출력된다.

 

COUNT, SUM, AVG, MIN, MAX

  • 다음과 같은 함수를 집계 함수라고 하며, 숫자 데이터를 계산할 때 유용

  • COUNT는 조건을 만족하는 모든 레코드의 개수를 셈

  • SUM은 숫자 값을 담는 Column의 데이터 총 합을 계산

  • AVG는 숫자 값을 담는 Column의 데이터 평균 값을 계산

  • MAX는 해당 Column의 가장 큰 값을 반환

  • MIN은 해당 Column의 가장 작은 값을 반환

[그림 11] COUNT, SUM, AVG, MIN, MAX

 

HAVING ~ GROUP BY

[그림 12] HAVING ~ GROUP BY

 

GROUP BY는 주로 위에서 소개한 집계 함수와 함께 쓰인다.

 

집계 함수의 결과를 특정 Column을 기준으로 그룹을 짓는 역할을 한다.

 

HAVING은 GROUP BY와 함께 쓰이며 집계 함수 조건절을 추가할 때 사용한다.

 

 

[표 2] Group By 실행 결과 테이블

Employee Number Country
20 USA
15 China
11 Argentina
8 Germany
5 France
4 Canada
4 UK
3 Brazil
2 Korea

 

JOIN

  • 둘 이상의 테이블이 서로 연관된 Column을 가지고 있을 때 JOIN 명령으로 테이블들의 레코드 결합 가능

 

테이블 1 : Order_Info

cust_num cust_name order_date total_charge
001 Alice Green 2020-01-04 257,800
002 Bob Smith 2020-01-01 25,000
003 Carol White 2020-01-02 65,000
004 Daniel Cruze 2020-01-03 147,350

 

 

테이블 2 : Customer_Info

cust_num user_ID email birth
001 alice0306 hialice_0306@gmail.com 1997-03-06
003 sing_carol sing_carol@gmail.com 1998-10-15
005 espressoholic needscaffein@gmail.com 1995-11-17
008 blacksheep_DC blacksheep_DC@gmail.com 1999-06-23

 

위 두 개 테이블에서 동일한 Column은 cust_num이다

 

따라서 cust_num을 기준으로 두 개의 테이블을 결합할 수 있다.

 

JOIN은 결합 형식에 따라 INNER JOIN, LEFT JOIN, RIGHT JOIN이 있다.

 

INNER JOIN

  • 두 테이블에 모두 매치되는 값을 가진 레코드만 반환

[그림 13] INNER JOIN

cust_name user_ID email
Alice Green alice0306 hialice_0306@gmail.com
Carol White sing_carol sing_carol@gmail.com

 

 

LEFT (OUTER) JOIN

  • 반드시 출력되는 테이블을 결정

[그림 14] LEFT (OUTER) JOIN

cust_name user_ID email
Alice Green alice0306 hialice_0306@gmail.com
Carol White sing_carol sing_carol@gmail.com
NULL espressoholic needscaffein@gmail.com
NULL blacksheep_DC blacksheep_DC@gmail.com

 

왼쪽 테이블은 반드시 출력되어야 하므로, Customer_Info의 cust_num과 일치하지 않는 레코드로 출력

(위 예문에서는 Order_Info)

 

 

RIGHT (OUTER) JOIN

  • 반대로 오른쪽 테이블이 반드시 출력

[그림 15] RIGHT (OUTER) JOIN

cust_name user_ID email
Alice Green alice0306 hialice_0306@gmail.com
Bob Smith NULL NULL
Carol White sing_carol sing_carol@gmail.com
Daniel Cruze NULL NULL

 

이번에는 오른쪽 테이블(Customer_Info)이 반드시 출력된다.

 

 

나) INSERT INFO

  • 테이블에 새로운 레코드를 추가

  • 테이블의 Column이 어떠한 순서로 조직되어 있는지 모른다면, 테이블명 뒤에 Column을 나열

  • 그 순서대로 VALUES 뒤에 추가할 데이터를 입력

[그림 16] INSERT INFO (1)

 

만약 테이블의 Column 순서를 알고 있다면, 위 예시처럼 Column을 나열할 필요가 없다.

 

다만 추가할 데이터를 반드시 Column 순서대로 입력해야 한다.

 

[그림 17] INSERT INFO (2)

 

 

다) UPDATE

  • 테이블의 레코드 데이터를 갱신

[그림 18] UPDATE (1)

 

WHERE 절로 데이터를 갱신할 레코드를 지정해주지 않으면 테이블의 모든 레코드 데이터가 갱신되므로 주의한다.

 

[그림 19] UPDATE (2)

 

 

라) DELETE

  • 테이블의 레코드 데이터 삭제

  • UPDATE와 마찬가지로 WHERE 절로 갱신할 레코드를 지정해주지 않으면 테이블의 모든 레코드 데이터 삭제

[그림 20] DELETE


# Reference

 

http://www.yes24.com/Product/Goods/87579830

[DataBase] DDL (데이터 정의어)

 

데이터베이스


(1) SQL (Structured Query Language)

  • 관계형 데이터베이스를 조작하기 위한 표준 언어

  • 기본 구문 형태는 Select, 원하는 컬럼 이름, From, 테이블 이름

 

[그림 1] SQL 명령

 

SQL은 대소문자를 구분하지 않으며, SELECT와 select 또는 Select 모두 같은 명령으로 인식한다.

 

SELECT 뒤에 *는 모든 Column을 조회한다는 의미이다.

 

SQL은 명령어의 역할에 따라 DDL, DML, DCL로 구분할 수 있다.


(2) DDL (Data Definition Language, 데이터 정의어)

  • 데이터 구조를 정의하는 명령어

  • CREATE, DROP, TRUNCATE, ALTER 등이 있음

 

가) CREATE

  • 데이터베이스 또는 테이블 생성

[그림 2] CREATE DATABASE

 

[그림 3] CREATE DATABASE

 

데이터베이스는 다양한 데이터 타입을 담을 수 있으므로, 테이블을 생성하면서 각각의 Column에 이름과 함께 데이터 타입을 지정해주어야 한다.

 

 

[표 1] Oracle 데이터 타입

데이터 타입 설명
varchar2 (size) 가변 길이 문자열 저장
size는 1Byte에서 4KB까지 지정 가능
nvarchar2 (size) 가변 길이 유니코드 문자열 저장
size를 명시해야 하며 최대 4KB까지 지정 가능
number ANSI SQL 데이터 타입에서 integer / int / smallint 역할
정수를 저장
float 소수점 아래 숫자를 포함한 수 저장
date 날짜 정보를 담음
저장 형식은 환경 변수 NLS_DATE_FORMAT에서 확인 가능
timestamp 날짜 / 시간 관련 정보를 담음
DATE (YEAR, MONTH, DAY), TIME (HOUR, MINUTE, SECOND)
char (size) 고정 길이 문자열 저장
size는 1Byte에서 2KB까지 지정 가능
nchar (size) 고정 길이 유니코드 문자열 저장
size는 1Byte에서 2KB까지 지정 가능

 

 

[표 2] MySQL 데이터 타입

데이터 타입 설명
char (size) size 만큼의 고정 길이 문자열
문자열 길이는 최대 255까지 가능
varchar (size) 최대 size만큼의 길이의 문자열 담음
최대 255까지의 문자열 저장 가능
255를 넘어선 문자열은 text 타입으로 바뀜
text 최대 65,353 Byte 문자열을 담음
int (size) -2,147,483,648부터 2,147,483,647까지 정수 담음
앞에 unsigned를 지정한다면 0부터 4,294,967,295까지 정수 담음
size로 담을 수 있는 최대 정수를 정할 수 있음
float (size, d) 소수점을 가지는 수를 담음
size로 담을 수 있는 최대 숫자를 정할 수 있음
d로 표현할 수 있는 소수점 자리수를 정할 수 있음
date() 날짜 데이터를 담음
형식 : YYYY-MM-DD
datetime() 날짜 / 시간 정보를 담음
형식 : YYYY-MM-DD hh : mm : ss
time() 시간 데이터를 담음
형식 : hh : mm : ss
year() 두 자리 또는 네 자리 숫자로 표기된 연도 데이터
형식 : YYYY 또는 YY

 

 

[표 3] SQL Server 데이터 타입

데이터 타입 설명
char (n) 고정 길이 문자열 데이터
n으로 길이 지정
최대 8000개 문자 저장 가능
varchar (n) 가변적 길이 문자열 데이터
n으로 최대 저장 가능 길이 지정
최대 8000개 문자 저장 가능
text 가변적 문자열 데이터
최대 2GB까지 저장 가능
nchar 고정 길이 유니코드 문자열 데이터
최대 4000개 문자 저장 가능
nvarchar 가변 길이 유니코드 문자열 데이터
최대 4000개 문자 저장 가능
ntext 가변 길이 유니코드 문자열 데이터
최대 2GB까지 저장 가능
bit 0 또는 1 또는 Null
int -2,147,483,648부터 2,147,483,647까지의 정수 데이터
smallmoney -214,748.3648부터 214,748.3647까지의 통화 데이터
money -922,337,203,685,477.5808부터 922,337,203,685,477.5007까지의 통화 데이터
float (n) 소수점을 포함하는 숫자 데이터
n으로 소수점 자릿수 정할 수 있음
datetime 날짜 / 시간 정보를 담음
형식 : YYYY-MM-DD hh : mm : ss
datetime2 datetime과 같지만 조금 더 정확한 날짜 / 시간 정보를 담음
형식 : YYYY-MM-DD hh : mm : ss
date 날짜 정보를 담음
형식 : YYYY-MM-DD
time 시간 정보를 담음
timestamp 테이블의 Row가 생성 또는 갱신될 때마다 변경되는 고유 숫자
테이블 내 자체적인 시간을 따르며 실제 시간과 일치하지 않음
xml XML 형식 데이터 저장
최대 2GB
table 추후 작업을 위해 결과 값을 저장

 

 

[표 4] Microsoft Access 데이터 타입

데이터 타입 설명
Text size 만큼의 고정 길이 문자열
문자열 길이는 최대 255까지 가능
Memo 최대 size만큼의 길이 문자열을 담음
최대 255까지의 문자열 저장 가능
255를 넘어선 문자열은 text 타입으로 바뀜
Byte 최대 65,353 Byte의 문자열을 담음
Integer -32,768부터 32,767까지의 정수를 담음
Long -2,147,483,648부터 2,147,483,647까지의 정수를 담음
Single 소수점 아래의 숫자 표현 가능
4Byte
Double 소수점 아래의 숫자 표현 가능
8Byte
Currency 통화 데이터를 담음
15자리의 숫자와 소수점 아래 4자리까지 표현 가능
Date / Time 날짜 / 시간 데이터를 담음
Yes / No Yes/No, True/False, On/Off와 같은 논리 데이터를 담음
Ole Object 이미지, 오디오, 비디오 등을 저장할 수 있음
Hyperlink 웹 페이지를 포함한 하이퍼링크를 담음 

 

 

나) DROP

  • 데이터베이스 또는 테이블 삭제

  • 내부 데이터가 모두 사라지므로 사용 시 주의 필요

  • 데이터베이스 DROP할 경우 관리자 권한 필요

 

[그림 4] DROP DATABASE

 

[그림 5] DROP TABLE

 

 

다) TRUNCATE

  • DROP과 비슷한 명령어

  • 테이블 자체는 유지하면서 내부 데이터만 전부 삭제할 때 사용

 

[그림 6] TRUNCATE TABLE

 

 

라) ALTER

  • Column을 추가 또는 제거하거나 데이터 타입을 변경하는 데 쓰이는 명령어

  • MODIFY의 경우 DBMS마다 구문이 조금씩 다름

 

1) ALTER ~ ADD

[그림 7] ALTER ~ ADD

 

2) ALTER ~ DROP

[그림 8] ALTER ~ DROP

 

3) ALTER ~ MODIFY

[그림 9] ALTER _ MODIFY

 

4) MSSQL / Oracle

[그림 10] MSSQL/Oracle

 

5) SQL Server / MS Access

[그림 11] SQL Server / MS Access


# Reference

 

http://www.yes24.com/Product/Goods/87579830

'DB' 카테고리의 다른 글

[DataBase]DCL (데이터 제어어)  (0) 2020.03.20
[DataBase] DML (데이터 조작어)  (0) 2020.03.20
[DataBase] DBMS(Database Management System)  (0) 2020.03.18
[DataBase] 데이터베이스 모델  (0) 2020.03.16
[DataBase] 데이터베이스 기초  (0) 2020.03.06

[Network] 응용 계층

 

네트워크 보안


(1) 응용 계층 (7계층 / Application Layer)

1-1. 응용 계층 프로토콜

  • OSI 7계층 모델의 최상위 계층

  • 대부분 관련 응용 프로그램이 별도로 존재

  • 해당 응용 프로그램은 여러 프로토콜에 대하여 사용자 인터페이스를 제공

 

FTP (File Transfer Protocol / 20, 21)

  • 파일 전송을 위한 가장 기본적인 프로토콜

  • 클라이언트와 서버가 대화형으로 통신 가능 (원격 컴퓨터 디렉토리 파일 목록 문의 / 명령어 사용법 대화식)

  • 전송되는 파일 형식 지정 가능

  • 사용 가능 파일 형식은 텍스트나 바이너리 파일

  • 파일 전송 전에 먼저 서버에 로그인해야 하며, 사용자는 로그인 이름과 패스워드를 입력하여 클라이언트 인증

  • 서버는 검증되지 않은 사용자 경우, 파일 전송 거부가 가능하며, 여러 클라이언트가 동시에 서버 접근 가능

 

Telnet (23)

  • 사용자가 원격에 있는 서버에 로그인하도록 TCP 연결 설정

  • 단말기가 원격 컴퓨터 바로 옆에 있는 것처럼 직접 조작 가능

  • 원격 컴퓨터에서 수행한 결과를 단말기에 보여주며, 사용자 단말기가 원격 컴퓨터에 직접 연결된 것처럼 보이게 함

 

SMTP (Simple Mail Transfer Protocol / 25)

  • TCP / IP에서 많이 사용하는 응용 서비스 중 하나, 메일 서비스

  • 메일 서비스는 빠르고 편리해 많이 사용하며, 텍스트나 실행 파일 등을 손쉽게 전송 가능

  • 원격 컴퓨터나 네트워크 연결에 장애가 발생한 경우에도 통신 가능

  • 송신자가 전송한 메일 메시지는 목적지 컴퓨터나 네트워크 장애가 복구될 때까지 기다리며, 복구되면 배달함

  • 위와 같은 전송 방법을 지연 배달이라 하며, 메일 시스템에서는 지연 배달을 위해 스풀링 기법 이용

  • 사용자가 메일 메시지를 전송하면 시스템은 전송 시각과 목적지 주소, 수신자, 송신자 등의 값을 개별 스풀에 복사

  • 그후 메일 시스템은 원격 컴퓨터로 메일 메시지를 백그라운드로 전송 

 

DNS (Domain Name System / 53)

  • 도메인 이름 주소를 통해 IP 주소를 확인할 수 있는 프로토콜

 

TFTP (Trivial File Transfer Protocol / 69)

  • FTP처럼 파일을 전송하기 위한 프로토콜

  • 그러나 UDP 패킷을 사용하여 FTP와 달리 인증 기능 제공하지 않음

 

HTTP (HyperText Transfer Protocol / 80)

  • 인터넷을 위해 사용하는 가장 기본 프로토콜

 

POP3 (Post Office Protocol 3 / 110) & IMAP (Internet Message Access Protocol / 143)

  • POP3는 메일 서버로 전송된 메일을 확인할 때 사용하는 프로토콜

  • IMAP도 POP3와 같으나, 메일을 읽은 후에도 메일이 서버에 남는다는 점이 다름

 

RPC (Remote Procedure Call / 111)

  • Sun의 Remote Procedure Call을 나타냄

 

NetBIOS (Network Basic Input Output System / 138)

  • IBM에서 개발했지만 윈도우에서 차용

  • 내부 네트워크의 프린터처럼 기본적인 사무기기와 윈도우 시스템 간의 파일 공유를 위한 것으로 항상 열려 있음

  • NBT (NetBIOS over TCP) 프로토콜을 사용하여 원격 인터넷으로 전달 가능

 

SNMP (Simple Network Management Protocol / 161)

  • 네트워크 관리와 모니터링을 위한 프로토콜


# Reference

 

https://www.hanbit.co.kr/store/books/look.php?p_code=B2228799661

'Network' 카테고리의 다른 글

[Network] 전송 계층  (0) 2020.03.19
[Network] 네트워크 계층  (0) 2020.03.19
[Network] 데이터 링크 계층 (DataLink Layer)  (0) 2020.03.18
[Network] 물리 계층 (Physical Layer)  (0) 2020.03.18
[Network] 네트워크 보안 기초  (0) 2020.03.11

[Network] 전송 계층

 

네트워크 보안


(1) 전송 계층 (4계층 / Transport Layer)

1-1. 전송 계층에 대한 이해

  • 4계층 대표 프로토콜은 TCP

  • TCP도 주소를 가지고 있으며, 이를 포트라 함

  • MAC 주소가 네트워크 카드의 고유 식별자이고, IP 시스템의 논리적 주소라면, 포트는 시스템에 도착 후 패킷이 찾아갈 응용 프로그램과 통하는 통로 번호 

 

포트는 0~65535 (2**16 -1)번까지 존재하며, IP나 MAC 주소처럼 출발지와 목적지에 응용 프로그램별로 포트 번호를 가지고 통신한다.

 

0~1023번 (1,024개)을 잘 알려진 포트라고 부른다.

 

보통 0번 포트는 사용하지 않으며, 1023번 포트까지는 대부분 고유 용도가 있다.

 

 

[표 1] 주요 포트와 서비스

포트 번호 서비스 포트 번호 서비스
20 FTP-Data 80 HTTP
21 FTP 110 POP3
23 Telnet 111 RPC
25 SMTP 138 NetBIOS
53 DNS 143 IMAP
69 TFTP 161 SNMP

 

표에 나열되어 있는 것은 대부분 목적지 포트이다.

 

목적지 포트와 달리, 출발지 포트는 보통 1024번부터 65535번 사이에서 사용하지 않는 임의의 포트를 응용 프로그램별로 할당하여 사용한다.

 

예로 클라이언트가 인터넷에 존재하는 웹 서버에 접속한다고 가정하면, 웹 서버의 서비스 포트는 보통 80번이니 패킷 구조는 다음과 같다.

 

[그림 1] 클라이언트가 웹 서버에 접속할 때 패킷 구조

 

출발지 포트는 시스템에서 임의로 정해지게 되니 알 수가 없다.

 

대략 3000번대의 포트가 임의로 할당되면 다음과 비슷하다.

 

[그림 2] 시스템에서 임의로 포트를 할당한 출발지 패킷 구조


(2) 전송 계층 프로토콜

  • 전송 계층은 OSI 7계층에서 4번째 계층으로, 응용 프로그램 주소를 포트 번호로 이용해 통신 하는 프로토콜

 

2-1. TCP

  • 전송 계층에서 동작하는 연결 지향형 프로토콜

  • 데이터의 흐름을 관리하고 데이터가 정확한지 확인

 

2-1-1. TCP의 특징

  • 높은 신뢰성

  • 가상 회선 연결 방식

  • 연결 설정 / 해제

  • 데이터 체크섬

  • 시간 초과와 재전송

  • 데이터 흐름 제어

 

TCP는 일단 연결이 설정되면 해제되기 전까지 송신 시스템과 목적지 시스템이  계속해서 대화를 시도한다.

 

송신 시스템은 보내는 시스템에 데이터를 전송, 목적지 시스템은 데이터를 받은 경우 이에 응답하도록 되어 있다.

 

만약 목적지 시스템이 받은 데이터에 응답을 하지 않을 경우, 송신 시스템은 일정 시간을 대기한 후 같은 데이터를 재전송한다.

 

이러한 통신 방식을 사용하기 때문에 보내는 데이터에 대한 신뢰성이 확보된다.

 

 

다음은 TCP 패킷의 구조이다.

 

[그림 3] TCP 헤더

 

[표 2] TCP 패킷 내용

필드 이름 길이 내용
S.Port 2Bytes 패킷의 출발지 포트 번호를 가리키며 0~65535 값 중 하나
D.Port 2Bytes 패킷의 목적지 포트 번호
Seq.Number 4Bytes 패킷의 순서 값
Ack.Number 4Bytes 통신 상대의 패킷 순서 값
Data Offset 4bits

TCP 패킷 헤더 길이를 나타내는데, 32bits (4Bytes)가 몇 행인지 가리킴

최소 값은 5

Reserved 6bits 나중에 필요할 때 사용하려고 남겨둔 공간
Control Bits 6bits

URG (Urgent) : 1이면 헤더 마지막 필드인 긴급 포인터 내용 실행

ACK (Acknowledgement) : 1이면 확인 번호 필드가 유효

PSH (Push) : 1이면 송신자에게 높은 처리율 요구

RST (Reset) : 1이면 TCP 연결 다시 설정

SYN (Synchoronize) : 1이면 연결 요청과 설정, 확인 응답에서 순서 번호 동기화

FIN (Finish) : 1이면 TCP 연결 종료

Window 2Bytes

TCP는 흐름 제어 때 슬라이딩 윈도우 & 혼잡 윈도우 방법 사용

슬라이딩 윈도우 : 데이터를 한 번에 처리할 수 있는 버퍼의 용량을 의미하는 윈도우 개념 사용, 송신 시스템이 전송한 전체 세그먼트에 대한 확인 메시지 수신하기 전에 다른 세그먼트를 전송하도록 도와줌

 

혼잡 윈도우 : 네트워크 혼잡 문제 해결을 위해 송신 시스템이 사용하는 방법, 네트워크 혼잡 발견 시에 보내는 데이터 양을 조절해 줄이고 혼잡이 줄어들면 다시 원래 보내던 만큼 데이터 양을 늘림

Checksum 2Bytes 데이터 오류 검출을 위한 값
Urgent Pointer 2Bytes Control Bits가 URG 경우, 현재 전송되는 데이터와 관계없는 TCP 데이터를 보내 우선 처리시에 사용, 이때 우선 처리하려는 긴급 데이터의 마지막 바이트 위치를 Urgent Pointer로 나타냄
Options 가변 옵션의 종류와 길이, 데이터를 저장
Padding 가변 옵션이 32bits가 안 되면 나머지 비트를 0으로 채움
Data 가변 전송하고자 하는 데이터를 저장

 

TCP가 연결 지향형 프로토콜이라는 의미는 패킷을 주고 받기 전에 미리 연결을 맺어 가상 경로를 설정하여 이 가상 경로를 통해 모든 데이터가 전송 된다는 것이다.

 

가상 경로를 설정하려면 연결을 설정하고 종료하는 두 과정이 필요한데, 연결을 설정하는 과정을 흔히 '3-Way 핸드셰이킹'이라고 한다.

 

[그림 4] TCP에서 연결 생성 과정

 

 

1) 두 시스템이 통신을 하기 전의 클라이언트는 포트가 Closed 상태이며, 서버는 해당 포트로 항상 서비스를 제공할 수 있는 Listen 상태이다.

 

2) 클라이언트가 처음 통신을 하고자 하면, 임의의 포트 번호가 클라이언트 프로그램에 할당되고 클라이언트는 SYN Sent 상태가 된다. (서버에 연결하고 싶다는 일종의 표시)

 

3) 서버는 클라이언트 연결 요청을 받고, SYN Received 상태가 되며 클라이언트에 연결을 해도 좋다는 의미로 SYN + ACK 패킷을 보낸다.

 

4) 마지막으로 클라이언트는 연결 요청에 대한 서버 응답을 확인했다는 표시로 ACK 패킷을 서버로 보낸다.

 

 

TCP에서의 연결 종료 과정은 연결 생성 과정보다 중요성이 조금 떨어지지만 역시 중요하다.

 

[그림 5] TCP에서 연결 해제 과정

 

1) 두 시스템이 통신하는 중에는 클라이언트와 서버 모두 Established 상태이다.

 

2) 통신을 끊고자 하는 클라이언트가 서버에 FIN 패킷을 보낸다. (이때, 클라이언트는 Close Wait 상태가 됨)

 

3) 서버는 클라이언트 연결 종료 요청을 확인하고, Close Wait 상태가 된다.

 

클라이언트에 응답으로 ACK 패킷을 보낸 뒤 서버도 클라이언트의 연결을 종료하겠다는 의미로 FIN 패킷을 보낸다.

 

4) 마지막으로 클라이언트가 서버로부터 FIN 패킷을 받으면 Closed 상태가 되고 클라이언트는 연결 종료 요청에 대한 서버의 응갑을 확인했다는 의미로 ACK 패킷을 서버에 보낸다.

 

이 패킷을 받은 뒤 서버는 Closed 상태가 된다.

 

 

2.2 UDP

  • TCP와 달리 비연결 지향형 프로토콜

  • 상대방이 보낸 응답을 확인하지 않고, 송신 시스템이 전송하는 데이터에 대한 목적지 시스템의 확인 절차를 생략하므로 네트워크에 부하를 주지 않는 장점을 지님

  • 그러나 데이터 자체의 신뢰성이 없으므로 수신한 데이터는 무결성 보장을 받지 못함

 

2-2-1. UDP의 특징

  • 비연결 지향형

  • 네트워크 부하 감소

  • 비신뢰성

  • 전송된 데이터의 일부가 손실됨

 

UDP는 송신 시스템과 목적지 시스템 사이의 상호 통신이 이루어지지 않아 전송되는 데이터 중 일부가 손실되는 경우 손실 데이터에 대한 재전송 요구를 하지 않는다.

 

손실 된 데이터는 그대로 둔 채 나머지 데이터를 전송하며, UDP는 비연결 지향형 프로토콜이라 송신 시스템은 손실된 데이터 정보를 알 수 없어 손실 데이터를 재전송하지 않는다.

 

최근 네트워크 신뢰도가 매우 높아져 수신된 데이터 무결성을 보장받지 못해도 UDP를 사용하면 효율성 높은 데이터 전송을 제공하는 경우가 많아 점차 많이 사용된다.

 

 

다음은 UDP 패킷 구조이다.

 

[그림 6] UDP 패킷 구조

 

[표 3] UDP 패킷 내용 

필드 이름 길이 내용
S.Port 2Bytes 패킷의 출발지 포트 번호로, 0~65535 값 중 하나
D.port 2Bytes 패킷의 목적지 포트 번호
Length 2Bytes UDP 헤더와 데이터 필드 포함 전체 패킷 길이
Checksum 2Bytes 데이터 오류 검출을 위한 값
Data 가변 전송하고자 하는 데이터 저장

# Reference

 

https://www.hanbit.co.kr/store/books/look.php?p_code=B2228799661

'Network' 카테고리의 다른 글

[Network] 응용 계층  (1) 2020.03.19
[Network] 네트워크 계층  (0) 2020.03.19
[Network] 데이터 링크 계층 (DataLink Layer)  (0) 2020.03.18
[Network] 물리 계층 (Physical Layer)  (0) 2020.03.18
[Network] 네트워크 보안 기초  (0) 2020.03.11

+ Recent posts