1. 보안성

DBMS가 지원하는 보안에는 다음과 같은 것들이 있습니다.

  • 사용자 확인을 통한 계정 보안
  • DB 객체 보호를 위한 접근 보안
  • DB와 File 보호를 위한 OS 보안

이번 글에서는 DB 객체 보호를 위한 보안으로써 뷰( View )에 대해 알아보려고 합니다.





2. 뷰 ( View )

DB 객체를 보호하는 방법으로 사용자에게 권한(privilage)을 부여하는 방법이 있습니다.


이와 달리, 뷰 테이블( 원본 테이블을 그대로 두고, 노출하고 싶은 필요한 정보들만 모아서 가상 테이블 )을 만들어 보호하는 방법이 있습니다.

즉, 사용자가 보는 테이블은 실제 테이블이 아닌 가상의 테이블이므로, 원본 테이블에 영향을 주지 않으므로 DB객체를 보호할 수 있습니다.


위의 쿼리는 VIEW_SAMPLE라는 이름의 뷰를 생성하는 쿼리입니다.

원본 테이블( base table )은 Student이고, VIEW_SAMPLE은 stu_noname만을 Attribute로 갖는 가상의 테이블이죠.

이와 같이 보여주고 싶은 Attribute만 선택해서 뷰를 만들 수 있습니다.


뷰는 가상의 테이블이지만, 일반적인 테이블처럼 쿼리를 수행할 수 있습니다.

단, SELECT 쿼리에 대해서는 제약조건이 없지만 UPDATE, DELETE, INSERT에 대해서는 제약조건이 있습니다.

여기서 말하는 제약조건이란, 뷰의 Attribute에는 base table의 primary key가 존재해야 한다는 것입니다.


그런데 사실 뷰의 목적은 데이터 조회에 있습니다.

따라서 뷰의 데이터를 조회할 때 일반 테이블처럼 쿼리를 작성해도 됩니다.





3. 뷰를 사용하는 이유

뷰를 사용하는 이유에 대해 알아보기 전에 DBMS를 사용하는 목적에 대해 알아보도록 하겠습니다.


1) DBMS를 사용하는 목적

DBMS는 데이터 독립성( Data Independence )을 보장하기 위해 사용합니다.


  • 외부 스키마
    • 사용자 입장에서 보는 논리적인 데이터베이스의 구조를 의미
  • 개념 스키마
    • 데이터베이스의 전체적인 논리구조, 즉 테이블을 의미
  • 내부 스키마
    • 데이터가 실제로 저장되는 물리적인 데이터베이스의 구조를 의미


이렇게 3개의 스키마를 일컬어 3-level architecture라고 합니다.

3-level architecture의 장점은 각 스키마 간의 데이터의 독립성이 보장된다는 것입니다.


예를 들어, 데이터가 실제로 저장되는 disk가 변경되어도 개념 스키마, 외부 스키마는 변하지 않습니다.

저장공간을 HDD를 사용하다가 SSD로 바꾼다고 해서 테이블이 바뀌지는 않죠.




2) 뷰를 사용하는 이유

뷰를 사용하는 이유 역시, 독립성을 보장함에 있습니다.

즉, 외부 스키마와 개념 스키마 간의 독립성( 3-level architecture의 logical interface )을 보장하기 위함입니다.

뷰가 독립성을 보장하는 개념은 다음과 같습니다.

  • growth
    • 뷰에 새로운 Attribute가 추가 되어도 base table에는 영향을 주지 않습니다.
    • 반대로 base table에 새로운 Attribute가 추가되어도 뷰에는 영향을 주지 않습니다.
    • 따라서 base table과 사용자가 실제로 보는 뷰 간의 데이터 독립성을 보장합니다.
  • restructuring
    • 뷰를 통해 base table 중 자주 쓰이는 필드만 골라 작은 테이블로 만들 수 있습니다.
    • 즉, 매번 base table에 접근할 필요 없이 뷰에 접근함으로써 연산을 줄일 수 있으며, 필요한 데이터만 보여줌으로써 보안성을 높일 수 있습니다.





이상으로 뷰에 대해 알아보았습니다.

뷰는 원본 테이블에서 보여주고 싶은 Attribute만 골라서 데이터를 보여주는 가상의 테이블로서 SELECT 질의가 가능하다는 특징이 있습니다.