전공/데이터베이스

[데이터베이스] #11 응용 개발

Campus Coder 2024. 5. 20. 10:25
728x90
반응형

목차

  1. 내장 SQL
  2. ODBC

 


1. 내장 SQL

1. 내장 SQL

호스트 언어 중간 중간에 SQL 문장 삽입

전처리(preprocessing) 과정을 꼭 거쳐야 함 → 이후 컴파일

EXEC SQL BEGIN DECLARE SECTION ...
EXEC SQL <embedded SQL statement>;
EXEC SQL ENC DECLARE SECTION;

선언된 변수는 프로그램에서 사용할 때 반드시 콜론(:)을 접두사 형식으로 붙임

2. 커서

두 언어 간에 자료 처리 방식 차이로 인한 불일치 해결 필요 → cursor

  1. declare: 커서 선언
  2. EXEC SQL declare myCursor cursor for select sID, name from student where totalCredit > :creditAmount;
  3. open: 질의 실행 (질의문의 결과 결정)
  4. EXEC SQL open myCursor
  5. fetch: 호스트 프로그램 변수에 터플단위로 값 전달
  6. EXEC SQL fetch myCursor into :si, :sn;
  7. close
  8. EXEC SQL close myCursor

SQLSTATE

  • SQL 문장을 실행하면 성공 여부 담김
  • 00000 성공
  • 02000 검색되는 터플 없음

갱신을 위한 커서는 마지막에 for update 명시해야함

3. 동적 SQL

prepare → execute 단계로 나뉨 (execute immediate는 동시 수행)

stcopy("select name from professor where salary > ?", myText);
EXEC SQL prepare my1 from :myText;
mySalary = 1000;
EXEC SQL execute my1 using :mySalary;
  • prepare
    • SQL 문장에 대한 컴파일 단계, 변수 이용 가능
    • select 문장의 물음표 기호(?)는 prepare 단계에서 실제 값으로 대치되는 변수 의미
  • execute

 


2. ODBC/JDBC

1. ODBC

API 방식

응용 프로그램은 ODBC 라이브러리와 링크하여 함께 컴파일

ODBC 2.0 연결

SQLAllocEnv(&env);
SQLAllocConnect(env, &conn);
SQLConnect(conn, "db.ssu.ac.kr", SQL_NTS, "myUserID", SQL_NTS, "myPassword", SQL_NTS);
  1. environment handle 할당
  2. connection handle 할당
  3. 데이터베이스 서버와 연결
  4. 함수 수행 결과 여부를 알려주는 error code 선언

SQL_NTS는 선행 매개변수가 null로 끝나는 스트링임을 의미

ODBC 3.0 연결

SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env);
SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc);
SQLAllocHandle(SQL_HANDLE_ENV, dbcm &stat);
  1. environment handle 할당
  2. connection handle 할당
  3. statement handle 할당

2. ODBC 데이터 접근

SQLExecDirect(): SQL 문장 수행

SQLBindCol(): 결과 속성 값을 로컬 변수와 연결

SQLFetch(): 터플 단위로 데이터 받기

3. ODBC 동적 SQL

SQL inhection이란 SQL 코드를 악의적으로 삽입하는 기술

사용자로부터 SQL 문장 일부를 동적으로 입력받아 수행하는 응용에서 발생

SQLstatement : = "SELECT * FROM userinfo WHERE id " + a_variable + ";"

사용자가 1;DROP TABLE users 입력할 수 있음

prepare 기능을 사용하여 SQL 문장을 미리 컴파일 하면 일정 수준 공격을 피할 수 있음

4. ODBC 레벨

ODBC는 3가지 구현 레벨을 정의

  1. Core
  2. Level 1 requires support for metadata quering
  3. Level 2 requires ability to send and retrieve arrays of parameter values and more detailed catalog information
728x90
반응형