다른 명령
| 8번째 줄: | 8번째 줄: | ||
즉, 위 쿼리의 결과를 계산하여 저장한 다음 저장된 릴레이션을 사용자에게 제공하는 방식으로 특정 사용자에게 제한된 릴레이션을 제공할 수 있다. 하지만 instructor, course, section 릴레이션 안의 데이터가 변경된다면, 저장된 쿼리 결과는 다시 쿼리를 실행했을 때의 결과와 일치하지 않는다.(out-of-date) 따라서 위와 같은 해결 방식, 즉 쿼리 결과를 계산해서 저장하는 것은 좋은 생각이 아니다. | 즉, 위 쿼리의 결과를 계산하여 저장한 다음 저장된 릴레이션을 사용자에게 제공하는 방식으로 특정 사용자에게 제한된 릴레이션을 제공할 수 있다. 하지만 instructor, course, section 릴레이션 안의 데이터가 변경된다면, 저장된 쿼리 결과는 다시 쿼리를 실행했을 때의 결과와 일치하지 않는다.(out-of-date) 따라서 위와 같은 해결 방식, 즉 쿼리 결과를 계산해서 저장하는 것은 좋은 생각이 아니다. | ||
대신 SQL에는 '''view'''라는 기능이 있다. View는 '''개념적인 모델(conceptual model)에는 없지만 사용자에게 virtual relation으로 보이도록 만든 릴레이션'''이다. 이를 위해 SQL은 쿼리에 의해 정의되는 '''virtual relation'''이라는 기능을 제공한다. Virtual relation은 '''미리 계산되어 저장되는 것이 아니라, virtual relation이 사용될 때마다 쿼리를 실행하여 계산된다. 이는 [[Nested Subquery#The With Clause|with 절]]과 유사한 기능이다. | 대신 SQL에는 '''view'''라는 기능이 있다. View는 '''개념적인 모델(conceptual model)에는 없지만 사용자에게 virtual relation으로 보이도록 만든 릴레이션'''이다. 이를 위해 SQL은 쿼리에 의해 정의되는 '''virtual relation'''이라는 기능을 제공한다. Virtual relation은 '''미리 계산되어 저장되는 것이 아니라, virtual relation이 사용될 때마다 쿼리를 실행하여 계산된다.''' 이는 [[Nested Subquery#The With Clause|with 절]]과 유사한 기능이다.<br> | ||
즉, 해당 예시에서 view는 원본 릴레이션에 직접적으로 접근할 권한을 부여하지 않는다.<ref>즉 원본 테이블 자체는 볼 수 없다.</ref> 대신 salary 속성이 포함되지 않은 view를 만들고 해당 view에만 직원에게 접근 권한을 부여한다. 따라서 해당 직원은 salary를 제외한 속성만 볼 수 있게 된다. | |||
==View definition== | ==View definition== | ||
2025년 4월 9일 (수) 08:01 판
상위 문서: SQL
개요
모든 유저들이 데이터베이스 내의 모든 logical model(relation)을 볼 수 있는 권한을 가지는 것은 보안상의 측면에서 권장되지 않는다. 또한 어떤 사용자는 특정 릴레이션(relation)에 접근할 수는 있어도, 모든 속성(attribute)에 접근하는 것이 바람직하지 않을 수 있다. 예를 들어, 어떤 직원(employee)는 강사(instructor)의 ID, name, dept_name 속성에 접근할 필요가 있지만, 강사의 salary 속성을 볼 필요는 없을 수 있다. 따라서 해당 직원은 다음과 같은 SQL 쿼리(query)로 표현된 릴레이션에 접근해야 한다.
select ID, name, dept_name from instructor;
즉, 위 쿼리의 결과를 계산하여 저장한 다음 저장된 릴레이션을 사용자에게 제공하는 방식으로 특정 사용자에게 제한된 릴레이션을 제공할 수 있다. 하지만 instructor, course, section 릴레이션 안의 데이터가 변경된다면, 저장된 쿼리 결과는 다시 쿼리를 실행했을 때의 결과와 일치하지 않는다.(out-of-date) 따라서 위와 같은 해결 방식, 즉 쿼리 결과를 계산해서 저장하는 것은 좋은 생각이 아니다.
대신 SQL에는 view라는 기능이 있다. View는 개념적인 모델(conceptual model)에는 없지만 사용자에게 virtual relation으로 보이도록 만든 릴레이션이다. 이를 위해 SQL은 쿼리에 의해 정의되는 virtual relation이라는 기능을 제공한다. Virtual relation은 미리 계산되어 저장되는 것이 아니라, virtual relation이 사용될 때마다 쿼리를 실행하여 계산된다. 이는 with 절과 유사한 기능이다.
즉, 해당 예시에서 view는 원본 릴레이션에 직접적으로 접근할 권한을 부여하지 않는다.[1] 대신 salary 속성이 포함되지 않은 view를 만들고 해당 view에만 직원에게 접근 권한을 부여한다. 따라서 해당 직원은 salary를 제외한 속성만 볼 수 있게 된다.
View definition
SQL에서 view를 정의하기 위해서는 create view 명령어를 사용해야 한다. 또한 view를 정의하기 위해서는 이름을 부여해야 하며, view를 계산할 쿼리를 명시해야 한다. create view 명령어는 v라는 이름의 view를 정의하기 위해 아래와 같이 사용된다.
create view v as <query expression>;
이때 <query expression>는 어떤 쿼리 표현식이라도 문법만 맞다면 가능하다. 이를 활용하여 강사 릴레이션에서 salary 속성을 제외한 모든 속성에 접근하는 직원에
각주
- ↑ 즉 원본 테이블 자체는 볼 수 없다.