일일 정리

Authoritative DNS 서버, 데이터베이스, SELECT 문의 이해

mysecurity 2025. 2. 20. 00:01

목차

1. Authoritative DNS 서버

1-1 /etc/named.conf 파일 설정

1-2 /var/named/ast09.sec.zone 파일 설정

2. 데이터베이스

2-1 관계형 데이터베이스

2-2 SQL (Structured Query Language)

 

3. SELECT 문의 이해

3-1 select 문

3-2 SQL 문

3-3 다양한 select 문 활용

 

 

1.  Authoritative DNS 서버

Authoritative DNS 서버는 특정 도메인에 대한 ip주소를  직접적으로 알려주는 서버이다.

 

1-1 /etc/named.conf 파일 설정

이전 실습에서 실습 서버에 /etc/named.conf 파일을 생성하였다. 기존 파일에 다음과 같은 구문을 추가한다.

options {
 	directory "/var/named";
 };
 
zone "." {
	 type hint;
 	file "named.ca";
 };

// 추가 //
zone "ast09.sec." {
 	type master;
 	file "ast09.sec.zone";
 };

 

'ast09.sec.' 에 대한 설정으로, 'ast09.sec.zone'에 'ast09.sec.'에 대한 실제 정보가 들어있다는 내용이다. 이와 같이 내가 찾는 실제 정보가 들어있으므로 master 타입으로 설정한다.

설정 파일의 경로는 '/var/named' 이므로 'ast09.sec.zone' 파일은 이 경로에 저장한다.

 

내가 가지고 있는 정보를 물어보면 master 타입, 내가 가지고 있지 않은 정보를 물어보면 hint 타입을 참조한다.

 

1-2 /var/named/ast09.sec.zone 파일 설정

 /var/named/ast09.sec.zone 파일의 내용은 다음과 같다.

$TTL    1D
@   IN   SOA  ns.ast09.sec.   root.ns.ast09.sec. (
                                   3         ; Serial
                                   1D        ; Refresh
                                   1H        ; Retry
                                   1W        ; Expire
                                   3H )      ; Minimum
; Name Server
              IN     NS       ns.ast09.sec.
; Host address
              IN     A        192.168.10.141
ns            IN     A        192.168.10.141
www           IN     A        192.168.10.142

abc      IN     CNAME    www

 

TTL은 메모리에서 쓰지 않는 데이터를 지우는 기법 중 하나이다.

- TTL(time to live)

: 소규모 메모리에 사용한다. 타이머를 사용하여 타임이 만료되면 삭제한다. 타임 만료 후 메모리 부족 시 삭제한다. (2025-02-20 수정)

- LRU(Least Recently Used)

: 대규모 메모리에 사용한다. 최근 사용되지 않은(가장 오래된) 데이터를 삭제한다.

 

네임 서버는 무조건 ns.ast09.sec.와 같이 ns를 붙인다.

 

시리얼 넘버는 1로 시작하며 파일의 내용을 고칠 때마다 1씩 증가시킨다.(상한선 존재)

 

Name Srever 부분에서 네임서버 이름을 입력하고  Host address 부분에 각 서버에 대한 ip 주소를 지정한다. 이때 같은 ip는 한 번만 사용 가능하나, 공백의 경우 같은 ip를 사용할 수 있다.

'abc     IN     CNAME    www' 와 같이 abc를 www의 별명으로 지정할 수 있으므로 이것도 사실상 같은 ip를 공유하는 것이다.

 

위와 같은 파일들을 가지고 있는 서버에서

nslookup ns.ast09.sec 명령어 실행 시 192.168.10.141 를 출력하며

                    ast09.sec 

 

nslookup www.ast09.sec 명령어 실행 시 192.168.10.142 를 출력하게 된다. 

                 aaa.ast09.sec

 

2. 데이터베이스

2-1 관계형 데이터베이스

● DBMS (Database Management System)

- 데이터베이스를 구현하고 사용 가능하도록 작업 환경을 제공하는 소프트웨어이다.

- 계층형, 망형, 관계형 등이 있다.

 

● RDBMS (Relational Database Management System)

- RDB(관계형 데이터베이스)를 관리하는 소프트웨어이다.

- Oracle, SQL Server, MySQL, DB2 등이 있다.

 

● RDB (Relational Database)

- 테이블(열과 행(column, row))로 구성된다. 행의 갯수는 제한이 없다.

- 테이블의 크기와 데이터 검색 속도는 상관이 없다.

- 기본적으로 컬럼(열)로 구성되어 있으며 데이터가 테이블에 저장되면 행이 생기는 것이다. 즉, 테이블을 조작할 때 행 단위로 조작한다.

- 한 행의 데이터는 분해되지 않는다. 

 

관계형 데이터베이스에서의 관계

 

Relational Database란 위 그림과 같이 Relationship( != Relation)에 의해 연결되는 데이터베이스이다.

 

2-2 SQL (Structured Query Language)

SQL은 데이터베이스의 데이터 조작을 위해 표준화된 비 절차적 언어로 표준안이 제공된다. 또한 단어의 구성과 순서가 고정되어 있으며 영어와 매우 유사하다.

 

사용하는 명령어는 다음과 같다.

● DML(Data Manipulation Language): 테이블 안의 데이터를 조작한다.

‐ SELECT : 행을 검색한다.

‐ INSERT : 행을 삽입한다.

UPDATE : 행을 조작한다.

DELETE : 행을 삭제한다.

 

● DDL(Data Definition Language): 테이블을 조작한다.

‐ CREATE : 테이블을 생성한다.

ALTER : 테이블 구조를 수정한다.

DROP : 테이블을 삭제한다.

‐ RENAME

 

● DCL(Data Control Language): 데이터에 액세스하는 권한을 조작한다.

‐ GRANT

 REVOKE

 

● TCL(Transaction Control Language): 뭔가 변경된 사항에 대하여 조작한다.

‐ COMMIT : 작업을 저장한다.

ROLLBACK : 작업을 취소한다.

 

※ 보안 문서에서 트랜잭션 = 함수 = 업무 = 비즈니스 = 기능 으로 해석이 가능하다.

 

3. SELECT 문의 이해

3-1 select 문

● select 문의 기능

select 문은 다음과 같은 기능을 수행한다.

프로젝션(Projection) : 특정 컬럼만을 보여준다.

선택(Selection)         : 특정 행만을 보여준다.

조인(Join)                 : 여러 테이블을 연관지어 원하는 정보를 보여준다.

 

● select 문의 구조

select 문의 구조는 다음과 같다.

 SELECT * | [DISTINCT] 컬럼|수식 [AS 별명], .. FROM 테이블명;

 

SELECT 절에는 출력 대상을 기술하며 FROM 절에는 테이블 명을 기술한다. SELECT 절과 FROM 절은 생략할 수 없다.

* 표시는 모든 항목을 나타낸다.

 

SELECT * FROM tab;

: 현재 유저가 소유한 테이블 목록을 확인한다.

 

DESC 테이블;

: 테이블이 어떤 컬럼으로 구성되어 있는지 확인한다.

DESC emp 실행 화면

 

다음과 같은 데이터 유형을 확인할 수 있다.

- varchar : 영문자
- date      : 날짜
- number : 숫자

 

3-2 SQL 문

SQL 문은 다양한 유연성을 가진 비절차적 언어로, 다음과 같은 특징을 가진다.

‐ SQL 문은 반드시 ';' 으로끝난다. ';'은 명령어 입력이 끝났음을 알린다.

‐ SQL 문은 대소문자를 구별하지 않는다.

‐ SQL 문은 여러 줄에 기술 가능하다. ->들여쓰기가 가능하다.

‐ SQL 문은 반드시 결과(출력)가 존재한다.

 

● 올바른 데이터 검색

SQL> SELECT ename, job FROM emp;

SQL> SELECT eno, ename, job FROM emp;

// eno = 사원번호, ename = 사원이름, job = 업무, emp = 사원테이블 //

 

위의 두 문장은 모두 사원 테이블에서 각 사원들의 업무를 알기에 문법적으로 틀리지 않은 명령어이지만 첫 번째 문장은 잘못된 문장이다.

데이터 검색 시 SQL 문장 뿐 아니라 검색 결과도 문제가 없어야 한다.

- 검색 결과는 질의의 의미가 충족돼야 한다.

- 검색 결과는 구분이 돼야 한다.(무결성)

 

회사나 군대 등 사람을 관리하는 곳에서 사람은 번호로 식별되므로 사원 번호를 알 수 없는 첫 번째 문장으로는 사람을 제대로 식별할 수 없어 검색 결과의 구분이 되지 않아 적절하다고 볼 수 없다.

 

위의 eno와 같이 검색 결과 구분이 가능하게 하는 것을 프라이머리 키 혹은 주 식별자라고 한다. 또한 이러한 주 식별자로 행의 식별이 가능한 관계를 함수적 종속 관계라고 한다.

 

● 검색 결과 출력 차이

SQL에서는 컬럼의 데이터 타입에 따라 출력글자 정렬 위치가 달라진다. 문자형은 왼쪽 정렬, 숫자는 오른쪽 정렬로 출력된다.

 

● 2차원 배열과 테이블의 차이

2차원 배열은 데이터가 모두 따로이므로 한 행에서 데이터를 일부 뽑을 일이 있을 경우 필요한 부분만 읽어 뽑아낸다.

테이블은 한 행의 데이터를 분해할 수 없으므로 한 행의 일부 데이터가 필요하더라도 그 행 전체를 읽는다.

 

3-3 다양한 select 문 활용

● 별명을 이용한 검색

SELECT 컬럼명 AS "별명", ... FROM 테이블명;

ex) SELECT eno AS "사원번호", ename AS "이름" FROM emp;

 

‐ 별명은 헤더의 출력을 지정한다.

‐  AS는 생략 가능하다.

‐ "(이중인용부호)가 필요한 경우

 : 공백이 포함된 경우

 : 특수 문자가 포함된 경우

 : 대소문자를 구분하고자 할 경우

 : 숫자로 시작할 경우

 

● 수식 검색

SELECT [수식] FROM dual;

ex) SELECT 2+3 FROM dual;

      SELECT (2+3)*6 FROM dual;

      SELECT eno 사번, ename 이름, sal*12 연간급여 FROM emp;

 

‐ SELECT 절에 수식을 사용할 수 있다.

‐ SELECT 절에 쓸 컬럼이 없는 경우 FROM 절에는 더미 테이블 명인 dual을 이용한다.

   (SELECT문에서 FROM절은 생략할 수 없다.)

‐ 수식을 검색하는 경우 헤더에 수식이 출력되므로 이런 경우 가급적 별명을 출력하면 가독성이 높아진다.

‐ 헤더는 응용 프로그램 개발 시에 변수명이나 배열의 키로 이용되므로 프로그램 개발 시에는 이를 고려한다.

 

● 널이 포함된 연산

‐ NULL은 공백이나0 또는False와는 다르게, 결정되지 않은(알수없는, 미지의) 값을 의미한다.

‐ 그러므로 NULL이 포함된 연산의 결과는NULL이다.

‐ 보안상 부정으로 간주될 수 있다.

 

SELECT eno, ename, sal, comm, sal*12+comm FROM emp;

 

위와 같은 문장에서 comm에 NULL 값이 들어있는 경우 다음과 같은 NVL 함수를 이용해 검색할 수 있다.

NVL 함수 : NULL이 계산에 영향을 주지 않도록 항등원으로 치환해 계산한다. 

...NVL(컬럼, 치환값) ...

ex) SELECT eno, ename, sal, comm, sal*12+nvl(comm,0) FROM emp;

 

‐ 컬럼의 값이 NULL이면 치환값으로 바꾼다.

‐ sal*12+comm -> sal*12+nvl(comm,0)

 

그러나 이러한 함수를 쓰는 순간 데이터베이스의 성능을 기대할 수 없으므로 가능한 한 숫자 컬럼에 NULL이 없도록 해야 한다.