아키텍트: 보안
  다운로드
Oracle Database
  태그
spatial, security, All

동적 시공간 데이터 접근 인가

공간과 시간 레퍼런스를 기준으로 한 개별 데이터 객체 접근 인가는 복잡한 작업입니다. 사례연구를 통하여 한 가지 가능한 접근방식을 알아봅니다.

by Bart van Velden

2008년 4월

컬렉션과 사용자 그룹이 모두 대량이고 동적인 경우 개별 데이터 객체에 대한 접근을 한꺼번에 인가하기가 상당히 어렵습니다. 인가 정책이 데이터 객체의 시공간 레퍼런스를 기준으로 하고 있는 경우에는 더욱 복잡해집니다. 본 문서에서는 CycloMedia Technology의 실시간 시나리오를 사용하여 Oracle Database Enterprise Edition의 두 가지 구성 요소인 공간 옵션Virtual Private Database 기능을 결합하는 방식으로 이 문제에 대한 해결책을 제시하고자 합니다.

CycloMedia Technology

CycloMedia는 360도 파노라마 사진이나 원형 파노라마의 대규모 체계적인 시각화를 전문으로 합니다. 원형 파노라마 생성을 위해서는 넓은 지역의 사진을 찍어서 온라인 데이터베이스에 입력해야 합니다. 각각의 레코딩에서 위치, 방향, 시간이 등록되어 3D 측정과 모델링 같은 다기능 애플리케이션이 가능해집니다. (아래 예 참조)


ImageId

RecordingLocation

RecordingDateTime

43c5klf8h0cg

5.70698580234006,50.8474750817698

2005-03-12 15:22

6ju83ks7u6pg

4.59019800392403,52.4622636292842

2004-08-02 08:51

85s8hi4nl7u2

6.9008111752263,52.4115443666161

2006-06-21 12:17

....

....

....

그림 1 지리공간 데이터 원형 파노라마의 예

DCR7는 CycloMedia자체적으로 개발된 레코딩 시스템의 최신 모델로, 비주얼 품질, 메트릭스 정확성, 고속 비주얼 레코딩에 있어서 상당한 발전을 이루었습니다. 시속 80km의 속도로 5미터 간격으로 원형 파노라마를 생성할 수 있는 DCR7을 사용하여 CycloMedia는 유럽 공공 장소의 많은 부분을 시각화할 계획입니다. 이에 따라 원형 파노라마 컬렉션이 빠르게 성장할 것으로 기대됩니다.

인가와 관련된 도전

CycloMedia 사례는 공간 레퍼런스 뿐만 아니라 시간 레퍼런스를 가진 동적 객체 컬렉션이 대형 사용자 그룹에 인가되는 시나리오를 제시합니다. 인가 파라미터가 컬렉션의 시공간 차원에 기초하고 있습니다.

이러한 문제에 대한 기존의 접근방식은 정적 데이터 세트나 인가 매트릭스를 생성하여 컬렉션에서 주체 (클라이언트나 사용자)와 각각의 객체 사이의 단일 관계를 각각 기술하는 것입니다. 이러한 데이터 세트와 매트릭스의 구축은 보통 객체와 인가 지역 사이의 공간 관계를 평가하는 특별한 툴을 사용합니다.

접근 제어를 지원하기 위해 임시 데이터 세트와 인가 매트릭스를 구축하고 유지하는 일은 사용자 커뮤니티와 컬렉션이 모두 대량이고 동적인 경우에는 적합하지 않습니다. 뿐만 아니라 임시 데이터는 접근 제어 정책에 있어서 유연한 보호 강화 및 동적 변화를 지원하지 않습니다.

최근에 제안된 몇 가지 솔루션은 여러 가지 단점이 있습니다. 가장 큰 원인은 아키텍처와 관련이 있습니다 ? 인가 실행은 데이터베이스의 외부나 쿼리 실행 이후에 이루어지기 때문에 데이터의 사용을 제한합니다. Open Geospatial Consortium이 새로운 표준으로 제안하고 있는 GeoXACML 아키텍처조차 문제가 있는 것으로 나타나고 있습니다. 이는 공간 데이터 (GML, WMS)와 인가 (XACML) 표준에 기초하고 있으며, 기존의 인프라를 변경하지 않으면서 보호되지 않은 Web Map Services에 대한 접근 제어 솔루션을 제공합니다. 그 결과, WMS로 가는 메시지를 가로채 대상 WMS에서 검색 작업을 실행하고 정책 결정 포인트로 검색 결과를 전달한 후 도출된 인가 결정에 기초하여 결과 세트를 생성합니다.

개념의 기초가 된 이 원형 아키텍처는 매우 불충분한 결과를 초래합니다 ? 모든 데이터가 원본 데이터베이스에서 선택된 후에 GML로 변환되고 외부 툴에 의해 인가 정책의 비교를 통해 기능에 따라 나누어져 평가됩니다. 따라서 원본 데이터베이스의 공간 인덱스를 사용할 수 없으며, 또한 공간 비교 기능이 별도의 구성 요소로 실행되어야 합니다. 뿐만 아니라 데이터가 먼저 선택된 후에 인가 정책에 대해 필터링되기 때문에 아키텍처가 복잡한 분석 작업을 실행할 수 없습니다. 간단한 nearest-neighbor 쿼리 역시 문제가 됩니다 ? 처음에 선택된 가장 가까운 객체가 나중에는 접근이 불가능한 것으로 판명될 수도 있습니다.

데이터베이스 수준 인가 평가

메인스트림 데이터베이스가 공간 데이터 유형과 공간 기능 (보통 Open Geospatial Consortium의 SFS [spatial types and functions] 표준에 기초함)을 실행하기 때문에 데이터베이스 단계에서 인가 정책을 실행하는 것이 가능해 보입니다. 그러나 현행 SQL 인가 메카니즘은 테이블, 뷰, 칼럼 수준에 제한되어 있습니다. 각각의 단일 사용자에 대한 뷰 생성을 생각해 볼 수 있겠지만 이러한 접근 방식은 사용자와 변화 정책이 많은 경우에 확장될 수 없습니다.

이런 문제들로 인해 현재 정보 시스템은 흔히 데이터베이스 접근 제어 기능을 우회하여 접근 제어를 데이터베이스 접근에 사용되는 애플리케이션 프로그램에 임베딩합니다. 최종사용자 애플리케이션이나 미들웨어 애플리케이션이 될 수 있습니다. 애플리케이션 소스에 대한 통제권이 없는 경우나 여러 개의 애플리케이션이 사용되는 경우에는 최종사용자 애플리케이션에 접근 제어를 임베딩하는 것이 문제가 됩니다. 인가 정책의 변화 역시 여러 개의 관리 메카니즘에 적용되어야 하며, 적용된 후에도 변화가 효력을 발휘하게 하기 위해서 애플리케이션 업데이트 정책에 의존하게 됩니다. 뿐만 아니라 사용자나 해커가 임의 쿼리를 제출하는 위험이 존재합니다. 두 번째 옵션은 미들웨어 애플리케이션에서 쿼리를 구축하는 것입니다. 이 경우에는 애플리케이션이 최종사용자 애플리케이션으로 실행한 쿼리를 편집하여 인가 정책에 통합시켜야 합니다. 그러나 복잡한 검색 작업과 인가 정책 변화의 경우에는 이러한 작업이 매우 어려워질 수 있습니다. 또 다른 옵션은 몇 가지 디폴트 검색 작업을 최종사용자 애플리케이션 기능으로 제공하는 것입니다. 이를 통해 프로세스를 간소화할 수는 있지만 사용자를 위한 옵션이 직접적으로 제한됩니다.

데이터베이스 수준 인가 강화

이런 이유 때문에 데이터베이스 수준에서 엄격한 접속 제어를 명시하고 실행하는 것이 이상적입니다. UC 버클리 대학의 Sharig Rizvi 팀이 인가 정책을 포함시키기 위해 데이터베이스 수준의 쿼리 변경에 기초한 Truman 모델을 제시한 바 있습니다. 이전에도 이러한 개념을 논의한 적이 있었지만, Truman 모델의 경우에는 파라미터화된 뷰 프레임워크를 사용하여 데이터베이스 수준의 쿼리 변경 접근방식을 일반화합니다. Truman 모델의 기저에 놓여 있는 아이디어는 각각의 사용자에게 완전한 데이터베이스의 제한된 개인 뷰를 제공하는 것입니다. 이를 위해서는 사용자 쿼리를 변경하여 사용자가 허가된 것 이상을 보지 않도록 해야 합니다. 실제로는 로직 표현인 인가 정책이 위치한 쿼리에 프레디컷 (서술부)으로 추가됩니다. 아래 그림에서 Truman 모델을 시각화하고 있습니다.


그림 2 활성화된 Truman 모델: 사용자가 보낸 쿼리가 시스템이 실행하는 쿼리로 다시 쓰여집니다.

쿼리 변경이 사용자에게 투명하게 실시되기 때문에 사용자가 접근 제어 메카니즘의 존재를 눈치채지 못할 수 있습니다. 따라서 데이터에 적용되는 제약이 없으며 테이블의 모든 객체에 접근할 수 있는 것으로 최종사용자가 아키텍처를 인식합니다. Truman 모델의 뷰는 아래와 같이 시각화됩니다.


그림 3 Truman 모델의 쿼리 변경이 사용자에게 투명합니다. 때문에 이 모델은 사용자 쿼리의 각각의 관계가 사용자가 확인할 수 있도록 인가된 뷰에 의해 대체되는 모델이라고 할 수 있습니다.

Truman 모델은 FGAC나 RLS로 불려지기도 합니다. (모델의 명칭이 1998년 영화 투르먼 쇼의 주인공 투르먼 버뱅크 주위에서 펼쳐지는 인공 세상에서 유래됨)

이 모델의 장점은 단일 지점 인가 실행, 동적 컬렉션 옵션, 최종사용자 쿼리 기능, 효율적 데이터 프로세싱 (공간 데이터의 주요 측면) 등입니다.

Oracle Virtual Private Database

Oracle Virtual Private Database (VPD)는 오라클 문서에서 FGAC, RLS와 같은 다양한 명칭을 갖습니다. 명칭에 상관없이, VPD 보안은 전혀 새로운 데이터 접근 제어 방법을 제공합니다. 테이블이나 뷰에서 데이터가 쿼리되거나 변경될 때마다 실행되는 데이터베이스 테이블이나 뷰에 정해진 보안 정책 기능이 적용되도록 하는 아이디어에 기초합니다. 이러한 기능은 SQL이 사용되기 전에 원본 SQL의 WHERE 구문에 추가되는 프레디컷이라고 불리는 SQL의 추가 부분을 리턴합니다. 따라서 Truman 모델의 개념과 일치합니다. 쿼리 변경은 쿼리 옵티마이저에서 실행되는데, 실제로 SQL이 파싱되고 실행될 때 이루어집니다. SQL이 실행될 때 실제로 사용자를 위해서 실행되는 것은 변경된 SQL입니다. 정책 기능이 데이터의 어떤 열을 리턴할지 제어한다는 의미입니다. 이러한 프로세스는 정해진 정책을 가진 테이블에 접근이 이루어질 때 실행되는 시스템 트리거로 간주할 수 있습니다. VPD의 동적 성격은 중요한 특징입니다.

실행

Truman 모델이 예상 시나리오에 적합한지 알아보기 위해 공간 옵션 기능의 Oracle Database 10g Enterprise Edition에서 테스트를 수행했습니다. Oracle Database의 Enterprise Edition에만 포함되어 있는 VPD 구성 요소가 쿼리 변경에 사용됩니다. 데이터베이스에 컬렉션을 구축하는 것은 상대적으로 쉬워, image_id, recording_location, recording_datetime을 위한 칼럼이 있는 단일 테이블이면 충분했습니다. image_id가 주 키로 지정되었습니다. 위치와 시간이 인가 프레디컷과 검색 작업에 사용되기 때문에, 인덱스를 두 개 모두에 생성합니다. recording_location은 SDO_GEOMETRY 유형입니다. 다양한 종류의 공간 기하를 보유할 수 있는 공간 데이터 유형입니다.

다음으로 원천 데이터를 데이터베이스에 불러왔습니다. 원본 데이터가 Dutch National Grid 포맷이었기 때문에 World Geodetic System (WGS84)로 변환했습니다. 마침내 약 10년 동안 네덜란드에서 기록된 1,000만 건 가까운 이미지를 보유하게 되었습니다.

다음으로 계약, 고객, 사용자, 계약 접근 가능 범위를 포함시키기 위해 공간과 시간 유형으로 데이터 모델을 설계했습니다. 이들 테이블에서 나온 데이터를 결합한 condition_sets라는 공개 뷰를 생성하여, ‘접근 가능한’ 모든 시공간 범위를 결합했습니다. 마지막으로 일부 테스트 데이터를 삽입했습니다.

사용자를 자신의 데이터에만 제한하기 위해 condition_sets에 다음의 프레디컷을 정의했습니다.

(WHERE)  client_id = SYS_CONTEXT('THE_CTX','THE_CLIENT_ID')
이 프레디컷은 세션 문맥 (the_ctx)에서 the_client_id 수치로 설정된 부분을 제외하고 client_id가 있는 모든 열을 제거함으로써, 사용자가 자신에게 인가되지 않은 데이터에 접근하는 것을 방지합니다. 이러한 세션 문맥은 어떤 클라이언트가 사용자에게 소속되어 있는지를 결정하는 로그인 트리거로 생성됩니다. VPD가 자체 기능을 사용하여 문맥을 설정하기 때문에 애플리케이션 서버와 데이터베이스 사이의 세션이 지속될 수 있으며, 로그인 트리거를 제거할 수 있습니다.

이제 프레디컷이 condition_sets 테이블에 추가되었습니다. 오라클은 이를 위해 dbms_rls.add_policy 기능을 제공합니다. 그러나 프레디컷을 직접 추가할 수 없으며, 이를 리턴하는 기능을 필요로 합니다. 이 같은 기능을 정책 기능이라고 부릅니다. 따라서 exp_security라고 부르는 패키지에 client_id_security 기능을 생성했습니다.

CREATE OR REPLACE PACKAGE exp_security AS
FUNCTION client_id_security(owner VARCHAR2, objname VARCHAR2)
   RETURN VARCHAR2;
END exp_security;
이 기능의 바디는 다음과 같습니다:
CREATE OR REPLACE PACKAGE BODY exp_security IS
FUNCTION client_id_security(owner VARCHAR2, objname VARCHAR2) RETURN VARCHAR2 IS predicate VARCHAR2(2000);
  BEGIN
    predicate := 'CLIENT_ID = sys_context(''THE_CTX'',''THE_CLIENT_ID'')';
    RETURN predicate;
  END client_id_security;
END;
이제 정책 기능을 갖추었으므로, dbms_rls.add_policy 공간 기능을 실행할 수 있습니다. 이 기능은 정책 기능을 정의된 테이블이나 뷰에 첨부합니다. 테이블의 데이터가 선택되면 정책 기능이 실행되고 프레디컷을 리턴합니다. 이 프레디컷은 쿼리가 실행되기 전에 쿼리를 변경하는데 사용합니다. dbms_rls.add_policy 기능의 첫 번째 파라미터는 두 번째 파라미터로 정의되는 테이블 (또는 뷰)을 소유하는 사용자를 정의합니다. 세 번째 파라미터는 새로운 정책에 명칭을 부여하는데, 이 명칭은 나중에 정책을 제거하거나 변경하는데 사용될 수 있습니다. 네 번째와 다섯 번째 파라미터는 어떤 정책을 추가하고 어디에서 이러한 정책을 발견할 수 있는지를 정의합니다. 마지막 파라미터는 데이터가 선택되는 경우에만 정책을 사용할 수 있다고 정의합니다.
CALL dbms_rls.add_policy('BART', 'condition_sets', 'condition_sets_policy', 'BART', 'exp_security.client_id_security', 'SELECT');
이제 bart.condition_sets 뷰가 쿼리될 때마다 현재 사용자에게 열을 제한하는 프레디컷이 bart. exp_security.client_id_security 정책 기능으로부터 리턴됩니다. 이 프레디컷은 이제 Truman 모델에서 서술된 쿼리 변경을 위해 사용됩니다. 다음 단락에서 실제 데이터의 인가에 이러한 뷰를 사용할 것입니다. 평가 섹션에서는 쿼리를 사용자를 위한 쿼리 변경 결과를 확인할 수 있습니다.

Images_authorized and images_unauthorized 테이블

이미지 테이블은 2가지 서로 다른 정책에 의해 2가지 방법으로 인가됩니다. condition_sets의 인가 범위를 충족시키지 않는 모든 열을 배제합니다. 두 번째 정책은 인가된 이미지의 모든 열을 배제하고 나머지 모든 것의 imageid를 숨깁니다. 이런 방법으로 사용자는 현재 볼 수 없는 이미지가 언제 어디서 만들어졌는지 알 수 있습니다. 나중에 우리는 이것이 마케팅 수단으로 활용되는 것을 알게 될 것입니다.

이를 인지하는데 2가지 방법이 있습니다: 2개의 일반 동의어 혹은 뷰의 사용이 그것입니다. 그러나 오라클 문서에선 ImageId를 숨기는데 필요한 칼럼 수준 정책은 동의어에 적용될 수 없다고 명시하고 있기 때문에, 유일한 방법은 이미지 테이블을 위한 2개의 뷰를 생성하는 것입니다. 비인가 이미지를 위한 image_ids는 특정 칼럼 수준 정책과 반대되는 뷰 정의를 통해서도 제거할 수 있기 때문에, 이 옵션을 선택했습니다.

공간 평가를 통해 recording_location이 특정 영역(geo 칼럼)에 있는지 점검해야 합니다. Oracle Spatial은 이를 위해 SDO_INSIDE (geometry1, geometry2) 기능을 제공합니다. 최초의 파라미터는 테이블에 있는 geometry 칼럼을 지정하고, 두 번째 파라미터는 geometry의 테이블이나 임시 인스턴스로부터 geometry를 지정합니다. 이는 이 기능이 다음과 같은 쿼리에서는 사용될 수 없다는 것을 의미합니다:

SELECT * 
FROM   images 
WHERE  sdo_inside(recording_location,
          SELECT geo 
          FROM   condition_sets) = 'TRUE';
그 결과 구문은 다음과 같습니다:
SELECT * 
FROM   images, 
       condition_sets 
WHERE  sdo_inside(recording_location,geo) = 'TRUE';
이 요구사항은 디폴트 공간 기능을 통해 인가 프리디컷을 공간 데이터 테이블에 추가하는 정책 기능을 정의하는 것을 불가능하게 합니다. 때문에 모든 공간 영역의 각각의 이미지를 확인하는 다른 기능을 마련해야 하지만, 이는 추가 작업을 요하는데다 성능 저하를 야기할 수 있습니다. 따라서, Truman 모델에 의해 추가된 프레디컷에서 복잡한 공간 평가를 수행하는 것은 문제가 있어 보입니다. 따라서 다른 옵션을 선택해야 했습니다: images_authorized와 images_unauthorized 뷰를 원본 이미지 테이블의 복사본으로 정의하는 대신, 두 가지 모두 이미지 테이블의 크로스 조인 및 conditions_sets 뷰로 정의되었습니다. 이렇게 하면, 디폴트 공간 기능 기반의 프레디컷을 사용할 수 있습니다. images_authorized의 SQL 구문은 다음과 같습니다:
CREATE VIEW images_authorized AS 
SELECT * 
FROM   images, 
       condition_sets
시간 프레디컷이 추가되었을 때, 정책 기능에서 정의되는 images_authorized 뷰의 완전한 프레디컷은 다음과 같습니다:
(WHERE)  recording_datetime >= start_date 
         AND recording_datetime?lt;= end_date 
         AND SDO_INSIDE(recording_location,geo) = 'TRUE'
하지만 이 솔루션엔 문제가 있습니다: 컬렉션의 객체가 다중 조건 세트의 조건을 충족시키면, 이것이 images_authorized 뷰에 여러 번 나타나는 바람직하지 못한 문제가 발생합니다. 이 문제를 해결하려면, 사용자는 각각의 쿼리에서 확실한 셀렉터를 사용해야 하는데, 이는 매우 부적합한 방법입니다. 유사한 문제가 condition_sets 뷰의 필드에도 존재합니다. 사용자가 접근할 수 있는 또 다른 뷰를 통해 이 문제를 해결할 수 있습니다:
CREATE VIEW images_authorized_fixed AS 
SELECT DISTINCT imageid, 
                recording_datetime, 
                recording_location 
FROM   images_authorized;
여기서 보여지듯이, images_authorized (및 images_unauthorized) 뷰에 추가된 프레디컷은 세션 문맥에 대한 레퍼런스를 포함하지 않습니다. 이것이 condition_sets 뷰의 프레디컷에 이미 존재하고 있었기 때문입니다. 이 때문에, 시공간 프레디컷은 뷰의 실제 정의에도 포함될 수 있습니다. condition_sets 뷰의 필드도 배제될 수 있습니다. 그 결과 SQL 구문은 다음과 같습니다:
CREATE VIEW images_authorized AS 
SELECT images.* 
FROM   images, 
       authorized_sets 
WHERE recording_datetime >= start_date 
       AND recording_datetime <= end_date 
       AND SDO_INSIDE(recording_location,geo) = 'TRUE'; 
이러한 접근 방법으로, 정책 기능에는 어떠한 시공간 프레디컷도 정의될 필요가 없습니다. 2가지 방법의 분석 결과, 성능에 차이가 없음을 알 수 있습니다. 이는 쿼리 조작은 쿼리 옵티마이저에 있어 별 일이 아니라는 것을 나타냅니다.

위의 솔루션은 의도했던 목적에 부합합니다: 데이터는 사실 시공간 차원에서 인가됩니다. Truman 모델은 condition_sets 뷰의 열을 현재 사용자 열로 제한하는데 사용되고, 이러한 개인화된 조건 세트를 기반으로, 실제 데이터는 테이블 결합에 의해 인가됩니다. 이러한 방법으로 생성된 새로운 뷰는 condition_sets의 개인화된 조건에 부합하는 데이터만을 포함합니다. Truman 모델에 의해 실행된 단일 쿼리 변경은 따라서 완전 인가 메커니즘의 기반입니다.

최종 아키텍처는 각각의 사용자에게 3개의 테이블을 제공합니다. 하나의 테이블은 인가 범위를 포함하고, 다른 하나는 접근 가능 데이터를, 그리고 나머지 하나는 접근 불가 데이터를 보여줍니다. 마지막 테이블은 따라서 두 번째 테이블의 데이터를 제외한 컬렉션의 모든 데이터를 포함합니다. 마지막 테이블만이 시공간 속성에 의해 정보 객체를 정의합니다.

각각의 테이블은 실제로 물리적 테이블 세트에 기반한 일반 뷰로서, 단일 데이터베이스 관리자가 관리하며, 일반 사용자는 직접 접근할 수 없습니다. 비록 각각의 뷰는 데이터베이스에 하나씩 존재하지만, 그 내용은 각각의 사용자에 따라 달라집니다.

평가

이 아키텍처를 사용하기 위하여, 특별한 소프트웨어 컴포넌트가 개발되었습니다. 툴이 검색되면, 결과가 나타납니다. 이는 KML (Keyhole Markup Language) 포맷의 웹 서버로부터 데이터를 역동적으로 검색할 수 있는 3-D GIS 애플리케이션인 Google Earth를 사용하고 있습니다. 인증은 Basic HTTP Authentication을 사용합니다. 예상대로, 이것이 웹 서버를 목표로 하는 네트워크 링크가 활성화된 후 Google Earth에 나타납니다:


그림 4 Google Earth의 로그인 스크린에 제시된 사용자 정보는 데이터베이스 연결에 사용됩니다.

웹 서버는 데이터베이스 연결을 위해 제공된 정보를 사용합니다. 연결에 성공한 후, 쿼리가 실행될 수 있습니다. 결과는 KML 포맷으로 변환되어 GIS 애플리케이션으로 리턴됩니다. 서버 쿼리는 데이터 인가 메카니즘을 가지고 있지 않습니다. 왜냐하면 이 업무는 데이터베이스 내부의 VPD 메카니즘의 권한이기 때문입니다. 현재 뷰 포인트 (창)의 모든 인가된 이미지를 선택하는 SQL 구문은 따라서 다음과 같이 간단합니다:

SELECT  imageid, recordingdate, recordinglocation
FROM    bart.images_authorized
WHERE   SDO_FILTER(recordinglocation, ?window ) = 'TRUE'

인가 결정 시각화

아래 그림 5는 인증받은 사용자를 위한 GIS 애플리케이션을 보여줍니다. 이 사용자는 광범위한 시간에 걸쳐 왼쪽 초록 영역에 접근할 수 있도록 인가를 받았습니다. 초록으로 표시된 각각의 지역은 위에서 말한 쿼리의 결과로, 인가 객체 (원형 파노라마)를 나타냅니다. 인가 지역 외부의 원형 파노라마는 데이터베이스에 의해 결과 세트에서 제외됩니다. 예상대로, 모든 초록 표시 지역은 인가 다각형 내부에 존재합니다 (또한 시간 영역을 표시하는 2개의 층 사이). 비인가 객체는 인가 메카니즘의 효율성을 시각화하기 위해 추가됩니다. 이들 비인가 객체를 검색하기 위하여, 위와 유사한 쿼리가 images_unauthorized 뷰를 사용하여 실행되었습니다.


그림 5 데이터베이스에 실행된 인가 결정이 각각의 표시 색으로 Google Earth에 나타납니다. 초록 표시는 접근 가능 원형 파노라마를, 빨강 표시는 접속 불가 원형 파노라마를 나타냅니다.

인가 원형 파노라마에 속한 라벨을 클릭하면, 그것이 GIS 애플리케이션 내부 창에 나타납니다. 사용자가 비인가 아이템을 요청하면, 팝업 창을 통해 해당 자원에 접근할 수 없음을 알리고, 판매 부서에 연락할 수 있는 링크를 제공합니다.


그림 6 인가 원형 파노라마는 GIS 애플리케이션에서 볼 수 있습니다; 그 표시는 파란색입니다. 비인가 원형 파노라마의 표시는 약간의 메타데이터와 판매 부서에 연락할 수 있는 링크를 제공합니다.

Nearest-Neighbor 쿼리: 정보 유출

윈도우 쿼리 외, 어떤 장소에서 가장 가까운 이미지가 CycloMedia 시나리오에서는 중요합니다. Oracle Spatial은 이를 위해 sdo_nn 기능을 제공합니다:

SELECT|    imageid, recordingdate, recordinglocation 
|FROM|     bart.images_authorized 
|WHERE|   |SDO_NN|(recordinglocation, ?geometry, |'sdo_batch_size=10'|) = |'TRUE'| and ROWNUM <2;| 
이 쿼리 실행 후, 최초의 결과는 만족스러워 보였습니다. 가장 가까운 이미지는 모든 경우에 존재합니다. 하지만, 어떤 장소에서는 아무런 결과도 나타나지 않는다는 사실에 당혹스러웠습니다. 왜냐하면 아무런 제한 (최대 거리 등)도 두지 않았기 때문에, 이런 결과는 예상하지 못했기 때문입니다. 테스트 데이터를 사용해 조사한 결과, nearest-neighbor 쿼리는, 매뉴얼에서 설명한대로, "원하는 수만큼 다른 WHERE 구문의 조건을 충족시키는 결과를 리턴하기 위해선 여러 차례 평가될 필요"가 있다는 사실을 알았습니다. 하지만, 위의 WHERE 구문은 다른 어떤 조건도 포함하고 있지 않습니다. 일부 테스트 데이터에 일부 쿼리를 실행한 후에야 무슨 일이 있었는지 알게 되었습니다: 비인가 객체가 가장 가까이 있는 인가 이미지보다 더 가까이 존재하는 경우, 아무런 결과도 나타나지 않는다는 것입니다. 그 결과, 비인가 객체가 어디에 존재하는지에 대한 정보가 유출됩니다. 이를 수정하려면, image_authorized 테이블에서처럼 데이터를 필터링하는 조인을 사용해 레퍼런스 테이블이 생성된 경우, sdo_nn 기능도 여러 차례 평가되어야 합니다. 사용자는 이를 모를 수 있기 때문에, 여기서 나타난 결과는 놀랍고 또 데이터베이스에 의해 데이터가 유출됐기 때문에 중대한 문제가 됩니다.

여기서는 비인가 서브세트를 생성하고, 결과를 배열해 최초의 열을 리턴하도록 within_distance 기능을 사용하여 이 문제를 해결하였습니다. 그러나 이것이 일반적 nearest-neighbor 기능의 문제를 해결하는 것은 아닙니다.


그림 7 이 이미지에서 사용자는 보고자 하는 장소를 십자 툴을 사용해 선택하였습니다. 제한된 범위에서 가장 가까운 인가 원형 파노라마를 위한 데이터베이스 검색은 그것을 지도상에 표시하고 GIS 애플리케이션에 나타내 보입니다. 뷰 또한 본래 장소의 방향에서 자동으로 열립니다.

복잡한 공간-시간 작업

CycloMedia 시나리오에서, 사용자는 종종 새로운 원형 파노라마에만 관심을 갖습니다. 이를 인식하는 기존의 방법은 기록 방법과 데이터 세트의 사용에 기반을 두고 있었습니다: 지역 사진을 찍어 새로운 데이터 세트에 놓으면, 이것이 기존의 데이터 세트를 대체합니다. 이러한 방법의 단점은 새로운 데이터 세트가 불완전하면, 갭이 발생한다는 것입니다. 이는 당연히 상황 파악을 위한 솔루션에선 바람직한 것이 아닙니다. 이 문제 말고도, 데이터 세트의 관리를 위해선 많은 일이 요구됩니다.

새로운 아키텍처에서 이 작업을 완성하기 위해선, 적절한 쿼리가 생성되어야 합니다. 이는 객체 사이의 공간 및 시간 관련성을 포함하는 다소 복잡한 작업입니다. 각각의 객체의 경우, 기존 다른 객체에 대한 공간적 거리를 분석해야 하고, 해당 객체가 발견되면 결과 세트로부터 제외시켜야 합니다. 그러나, 시간적 간격이 짧으면 제외시킬 필요가 없습니다. 왜냐하면, 2개의 객체가 모두 관련되어 있기 때문입니다. 이를 이해하기 위해선, 원형 파노라마는 지속적인 시퀀스로 기록된다는 것을 알고 있어야 합니다. 따라서 공간적 거리가 짧은 2개의 원형 파노라마는 시간적으로도 간격이 짧다고 볼 수 있습니다. 따라서 특정의 시간 변곡점이 중요합니다. SQL에서는 이 작업을 정의하기가 상대적으로 쉬우며, 결과도 예상한대로 나타납니다.

아래 그림은 이 쿼리의 결과를 Google Earth에서 보여주는 것입니다. 수직 방향 즉, 고도는 결과의 시간 차원을 시각화하는데 사용되고 있습니다. 가장 높은 객체가 가장 새로운 것입니다. 각각의 최신 객체 주변의 초록 실린더는 그 것이 관장하는 공간-시간 영역을 나타냅니다. 실린더 내부의 객체 (노란색 표시)는 더 이상 관련이 없기 때문에 결과 세트에서 제거될 수 있습니다.


그림 8 복잡한 공간-시간 쿼리의 메카니즘도 GIS 애플리케이션에서 시각화될 수 있습니다.

성능

정확한 인가 결정 외, 이 아키텍처의 성능도 중요합니다. 이 아키텍처의 테스팅 플랫폼은 이상적이지 못합니다: 엔터프라이즈 DBMS, 미들웨어 소프트웨어 및 GIS 애플리케이션이 동일한 시스템에서 운영되고 있습니다. 하지만, 테스트 실행을 위해 직접 조작 인터페이스를 사용해야 한다는 요구사항을 충족시킬 수 있었기 때문에 전체 성능은 충분했습니다. 확장성 테스트 또한 이를 재확인해 주었습니다. 성능은 Truman 모델에서, 심지어 복잡한 시공간 인가 조건에서도, 문제가 되지 않습니다.

결론

이 문서에선 데이터베이스 관리 시스템을 위한 2가지 새로운 개념 - Truman 모델 및 SFS -를 활용하여, 검색을 지원하면서 DBMS 자체에 의해 동적 컬렉션이 공간 및 시간 차원에서 역동적으로 인가될 수 있다고 제안하고 확인했습니다.

이 아키텍처의 주요 이점은 인가 메카니즘이 데이터 사용을 결코 방해하지 않는다는 것입니다. 또 다른 중요한 이점은 동적 데이터 컬렉션이 가능하다는 것입니다. 뿐만 아니라, 공간 데이터 시각화 및 관리를 위해 사용되는 툴의 공통 영역을 변경하지 않고도 계속 사용할 수 있습니다.

GIS 애플리케이션에서 몇 가지 검색 작업 결과를 시각화함으로써, 우리는 인가 메카니즘의 정확성이 모니터링된다는 것을 알 수 있었습니다. 이는 일반적으로 공간적 및 시간적 인가가 정확히 실행되고 있다는 것을 보여주고 있습니다. 하지만, 가장 가까운 장소를 찾기 위해 디폴트 기능을 사용하면, 인가 메카니즘의 일부 정보가 유출된다는 것을 알았습니다. 이는 일부 애플리케이션에선 중요한 문제가 될 수 있고, 아키텍처에 대한 일반의 확신에도 영향을 줄 수 있습니다. 이 문제에 대한 추가 조사가 필요합니다.

Microsoft Research가 최근 출판한 기사에서, Truman 모델 (Microsoft SQL Server에서 실행되고 있지 않음)에 대해 설명하고 있습니다. 여기에선 기존 SQL 인가 메카니즘의 엄격한 일반화 디자인에 의해 프레디컷을 할당하는 새로운 방법을 제시하고 있습니다. 쿼리 승인의 하나의 예를 들면 다음과 같습니다:

GRANT SELECT employees 
WHERE        emp_id = user_id()
TO           PUBLIC
프레디컷은 따라서 일반 승인 구문에 포함됩니다. 이는 정책을 sql 승인 모델과 분리하는 Oracle VPD 실행과는 반대입니다. 내 생각으로는, 이 새로운 방법은 엄격 접근 제어가 취해야 하는 방법이며, 이 제안은 풀 레퍼런스 실행의 기반이 되어야 할 것으로 보입니다.

Bart van Velden (bvanvelden@cyclomedia.nl 혹은 bart@vanvelden.org)은 CycloMedia Technology 연구개발 부문 산하 Technology Concepts and Propositions 그룹 프로덕트 매니저이다. 그는 네덜란드 Utrecht 대학에서 정보 과학을 전공했고, 동적 시공간 컬렉션의 인가 접근이라는 주제의 연구를 수행했다. CycloMedia의 시나리오는 이 연구 프로젝트에 사용되었다.