1

SQL학습

SQL학습

노아의 블로그

    목차
반응형

먼저 데이타베이스를 모르는 사람들을 위한 설명

데이타베이스는 엑셀을 생각하면 된다.

데이타베이스는 하나의 엑셀 파일이고

엑셀의 시트는 DB의 테이블이라고 생각하면 된다.

그안에 행/열을 각각 Column/row라고 부른다.

 

WAS 와 DB에서 서로 소통할때 사용하는것이 SQL 질의문이다.

 

SQL 질의문중 DB에 있는 데이터를 보고싶을때 쓰는게 있다.

 

바로 SELECT다 SELECT는 어떤 식으로 되어있냐면 보통

SELECT 컬럼이름 FROM 테이블 이름

이런 형식으로 되어있다.

 

그러므로 DB에 있는 MEMBER(회원) 테이블의 회원 ID를 뽑아올때.

SELECT ID FROM MEMBER;

를 하면 MEMBER(회원) 테이블의 회원의 ID가 모두 출력된다. 

 

하지만 회원의 ID만 말고 회원의 이름,password,등등의 모든 데이터를 보고싶다면

*을 사용한다. *은 컴퓨터에서 모든 이라는 뜻으로 사용된다.

그렇다면 회원 테이블의 모든 정보를 보고싶다면

SELECT * FROM MEMBER

이렇게 SQL을 작성하면 된다.

 

하지만 여기서 또 하나가 있다.

나는 id가 admin인 사람만을 조회하고 싶으다.

 

그렇다면 WHERE 문을 사용하면 된다.

 

SELECT * FROM MEMBER 

WHERE id = 'admin';

= DB야. 회원의 모든 정보를 출력하는데 id가 admin인 회원을 찾아와.

 

하지만 여기서도 문제가 있다.

만약 조건에 id와 password 동시에 조건을 사용하고 싶다면?

이때는 AND 와 OR 연산자를 사용하면 된다.

 

 

AND = 그리고

OR = 또는 

이라고 생각하면 된다.

 

그렇다면 id가 admin이고 password가 1234인 회원을 조회하려면?

 

SELECT * FROM MEMBER 

WHERE id = 'admin' and password = '1234'

= DB야. 회원의 모든 정보를 출력하나 id가 admin이고(그리고) password가 1234인 회원을 찾아와.

 

id가 admin이거나 password가 1234인 회원을 조회하려면?

SELECT * FROM MEMBER 

WHERE id = 'admin' or password = '1234'

= DB야. 회원의 모든 정보를 출력하는데 id가 admin이거나password가 1234인 회원을 찾아와.

 

차이점이 느껴지시나요?

바로 and는 그리고여서 두가지 요건을 다 충족해야지 그 조건에 대한 실행 결과가 나옵니다.

(내가 배가고파서 그런데 빵 그리고 우유를 사와. = 빵하고 우유가 두가지 충족되어야 한다.)

 

(내가 배가고파서 그런데 빵 또는 우유를 사와. = 빵 하나,우유 하나 그리고 빵과 우유 두개를 사오는 3가지 요건중 하나만 충족해도 됩니다. (컴퓨터에서 또는은 이거 아님이거 아님 둘다에 해당함))

 

이제 SELECT 문의 과정을 보았습니다.

 

그렇다면 로그인 방식은 어떻게 이루어질까요?

맞죠. 보통 로그인은 ID와 PASSWORD 두가지를 입력하죠.

 

그렇다면 이렇게 생각해볼수 있겠죠.

SELECT * FROM MEMBER

WHERE id = ? AND password = ? 

 

왜 AND를 쓸까요? 당연하지만 id하나만 확인 한다면 password의 의미가 없죠.

 

열쇠구멍만 비교하면 열쇠 구멍을 보고 누구나 그 집으로 들어오려고 하겠죠.

누구나 들어오게 하지 않으려면 보유한 열쇠까지 비교해야겠죠.

 

그래서 두개가 동시에 참일때만 실행시키려고 AND를 쓰는겁니다.

 

SELECT * FROM MEMBER

WHERE id = ? AND password = ?  이런 형태는 식별 (id) 과 인증(password) 두개를 동시에 수행하는 SQL입니다.

 

하지만 식별과 인증을 따로 하는 경우도 존재합니다.

바로 이런 형태입니다.

SELECT password FROM MEMBER

WHERE id = ?

 

이렇게 하면 id를 입력하면 결과가 password로 나오겠죠.

그 결과를 사용자가 입력한 password와 비교하는 

식별과 인증을 분리한 SQL 입니다.

 

어떤게 더 안전할까요?

정답은 동일하다 입니다. 

결국에는 악의적인 사용자가 입력한 SQL문이 작동된다면 그것은 안전하지 않습니다.

그러므로 Injection은 필수적으로 막아야합니다.

반응형

'해킹' 카테고리의 다른 글

6번 OTP 우회문제  (0) 2023.04.14
4번 로그인 우회문제  (0) 2023.04.10
해킹 찍먹 2.XSS  (0) 2023.04.01