KR101143121B1 - 데이터 저장소에서 동적으로 생성된 연산들의 검증 - Google Patents

데이터 저장소에서 동적으로 생성된 연산들의 검증 Download PDF

Info

Publication number
KR101143121B1
KR101143121B1 KR1020050064244A KR20050064244A KR101143121B1 KR 101143121 B1 KR101143121 B1 KR 101143121B1 KR 1020050064244 A KR1020050064244 A KR 1020050064244A KR 20050064244 A KR20050064244 A KR 20050064244A KR 101143121 B1 KR101143121 B1 KR 101143121B1
Authority
KR
South Korea
Prior art keywords
data store
dynamically generated
operations
snapshot
unexpected
Prior art date
Application number
KR1020050064244A
Other languages
English (en)
Other versions
KR20060050223A (ko
Inventor
데이비드 이. 쉐파
구앙-안 우
제임스 엠 3세 스톤
제프리 이 리드
저스틴 배어드
샌더 비. 보그단
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20060050223A publication Critical patent/KR20060050223A/ko
Application granted granted Critical
Publication of KR101143121B1 publication Critical patent/KR101143121B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/62Protecting access to data via a platform, e.g. using keys or access control rules
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99954Version management

Abstract

데이터 저장소에 동적으로 생성된 연산들을 검증하는 것은 데이터 저장소로의 액세스를 위한 셋업 동작을 수행하는 것을 포함하고, 그 셋업 동작은 동적으로 생성된 연산들이 수행될 요청에 적어도 부분적으로 기반한다. 셋업 동작을 수행하는 것은, 데이터 저장소의 제한 부분과 데이터 저장소의 비제한 부분을 설정하기 위해 데이터 저장소의 부분들에 대해 사용권한들을 설정하는 것을 포함할 뿐 아니라, 임의의 예상치 않은 변경들이 비제한 부분에 발생하였는지 검사하거나, 비제한 부분의 일부분들로의 액세스를 로킹하는 하나 이상의 부가적 기술을 사용하는 것을 포함한다. 동적으로 생성된 연산들을 수행한 이후에, 어떤 예상치 않은 작업도 동적으로 생성된 연산들에 의해 수행되지 않았다는 검증을 한다. 예상치 않은 작업이 수행되었던 경우, 연산들이 그 요청 메시지에 대해 올바르지 못하다고 판정한다.
데이터 저장소, 검증, 로킹, 연산

Description

데이터 저장소에서 동적으로 생성된 연산들의 검증{VERIFYING DYNAMICALLY GENERATED OPERATIONS ON A DATA STORE}
도 1은 데이터 저장소에 동적으로 생성된 연산들을 검증할 수 있는 예시적인 환경을 도시하는 블록도.
도 2는 데이터 저장소에 동적으로 생성된 연산들을 검증할 수 있는 예시적인 프로세스를 도시한 블록도.
도 3은 예시적인 데이터 무결성 관리자를 부가적으로 자세히 도시.
도 4는 어떤 예기치 못한 작업도 동적으로 생성된 연산들에 의해 실행되지 않았음을 검증하는 예시적인 프로세스를 도시하는 흐름도.
도 5는 어떤 예기치 못한 작업도 동적으로 생성된 연산들에 의해 실행되지 않았음을 검증하는 또 다른 예시적인 프로세스를 도시하는 흐름도.
도 6은 동적으로 생성된 연산들이 액세스하지 말아야 하는 데이터 저장소의 부분들이 동적으로 생성된 연산들에 의해 액세스되지 않음을 검증하는 예시적인 프로세스를 도시하는 흐름도.
도 7은 본원에서 상술한 기술들을 구현하는데 이용될 수 있는 전반적인 컴퓨터 환경을 도시.
<도면의 주요 부분에 대한 부호의 설명>
100: 환경
102: 데이터 무결성 관리자
104: 연산 발생기
106: 데이터 저장소
108: 애플리케이션
110: 비제한적 연결
112: 제한적 연결
기술 분야
본 발명은 테스트하고 검증하는 것에 관한 것으로, 구체적으로는 데이터 저장소에 동적으로 생성된 연산을 검증하는 것에 관한 것이다.
종래기술
컴퓨터 기술이 진보함에 따라, 저장 장치들의 용량은 증가하였다. 하나 이상의 이런 저장 장치들을 데이터 저장소로서 간주할 수 있으며, 데이터 저장소에 포함될 수 있는 대량의 데이터를 액세스하고 관리하기 위한 여러 가지 기술들이 개발되었다. 데이터를 액세스 하는데 이용되는 기술들은 시간이 지남에 따라 오히려 상세해지고 다양해질 수 있기 때문에, 데이터를 액세싱하는 것에 대한 상세를 추상화하는 제품들이 개발되고 있다. 이런 추상화 제품들을 애플리케이션 개발자가 도 입하여 저장된 데이터를 액세스할 수 있다. 그러므로, 애플리케이션 개발자는 사용하기 편리한 추상화 제품의 인터페이스를 통해 대화할 수 있으며, 저장 장치들을 액세스하는 것에 대한 상세를 추상화 제품에 의존하여 이해하게 된다.
전형적으로, 이러한 추상화 제품은 애플리케이션으로부터 수신한 한 가지 포맷의 요청 메시지 또는 명령어를 데이터 저장소가 쉽게 이해하는 다른 포맷으로 변환한다. 예를 들면, 특정한 데이터 값을 변경시키는 애플리케이션으로부터의 요청 메시지는 추상화 제품에 의해, 데이터 저장소의 일부분의 위치를 찾아내어 그 데이터 저장소의 그 일부분에 새로운 데이터를 기입하는 일련의 연산들(예를 들면, 일련의 SQL 문장들)로 변환될 수 있다.
이런 추상화 제품에서 발생할 수 있는 한 가지 문제점은 그 대화를 올바르게 수행하도록 보장하기 위해서는 주의를 기울여야 한다는 점이다. 대화를 잘못 수행할 경우, 애플리케이션의 요청 메시지에 대한 결과는 정확할 수 없고, 정확한 연산을 하는 추상화 제품으로 신뢰할 수 없다. 이런 문제를 해결할 수 있는 한가지 방법은, 추상화 제품이 수신한 요청 메시지를 수신하면, 추상화 제품에 의해 생성된 연산들 또는 명령어들을 분석하고, 이런 연산들 또는 명령어들이 정확한지 판정함으로써, 추상화 제품을 테스트하는 것이다. 그러나, 근본적으로 추상화 제품에 의해 생성된 연산들 또는 명령어들의 포맷뿐 아니라 특정 연산들 및 명령어들 그 자체가 지속적으로 변할 수 있다는 사실에 비추어 보면, 실제로 이런 분석과 판정은 매우 어려울 수 있다. 그러므로, 추상화 제품이, 수신된 요청 메시지들과 명령들을 올바르게 변환하고 있다는 것을 검증하는 보다 나은 방법을 갖는 것이 유익할 것이다.
발명의 요약
데이터 저장소에 동적으로 생성된 연산들을 검증하는 방법이 본원에 기술된다.
소정의 양상에 따르면, 데이터 저장소의 비제한 부분으로만 액세스를 허용하도록 하는 사용권한(permission)들을 데이터 저장소에 설정한다. 데이터 저장소의 비제한 부분은 요청 메시지에 대해 동적으로 생성된, 데이터 저장소 상의 하나 이상의 연산들에 의해 액세스되지 말아야 하는 데이터 저장소의 제1 부분을 제외한다. 데이터 저장소에 하나 이상의 연산들을 수행한 이후에, 예상치 않은 변경이 비제한 부분에 행해졌는지 검사한다.
본 발명의 다른 양상에 따르면, 데이터 저장소의 비제한 부분으로만 액세스를 허용하도록 사용권한들을 데이터 저장소에 설정한다. 데이터 저장소의 비제한 부분은 요청 메시지에 대해 동적으로 생성된, 데이터 저장소 상의 하나 이상의 연산에 의해 액세스 되지 말아야 하는 데이터 저장소의 제1 부분을 제외한다. 그에 더하여, 하나 이상의 연산들에 의해 액세스 되지 말아야 하는 데이터 저장소의 일부분으로의 액세스를 로킹하는데, 이 데이터 저장소의 일부분은 비제한 부분에 포함되어 있다.
동일 부호가 문서 전체에 걸쳐서 동일 컴포넌트 및/또는 특징들을 참조하기 위해 사용된다.
데이터 저장소에 동적으로 생성된 연산들을 검증하는 방법이 본원에 기술되어 있다. 데이터 저장소로의 액세스를 포함한 요청이 행해지면, 하나 이상의 연산들이 요청자를 대신해서 동적으로 생성되고, 이러한 하나 이상의 연산들이 연산들을 수행하는 데이터 저장소로 전송된다. 요청 메시지를 고려하여 데이터 저장소에서 수행될 것으로 예상하였던 작업을 수행하였는지, 또한 요청 메시지를 고려하여 데이터 저장소에서 수행될 것으로 예상하지 않았던 어떤 작업도 수행되지 않았는지를 검사한다. 이 검사가 예상한 작업은 수행하고 예상치 않았던 어떤 작업도 수행하지 않았다고 나타낼 경우, 동적으로 생성된 연산들은 그 요청 메시지용으로 정확하다고 검증된다. 예상치 않았던 어떤 작업도 데이터 저장소에 수행되지 않았음을 검증하기 위해, 다양한 여러 가지 기술들을 이용할 수 있다.
도 1은 데이터 저장소에 동적으로 생성된 연산들의 검증을 수행할 수 있는 예시적인 환경(100)을 도시하는 블럭도이다. 환경(100)은 데이터 무결성 관리자(102), 연산 발생기(104), 데이터 저장소(106), 및 애플리케이션(108)을 포함한다.
데이터 저장소(106)는 데이터를 저장하는 임의의 시스템일 수 있다. 예를 들면, 데이터 저장소(106)는 Microsoft® SQL 서버 데이터베이스와 같은 데이터베이스(예를 들면, 관계형 데이터베이스 또는 비관계형 데이터베이스)일 수 있다. 또는 데이터 저장소(106)는 임의의 다른 유형의 구조화된 지속적인 메모리일 수 있는데, 애플리케이션은 이 메모리를 사용하여 XML(eXtensible Markup Language) 문서, 파일 시스템과 같은 그 데이터 내용에 대해 질의하거나, 이를 삽입하거나, 갱 신하거나, 삭제할 수 있다.
연산 발생기(104)는 애플리케이션(108)과 데이터 저장소(106) 간의 중재자로서 동작하는 추상화 컴포넌트이다. 데이터 저장소(106)를 액세스하라는 요청이 애플리케이션(108)에 의해 연산 발생기(104)에 대해 행해지고, 다음에 이 연산 발생기는 데이터 저장소(106)에 수행될 하나 이상의 연산들을 동적으로 생성한다. 이러한 연산들이 애플리케이션(108)으로부터 수신한 특정 요청 메시지들에 기반하여 연산 발생기(104)에 의해 생성되기 때문에, 연산들을 동적으로 생성된 것으로 간주한다. 애플리케이션(108)에 의해 행해진 요청에는 예를 들면, 데이터 저장소(106)로부터 데이터를 검색하라는 요청, 데이터 저장소(106)에 있는 데이터를 수정하라는 요청, 데이터 저장소(106)에 데이터를 추가하라는 요청, 및 데이터 저장소(106)로부터 데이터를 삭제하라는 요청이 포함될 수 있다. 연산 발생기(108)에 의해 동적으로 생성된 연산들은 임의의 다양한 종래의 방식으로 생성될 수 있으며, 애플리케이션(108)으로부터 수신한 특정 요청과 데이터 저장소(106)로부터 제공받은 저장 장치의 성질 혹은 유형에 적어도 부분적으로 의존할 것이다. 연산 발생기(108)에 의해 동적으로 생성된 연산들은 쿼리들, 데이터 조작 문장들, 요청 메시지들, 명령들, 명령어들 등 일 수 있다. 예를 들면, 연산 발생기(108)에 의해 동적으로 생성된 연산들은 데이터 저장소(106)로부터 데이터를 판독하는 연산들, 데이터 저장소(106)에 데이터를 기록하는 연산들, 데이터 저장소(106)에 새로운 데이터 엔트리들을 생성하는 연산들(예를 들면, 데이터베이스 테이블에 새로운 행들을 생성), 및 데이터 저장소(106)에 있는 데이터 엔트리를 삭제하는 연산들(데이터베이스 테이블 로부터 행들을 삭제)을 포함할 수 있다.
애플리케이션(108)은 데이터를 저장소(106)를 액세스하는 다양한 여러 가지 애플리케이션들(예를 들면, 컴퓨터 프로그램들) 중 임의의 하나일 수 있다. 그에 더하여, 단일 애플리케이션(108)만이 도 1에 도시되어 있을지라도, 복수의 애플리케이션이 연산 발생기(104)를 거쳐서 데이터 저장소(106)를 액세스할 수 있다. 소정의 실시예에서, 애플리케이션(108)은 연산 발생기(104)를 테스트하도록 설계된 테스트 애플리케이션으로서, 다양한 요청 메시지를 연산 발생기(104)에 제출하여서, 동적으로 연산을 생성함에 있어, 발생기(104)의 거동(behavior)을 검증할 수 있게 된다. 다른 소정의 실시예에서, 애플리케이션(108)은 비-테스트 애플리케이션일 수 있으나, 연산 발생기(104)가 제대로 동작하는지 검증하기 위해 데이터 무결성 관리자(102)를 사용할 수 있다.
소정의 실시예에서, 연산 발생기(104) 또는 데이터 무결성 관리자(102)와 같은 데이터 저장소(106)를 액세스하는 각각의 컴포넌트 또는 모듈은 임의의 연결을 통하여 이런 동작을 한다. 컴포넌트 또는 모듈은 이런 연결을 통하여 데이터 저장소(106)에 로그인 한다. 연산 발생기(104)는 특정 사용자(이것은 인간 사용자 또는 단순한 몇몇 식별자를 지칭할 수 있음)로서 데이터 저장소(106)에 로그인하고, 병행하여 여러 번 데이터 저장소(106)에 로그인할 수 있다. 연결은 이와 관련된 권리들 또는 사용권한들의 집합을 가지고 있어서, 그 연결을 사용하는 컴포넌트가 데이터 저장소(106)에서 실행할 수 있는 허가받은 동작을 식별하게 한다. 예를 들면, 컴포넌트는 데이터 저장소(106)의 소정의 부분만을 액세스하도록 허가받을 수 있거나, 데이터 저장소(106)로부터 판독은 가능하나 기록은 불가하도록 허가받을 수 있다. 컴포넌트 또는 모듈은 이런 연결을 통해 데이터 저장소(106)와 통신하게 되나, 그 연결의 제한 조건을 만족시키는 연산들만이 데이터 저장소(106)에 의해 실행될 것이다.
데이터 무결성 관리자(102)는 데이터 저장소(106)로의 비제한적 연결(110)을 사용한다. 데이터 무결성 관리자(102)는 임의의 연산을 데이터 저장소(106)에 수행하는 것을 금지당하지 않는다. 다른 한편으로, 연산 발생기(104)가 데이터 저장소(106)로의 제한적 연결(112)을 사용한다. 애플리케이션(108)이 제출했던 특정 요청에 기반하여, 연산 발생기(104)는 데이터 저장소(106)에 소정의 연산들을 수행하는 것을 금지당한다. 이후에 더욱 상세히 논의된 대로, 데이터 무결성 관리자(102)는 이러한 제한 사항을 제한적 연결(112)에 설정한다.
도 2는 데이터 저장소(106)에 동적으로 생성된 연산들을 검증하는 예시적인 프로세스(200)를 예시하는 흐름도이다. 프로세스(200)는 소프트웨어, 펌웨어, 하드웨어, 또는 그들의 조합으로 실행될 수 있다. 도 2는 도 1의 환경(100)의 컴포넌트들을 참조하여 논의되고 있다. 프로세스(200)는 애플리케이션(108)에 의해 연산 발생기(104)에 제출될 복수의 요청들(예를 들면, 모든 요청) 각각에 대해 반복된다.
처음에, 데이터 저장소(106)로의 액세스를 위한 셋업 동작들을 수행한다(동작 202). 제한적 연결(112)이 이미 존재하지 않을 경우, 동작(202)에서 이것을 생성한다. 이후에 더욱 상세히 논의된 대로, 이런 셋업 동작들은 예를 들면, 특정 사용권한들을 승인 또는 거절하는 것, 제한적 연결(112)에 이런 사용권한들을 설정하는 것, 데이터 저장소로의 예상치 않은 변경들에 대한 후속 검사들을 허용하는 것(예를 들면, 데이터 저장소(106)의 부분들에 대한 스냅샷을 찍음으로써), 데이터 저장소(106)의 부분들을 로킹하는 것 등을 포함할 수 있다. 수행될 특정 셋업 동작들이 애플리케이션(108)에 의해 데이터 무결성 관리자(102)에게 식별된다. 애플리케이션(108)은 연산 발생기(104)에 제출할 예정인 특정 요청을 인식하고 있으므로, 그 요청을 수행하기 위해 데이터 저장소(106)를 액세스할 때 발생기(104)에 의해 수행될 특정 셋업 동작들을 식별할 수 있다. 예를 들면, 애플리케이션(108)이 데이터 무결성 관리자(102)의 거동을 검증하는 테스트 프로그램인 경우, 애플리케이션(108)은 전형적으로 발생기(104)에 의해 어떤 셋업 동작들이 실행되어야 하는지 알고 있도록 설계될 것이다. 다른 예로서, 애플리케이션(108)이 테스트 프로그램이 아닐 경우, 여전히 애플리케이션(108)은 발생기(104)에 의해 어떤 셋업 동작들이 실행되어야 하는지 조금 알 수가 있다(예를 들면, 애플리케이션(108)이 사용자가 항목을 그녀 혹은 그의 쇼핑 카트에 추가할 수 있는 임의의 일부분과, 사용자가 쇼핑 카트에 있는 그 항목들을 결재할 수 있는 다른 일부분을 포함할 경우, 애플리케이션(108)은 데이터 저장소(106)에 있는 신용 카드 번호와 같은 임의의 빌링 정보가 쇼핑 카트에 항목을 추가하거나 삭제하는 것을 포함하는 요청 메시지에 의해 액세스 되지 말아야 한다는 점을 알 수 있다).
선택적으로, 원하는 셋업 동작들이 수행된 이후에, 데이터 무결성 관리자(102)는, 셋업 동작들이 수행되었다는 지시를 애플리케이션(108)에게 반환할 수 있 어, 이로써 요청들을 연산 발생기(104)에 제출할 수 있음을 애플리케이션(108)에게 통지할 수 있다.
일단 셋업 동작들이 수행된 이후에, 연산 발생기(104)는 애플리케이션(108)으로부터 수신한 요청에 기반하여 적절한 연산(들)을 동적으로 생성하고(동작 204), 동적으로 생성된 연산(들)을 데이터 저장소(106)에 수행한다(동작 206).
그 다음에, 애플리케이션(108)은 예상한 작업이 수행되었는지 검증한다(동작 208). 동작(208)의 이런 검증은 다양한 종래의 방식들 중 임의의 한 가지로 수행될 수 있다. 애플리케이션(108)은 요청이 무엇이었으며, 그리하여 데이터 저장소(106)에서 무엇을 변경해야만 했는지(만약 있다면)를 알고 있어서, 원하는 변경이 행해졌는지 검증하기 위해 부가적인 요청(들)을 제출할 수 있다. 예를 들면, 데이터 저장소(106)에 데이터를 추가하는 요청일 경우, 애플리케이션(108)은 추가되었어야 하는 데이터를 검색하려고 시도할 수 있으며, 만약 해당 데이터를 검색하면, 예상한 작업이 수행되었음을 알게 된다.
또한 데이터 무결성 관리자(102)는 어떤 예상치 않은 작업도 수행되지 않았음을 검증한다(동작 210). 하기에 더욱 자세히 논의된 대로, 이런 검증은, 어떤 변경들이 데이터 저장소(106)에 행해졌는지, 로킹된 데이터를 액세스하려고 시도했는지, 사용권한이 거절된 데이터로의 액세스를 시도했는지 등에 관한 분석에 기반할 수 있다. 이런 검증의 결과는 선택적으로 애플리케이션(108)에 반환될 수 있다. 또는, 애플리케이션(108)이 어떤 예상치 않은 작업도 수행되지 않았음을 검증하기 위해, 데이터 무결성 관리자(102)에 의해 수집된 정보(예를 들면, 하기에 더 욱 상세히 논의된 스냅샷)가 그 애플리케이션(108)에 반환될 수 있다.
동적으로 생성된 연산(들)이 올바른지 검증하는 것은 동작(208) 및 동작(210)에서의 검증에 의존한다(동작 212). 예상한 작업이 수행되었음을 검증하고, 어떤 예상치 않은 작업도 수행되지 않았음을 검증하면, 동적으로 생성된 연산(들)이 올바른 것으로 검증된다(동작 214). 그러나, 예상한 작업이 수행되었음을 검증하지 못하고/거나 어떤 예상치 않은 작업도 수행되지 않았음을 검증하지 못하면, 동적으로 생성된 연산(들)이 올바르다고 검증되지 않는다(동작 216).
도 3은 부가적으로 자세히 예시적인 데이터 무결성 관리자(102)를 예시한다. 데이터 무결성 관리자(102)는 스냅샷 모듈(102), 사용권한 모듈(304), 및 로크설정(lockset) 모듈(206)을 포함한다. 사용권한 모듈(304)은 데이터 저장소(106)의 소정의 부분만을 액세스할 수 있도록 사용권한들을 설정한다. 이런 사용권한들에 기반하여, 액세스 가능한 데이터 저장소(106)의 이런 부분들은 데이터 저장소(106)의 비제한 부분으로서 참조되고, 액세스 불가능한 데이터 저장소(106)의 이런 부분들은 데이터 저장소(106)의 제한 부분으로서 참조된다. 스냅샷 모듈(302)는 임의의 예상치 않은 변경들이 데이터 저장소(106)의 비제한 부분에 행해졌는지 여부를 검사한다. 로크설정 모듈(306)은 데이터 저장소(106)의 비제한 부분의 일부분들을 로킹하여서, 이런 로킹된 일부분들이 연산 발생기(104)에 의해 액세스될 수 없도록 한다. 모듈(302, 304, 및 306)의 거동은 하기에 더욱 자세히 논의되고 있다.
소정의 실시예에서 스냅샷 모듈(302), 사용권한 모듈(304), 및 로크설정 모듈(306) 각각을 포함하지 않을 수 있다는 점에 주목하여야 한다. 이러한 모듈들 중 어떤 것이 특정 데이터 무결성 관리자(102)에 포함될지는 관리자(102)의 설계자의 요구 사항뿐 아니라 데이터 저장소(106)가 지원하는 기능에 근거하여 달라질 수 있다. 예를 들면, 데이터 저장소(106)가 데이터 저장소(106)의 일부분을 로킹하거나 그렇지 않으면 일시적으로 접근불가하게 만드는 메커니즘을 전혀 지원하지 않는 경우, 로크설정 모듈(306)은 데이터 무결성 관리자(102)에 포함될 수 없다. 다른 예로서, 관리자(102)의 설계자가 데이터 저장소(106)가 지원하는 임의의 사용권한들을 이용하길 원하지 않는다면(또는, 데이터 저장소(106)가 사용권한들을 지원하지 않음), 사용권한 모듈(304)은 데이터 무결성 관리자(102)에 포함될 필요가 없다.
사용권한 모듈(304)은 데이터 저장소(106)로의 액세스에 대한 사용권한들을 설정한다. 데이터 저장소(106)는 데이터 저장소(106)의 여러 부분들에 대한 사용권한들이 승인 및/또는 거절되도록 허용하고, 이런 사용권한들은 특정 연결과 관련되어 있다. 그래서, 데이터 무결성 관리자(102)는 제한적 연결(112)에 대한 사용권한들을 설정하여, 제한적 연결(112)를 통해 어떤 데이터 저장소(106)의 부분들이 연산 발생기(104)에 의해 액세스될 수 있는지를 제한하게 된다. 연산 발생기(104)는 비제한 부분을 액세스할 수 있으나 제한 부분은 액세스할 수 없다. 여러 가지 사용권한들이 데이터 저장소(106)로의 여러 가지 연결에 대해 설정될 수 있다(예를 들면, 데이터 저장소(106)와 통신하기 위해, 연산 발생기(104)는 복수의 제한적 연결(112)들을 사용할 수 있으며, 이런 복수의 제한적 연결들 각각은 여러 가지 사용권한 설정들을 가질 수 있다).
사용권한들이 데이터 저장소(106)의 제한 부분과 비제한 부분을 정의하기 위해 사용될 수 있는지에 대한 입도(granularity)는 특정 데이터 저장소에 기반하여 달라질 수 있다. 사용권한들이 예를 들면, 테이블 레벨, 열 레벨, 행 레벨, 페이지 레벨, 라인 레벨 등에 설정될 수 있다. 소정의 실시예에서, 데이터 저장소(106)가 Microsoft® SQL 서버 데이터베이스인 경우, 데이터 저장소(106)는 열 레벨 또는 테이블 레벨 둘 중 하나에 사용권한이 설정되도록 허용한다. Microsoft® SQL 서버 데이터베이스는 전형적으로 복수의 테이블로 구성되어 있고, 각각의 테이블은 복수 열과 복수 행을 가질 수 있다. 테이블 레벨에 사용권한들이 설정될 경우, 데이터 저장소(106)는 특정 테이블을 액세스하는 사용권한이 승인 또는 거절되도록 허용한다. 사용권한이 열 레벨로 설정되는 경우, 데이터 저장소(106)는 특정 테이블의 특정 열을 액세스하는 사용권한이 승인 또는 거절되도록 허용한다. Microsoft® SQL 서버 데이터베이스에서, 테이블에 행을 생성하는 연산들과 테이블로부터 행을 삭제하는 연산들은 테이블 레벨로 설정되고, 테이블에 데이터를 업데이트 하는 연산들, 테이블로부터 데이터를 판독하는 연산들은 열 레벨로 설정된다.
연산 발생기(104)에 의해 동적으로 생성된 연산이 데이터 저장소(106)의 제한 부분을 액세스하려고 시도할 경우, 데이터 저장소(106)는 제한 부분을 액세스하려고 시도하였음에 대한 지시를 연산 발생기(104)(또는 데이터 무결성 관리자(102))로 반환할 수 있다. 또는, 데이터 저장소(106)가 단순히 연산을 수행하지 않을 수 있고, 특정한 시간(타임아웃 주기로 지칭됨)이 지난 이후에, 연산 발생기(104)는 연산에 문제가 발생하였다고 간주할 것이다. 데이터 저장소(106)로부터 수신된 지시 또는 타임아웃 주기의 경과에 기반하여, 제한 부분을 액세스하려고 시도하였음에 대한 지시를 애플리케이션(108)에 되돌려 보고할 수 있고, 이로써 연산 발생기(104)에 의해 동적으로 생성된 하나 이상의 연산(들)에 문제가 있다는 점을 애플리케이션(108)에게 알려주게 된다.
사용권한 모듈(304)의 거동은 다음의 예시로부터 알 수 있다. 데이터 저장소(106)는 고객에 관한 정보를 저장한 고객 테이블, 주문받은 주문에 관한 정보를 저장한 주문 테이블, 결재 정보를 저장한 결재 테이블(예를 들면, 신용 카드 번호) 이렇게 3개의 테이블을 포함한다고 가정한다. 또한, 애플리케이션(108)은 고객 테이블에 고객(예를 들면, 이름, 주소, 전화번호 등)을 추가하려는 요청을 연산 발생기(104)에 전송할 것이고, 애플리케이션(108)은 데이터 무결성 관리자(102)에게(도 2의 설정 동작의 일부로서), 고객을 고객 테이블에 추가하는 이런 요청이 주문 테이블 또는 결재 테이블을 액세스할 필요가 없을 것이란 점을 알려준다고 가정한다. 그러므로, 데이터 무결성 관리자(102)는 제한적 연결(112)에 대한 사용권한들을 설정할 수 있어서, 주문 테이블 및 결재 테이블으로의 액세스는 거절되나 고객 테이블로의 액세스는 승인되도록 한다. 그러므로, 연산 발생기(104)가, 성명을 변경하기 위한 애플리케이션(108)에 의한 요청 메시지에 지시된 바대로 고객을 추가시키는 연산(들)을 동적으로 발생할 때, 연산 발생기(104)에 의해 생성된 연산들 중 임의의 하나가 주문 테이블 또는 결재 테이블 둘 중 하나를 액세스하려고 시도하는 경우, 데이터 저장소(106)는 그 액세스가 수행되지 못하게 한다. 데이터 저장소(106)는, 사용권한이 거절된 데이블로의 액세스를 시도하였다는 지시를 연산 발생 기(104)(또는 데이터 무결성 관리자(102))에 반환할 수 있거나, 데이터 저장소(106)가 그 연산을 단순히 실행하지 않을 수 있어, 타임아웃 주기가 경과한 이후 연산 발생기(104)는 연산에 문제가 발생하였다고 가정할 것이다.
그러나, 사용권한들을 승인하고 거절하는 것으로 항상 잘못된 연산을 검출할 수는 없다. 예를 들면, 이전 실례에 이어서, 연산 발생기(104)에 의해 동적으로 생성된 연산들이 고객 테이블로부터 고객을 삭제할 수도 있다고 가정한다. 연산 발생기(104)가 고객 테이블을 액세스하는 사용권한을 가지기 때문에, 사용권한들이 이런 잘못된 삭제가 발생하는 것을 방지시키지는 않을 것이다.
스냅샷 모듈(302)은 데이터 저장소(106)의 비제한 부분에 임의의 예상치 않은 변경들이 행해졌는지를 검사한다. 스냅샷 모듈(302)은 데이터 저장소(106)의 제한 부분에 임의의 예상치 않은 변경들이 행해졌는지는 검사할 필요가 없는데, 이는 데이터 저장소(106)의 제한 부분에 임의의 변경들이 행해지는 것을 방지하기 위해서 이미 설정해 놓았던 사용권한들을 신뢰할 수 있기 때문이다. 또는, 스냅샷 모듈(302)은 데이터 저장소(106)의 비제한 부분보다는 오히려 부가적 영역에 임의의 예상치 않은 변경들이 행해졌는지를 검사할 수 있다. 이에 더하여, 데이터 저장소(106)의 비제한 부분이 데이터 저장소(106)의 전부가 될 수 있음에 주목해야 한다(예를 들면, 어떤 사용권한 모듈(304)도 존재하지 않는 실시예의 경우에, 전체 데이터 저장소(106)를 비제한 부분으로서 간주할 수 있다).
애플리케이션(108)은 데이터 저장소(106)로의 어떤 변경들이 예상되는지를 데이터 무결성 관리자(102)에게 알려서, 스냅샷 모듈(302)로 하여금 비제한 부분 에 임의의 예상치 않은 변경이 행해졌는지를 검사하게 한다. 또는, 스냅샷 모듈(302)은, 어떤 변경들이 비제한 부분에 행해졌는지에 대한 지시를 애플리케이션(108)에 반환할 수 있어서, 애플리케이션(108)이 임의의 예상치 않은 변경들이 비제한 부분에 행해졌는지를 판정할 수 있게 한다.
스냅샷 모듈(302)은 임의의 예상치 않은 변경들이 데이터 저장소(106)의 비제한 부분에 행해졌는지를 다양한 여러 가지 방법을 통해 검사할 수 있다. 소정의 실시예에서, 스냅샷 모듈(302)은 동적으로 생성된 연산들에 의해 변경될 것으로 예상치 않은 데이터 저장소(106)의 비제한 부분들의 모든 일부분들에 대한 스냅샷을 취한다. 예를 들면 도 2의 설정 동작(202)의 일부로서 이런 스냅샷을 취한다. 또한, 동적으로 생성된 연산들이 실행되기 이전에 이런 스냅샷이 취해지므로, "사전-실행" 또는 "사전" 스냅샷으로서 지칭될 수 있다. 동적으로 생성된 연산들에 의해 변경될 것으로 예상되지 않는, 데이터 저장소(106)의 비제한 부분의 이러한 일부분들은 예를 들면, 애플리케이션(108)에 의해 식별된다. 애플리케이션(108)이 어떤 요청을 제출할 것인지를 알고 있기 때문에, 애플리케이션(108)은 또한 데이터 저장소(106)에서 발생해야만 하는 것과 발생해서는 안될 것에 대한 지식을 알게 되고, 이런 지식은 데이터 무결성 관리자(102)에 전달될 수 있다. 예를 들면, 테이블에 새로운 행(예를 들면, 고객 테이블에 새로운 고객)을 생성할 경우, 그 테이블에 있는 현존하는 어떤 행도 동적으로 생성된 연산에 의해 변경되어서는 안된다. 다른 예로서, 테이블의 행을 삭제(예를 들어, 고객 테이블로부터 고객을 제거)해야 하는 경우, 삭제될 그 행을 제외하고 어떤 행도 동적으로 생성된 연산에 의해 변경되어 서는 안된다. 애플리케이션(108)이 갖고 있는 데이터 저장소(106)에서 발생해야만 하는 것과 발생해서는 안될 것에 관한 지식은 특정 요청용으로 필요하지 않은 것들에 의해서 전형적으로 특성화되는 것에 주목해야 한다. 예를 들면, 애플리케이션(108)이 요청이 테이블의 두 개의 행에만 영향을 주어야 한다고 알고 있을 경우, 애플리케이션(108)은 변경되지 말아야 하는 어쩌면 수천개의 행들을 잠재적으로 열거하기 보다는 오히려, 이런 두 개의 행을 열거하여 어떤 다른 행도 변경해서는 안된다고 나타낸다.
동적으로 생성된 연산들에 의해 변경될 것으로 예상치 않은, 데이터 저장소(106)의 비제한 부분의 일부분들에 대한 스냅샷을 여러 가지 방법으로 취할 수 있다. 소정의 실시예에서, 동적으로 생성된 연산들에 의해 변경될 것으로 예상치 않은, 데이터 저장소(106)의 비제한 부분의 일부분들에 있는 모든 데이터를 복사하거나 그렇지 않으면 캡처함으로써 스냅샷이 얻어진다. 다른 실시예에서, 동적으로 생성된 연산들에 의해 변경될 것으로 예상치 않은 데이터 저장소(106)의 비제한 부분의 일부분들을 통해 임의의 해시 값(통상의 해시 함수를 이용함)을 계산함으로써 스냅샷을 취한다.
또 다른 실시예에서, 데이터 저장소(106)의 비제한 부분의 여러 일부분들의 버전 번호를 복사하거나 그렇지 않으면 캡처함으로써 스냅샷을 취할 수 있다. 예를 들면, 데이터 저장소(106)가 하나 이상의 테이블을 가진 데이터베이스인 실시예의 경우에, 버전 값들의 열을 테이블에 포함할 수 있다. 데이터베이스의 특정 열을 위한 버전 값은, 해당 특정 열 내의 데이터가 변경될 때마다 데이터베이스에 의 해 변경된다. 버전 값은 예를 들면, 데이터베이스에서 유일하다고 예상되는 임의의 값으로 예를 들어, GUID(Globally Unique Identifier), 날짜 및 시간 스탬프(예를 들면, 10억분의 1초로 시간을 측정하는 것), 해시 함수를 행내의 데이터에 적용함으로써 얻어낸 해시 값 등과 같다. 이런 버전 값들의 열이 이미 테이블에 존재하지 않을 경우, 데이터 무결성 관리자(102)는 테이블에 해당 열을 생성할 수 있다(예를 들면, 도 2의 설정 동작(202)의 일부로서).
데이터 저장소(106)의 비제한 부분의 여러 일부분들의 버전 번호를 복사하거나 그렇지 않으면 캡처링하는 것에 더하여, 소정의 실시예에서는 해당 버전 번호가 어떤 일부분에 대한 것인지에 관한 지시자를 복사하거나 그렇지 않으면 캡처할 수 있다. 예를 들면, 데이터 저장소(106)가 버전 값들의 열을 갖는 테이블을 포함하는 실시예의 경우에, 다른 열은 테이블의 행들을 고유하게 식별하는 식별자(예를 들면, 일차 키 값들)를 포함할 수 있다. 그러므로, 스냅샷은 그 테이블의 버전 번호들과 특정 행들 사이의 관련성을 유지할 수 있다. 테이블의 버전 번호들과 특정 행들 사이의 관련성을 허용하는 이런 부가적인 식별자를 가짐으로써, 하기에 더욱 자세히 논의된 대로 검출된 임의의 변경들의 성질을 보다 정확하게 식별하는 것이 가능하다.
동적으로 생성된 연산들에 의해 변경될 것으로 예상치 않은, 데이터 저장소(106)의 비제한 부분의 일부분들에 대한 스냅샷을 취한 이후에, 동적으로 생성된 연산들이 수행될 수 있다. 동적으로 생성된 연산들이 수행된 이후에, 동적으로 생성된 연산들에 의해 변경될 것으로 예상치 않은, 데이터 저장소(106)의 비제한 부 분의 일부분들에 대한 또 다른 스냅샷을 취한다. 상기의 논의한 바와 같은 사전-실행 스냅샷과 동일한 방식으로 이런 제2 스냅샷을 취한다. 예를 들면, 도 2의 동작(210)에서의 검증의 일부로서 이런 제2 스냅샷을 취한다. 또한, 이런 제2 스냅샷은 "사후-실행" 또는 "사후" 스냅샷으로서 지칭될 수 있는데, 이는 동적으로 생성된 연산들이 수행된 이후에 이것을 취하기 때문이다. 동적으로 생성된 연산들에 의해 변경될 것으로 예상치 않은 데이터 저장소(106)의 비제한 부분의 일부분들에 대하여 이런 제2 스냅샷을 취하는데, 사전 스냅샷을 취했던 놓았던 동일한 일부분들에 대해서만 취할 필요가 없다는 점에 주목해야 한다. 그러므로, 예를 들면, 동적으로 생성된 연산에 의해 추가될 것으로 예상했던 임의의 행들과는 다른 오히려 새로운 행이 비제한 부분에 있는 테이블에 추가되었을 경우, 취한 사후-실행 스냅샷은 이런 새로운 행들을 포함할 것이다.
동적으로 생성된 연산들에 의해 변경될 것으로 예상치 않은, 데이터 저장소(106)의 비제한 부분의 일부분들에 대한 임의의 변경들이 존재한다면, 이러한 변경들은 스냅샷들에 반영되어야만 한다. 예를 들면, 변경될 것으로 예상치 않은 데이터 저장소의 비제한 부분에 추가되었던 임의의 데이터(예를 들면, 테이블의 행), 변경될 것으로 예상치 않은 데이터 저장소의 비제한 부분으로부터 삭제되었던 임의의 데이터, 및 변경될 것으로 예상치 않은 데이터 저장소의 비제한 부분에서 수정되었던 임의의 데이터는 스냅샷들에 반영될 것이다. 그래서, 사전-실행 스냅샷과 사후-실행 스냅샷 양자가 동일하면(즉, 값들이 동적으로 생성된 연산들에 의해 변경될 것으로 예상하지 않은 데이터 저장소(106)의 비제한 부분의 일부분들에 있는 모든 데이터이든지, 해시 값들 혹은 버전 값들이든지에 상관없이 일치하는 값들일 경우), 동적으로 생성된 연산들에 의해 변경될 것으로 예상치 않은 데이터 저장소(106)의 비제한 부분의 일부분들에 어떤 변경도 발생하지 않았던 것이다.
스냅샷을 취하는 방법에 의존하여, 동적으로 생성된 연산에 의해 변경될 것으로 예상치 않았으나 변경되어 버린, 데이터 저장소(106)의 비제한 부분의 특정한 일부분을 식별할 수 있다. 예를 들면, 일차 키 값과 같은 스냅샷의 일부로서 식별자를 복제하거나 그렇지 않으면 캡처하는 경우에, 특정 버전 번호가 사전-실행 및 사후-실행 스냅샷에서 달라지면, 스냅샷 모듈(302)은 테이블의 어떤 행이 변경되었는지를 알게 된다(식별자에 근거함).
테이블의 버전 번호 및 특정 행들 사이에 관련성을 허용하는 부가적인 식별자(예를 들면, 일차 키 값들)를 가짐으로써, 검출한 임의의 변경들의 성질을 보다 정확하게 식별하는 것이 가능하다. 예를 들면, 버전 값이 달라지나 행의 식별자는 동일하게 유지되는 경우, 그 행에 있는 데이터를 수정했다는 것이다. 다른 예로서, 사전-실행 스냅샷에 존재하지 않았던 새로운 행 식별자가 사후-실행 스냅샷에 존재하는 경우, 그 새로운 행 식별자에 의해 식별된 행은 그 테이블에 추가되었던 새로운 행이다. 또 다른 예로서, 행 식별자가 사전-실행 스냅샷에 존재하나 사후-실행 스냅샷에 존재하지 않는 경우, 그 행 식별자에 의해 식별된 행은 그 테이블로부터 삭제되었던 행이다.
또 다른 실시예에서, 데이터 저장소(106)의 일부분들에 대한 스냅샷을 취하는 것보다, 스냅샷 모듈(302)은 임의의 예상치 않은 변경들이 데이터 저장소(106) 의 비제한 부분에 행해지는지를 판정하기 위해 트리커들을 사용한다. 트리거는 몇몇의 데이터 저장소(106)들에 의해 지원되는 메커니즘으로, 스냅샷 모듈(302)로 하여금 데이터 저장소(106)가 데이터 저장소(106)의 특정 테이블(또는 기타 유닛)에 행해진 각각의 변경에 대해 통보할 것을 요청하게 허용한다. 이런 변경들은 예를 들면, 특정 테이블 추가될 데이터, 특정 테이블로부터 삭제된 데이터, 특정 테이블에 업데이트된 데이터를 포함할 수 있다. 스냅샷 모듈(302)은 데이터 저장소(106)가 통보한 이런 변경들에 관한 기록(변경들을 나열한 테이블)을 유지하고, 동적으로 생성된 연산들이 수행된 이후에 그 기록을 평가할 수 있다(예를 들면, 도 2의 검증 동작(210)의 일부로서). 또는, 데이터 저장소(106)는 변경들에 대한 기록(예를 들면, 변경들을 나열한 테이블)을 유지할 수 있고, 이런 기록은 스냅샷 모듈(302)에 의해 액세스 된다.
애플리케이션(108)이 데이터 무결성 관리자(102)에게 알려주었던 것이 아닌 변경들에 대한 기록에 임의의 변경들이 포함되어 있다고 예상했을 경우, 스냅샷 모듈(302)은 예상치 않은 변경(들)이 동적으로 생성된 연산들에 의해 데이터 저장소(106)의 비제한 부분에 행해졌음을 알게 된다. 그 기록에 포함된 변경들만이 애플리케이션(108)이 데이터 무결성 관리자(102)에게 알려주었던 변경들이라고 예상했을 경우, 스냅샷 모듈(302)는 어떤 예상치 않은 변경도 동적으로 생성된 연산들에 의해 데이터 저장소(106)의 비제한 부분에 발생하지 않았음을 알게 된다.
소정의 실시예에서, 사용권한 모듈(304) 및 스냅샷 모듈(302)이 애플리케이션(108)으로부터의 요청에 대해 예상치 않은 어떤 작업도 수행되지 않았음을 검증 하는데 이용되는데, 이 요청에는 데이터 저장소(106)에 엔트리(예를 들면, 행, 열, 테이블, 페이지, 라인, 블럭 등)를 생성하고, 데이터 저장소(106)의 엔트리를 업데이트하고/거나 데이터 저장소(106)의 엔트리를 삭제하는 것과 같은 데이터 저장소(106)를 수정하는 것이 포함된다. 이후에 더욱 자세히 논의된 대로, 데이터 저장소(106)로부터 엔트리를 판독하는 것을 포함하는, 애플리케이션(108)으로부터의 요청들에 대해, 어떤 예상치 않은 작업도 수행되지 않았음을 검증하는데 사용권한 모듈(304) 및 로크설정 모듈(306)을 이용한다.
도 4는 어떤 예상치 않은 작업도 동적으로 생성된 연산들에 의해 수행되지 않았음을 검증하기 위한 예시적인 프로세스(400)을 예시한 흐름도이다. 프로세스(400)는 셋업 실행 동작(202) 및/또는 도 2의 검증 동작(210)을 실행함으로써 수행될 수 있는 예시적인 프로세스이다. 소프트웨어, 펌웨어, 하드웨어, 또는 그것들의 조합으로 프로세스(400)를 수행할 수 있다.
초기에, 사용권한들은 액세스하지 말아야 하는 데이터 저장소의 일부분들로의 액세스를 거절하는데 사용된다(동작 402). 이러한 사용권한들은 예를 들면, 상기에 논의된 바와 같은, 도 3의 사용권한 모듈(304)에 의해 설정된다. 동적으로 생성된 연산(들)을 수행한 이후에, 임의의 예상치 않은 변경들이 동적으로 생성된 연산(들)에 의해 데이터 저장소의 무제한된 일부분들에 행해졌는지 검사한다(동작404). 예를 들어, 상기에 논의된 바와 같은, 도 3의 스냅샷 모듈(302)이 이런 검사를 수행한다. 이런 검사의 결과가 예를 들면, 애플리케이션(108)에 반환될 수 있다.
프로세스(400)는 동적으로 생성된 연산(들)이 임의의 예상치 않은 변경들을 데이터 저장소의 비제한 부분들에 발생시켰는지 또는 데이터 저장소의 제한 부분을 액세스했는지에 기반하여 진행된다(동작 406). 데이터 저장소의 비제한 부분으로의 임의의 예상치 않은 변경들이 발생했는지는 여부는 동작(404)의 검사 결과로부터 판정된다. 데이터 저장소의 제한 부분으로의 임의의 액세스를 시도하였는지는, 상기 논의된 사용권한 모듈(304)에 의해 설정된 사용권한들에 기반하여 수행된다.
동적으로 생성된 연산(들)이 예상치 않은 임의의 변경들을 데이터 저장소의 비제한 부분에 발생시켰고/거나 데이터 저장소의 제한 부분을 액세스했던 경우, 예상치 않은 작업이 동적으로 생성된 연산(들)에 의해 수행되었다(동작 408). 선택적으로, 어떤 작업이 수행되었는지에 대한 지시를 도 1의 애플리케이션(108)에게 반환하거나, 또는 단순히 몇몇 예상치 않은 작업이 수행되었다는 지시를 애플리케이션(108)에게 반환할 수 있다. 그러나, 동적으로 생성된 연산(들)이 데이터 저장소의 비제한 부분으로의 임의의 예상치 않은 변경들을 발생시키지 않았고, 데이터 저장소의 제한 부분을 액세스 하지 않았을 경우, 동적으로 생성된 연산(들)에 의해 어떤 예상치 않은 작업도 수행되지 않았다고 검증한다(동작 410). 이런 검증은 선택적으로 애플리케이션(108)에 반환될 수 있다.
도 5는 동적으로 생성된 연산(들)에 의해 어떤 예상치 않은 작업도 수행되지 않았음을 검증하기 위한 다른 예시적인 프로세스(500)을 예시하는 흐름도이다. 프로세스(500)는 도 2의 셋업 동작(202) 및/또는 검증 동작(210)을 수행함으로써 실행될 수 있는 예시적인 프로세스이다. 프로세스(500)는 소프트웨어, 펌웨어, 하드 웨어, 또는 그것들의 조합으로 수행될 수 있다.
초기에, 사용권한들은 액세스하지 말아야 하는 데이터 저장소의 일부분들로의 액세스를 거절하는데 사용된다(동작 502). 이런 사용권한들은 예를 들면, 상기 도 3에서 논의된 바와 같은 사용권한 모듈(304)에 의해 설정된다. 데이터 저장소의 비제한 부분에 대한 제1 스냅샷을 취한다(동작 504). 스냅샷 모듈(302)에 관해서 상기에 논의한 바와 같이, 임의의 다양한 방법을 통해 이런 스냅샷을 취할 수 있다. 동적으로 생성된 연산(들)을 수행한 이후에, 데이터 저장소의 비제한 부분에 대한 제2 스냅샷을 취한다(동작 506). 제2 스냅샷은, 동작(504)에서 취한 제1 스냅샷을 위한 방법과 동일한 방법을 취한다.
제1 및 제2 스냅샷들을 비교하고(동작 508), 프로세스(500)는 두 개의 스냅샷이 동일한지에 따라 진행된다(동작 510). 두 개의 스냅샷이 동일할 경우(예를 들면, 값들이 동적으로 생성된 연산들에 의해 변경될 것으로 예상치 않는, 데이터 저장소의 비제한 부분들의 일부분들에 존재하는 모든 데이터들이든지, 해시 값들 또는 버전 값들이든지에 상관없이 일치하는 값들일 경우), 동적으로 생성된 연산(들)에 의해 어떤 예상치 않은 작업도 수행되지 않았다고 검증한다(동작 512). 이 검증은 선택적으로 애플리케이션(108)에 반환될 수 있다. 그러나, 두 개의 스냅샷이 동일하지 않을 경우, 동적으로 생성된 연산(들)에 의해 예상치 않은 작업이 수행되었다는 것이다(동작 514). 선택적으로, 어떤 작업을 수행했는지에 대한 지시(예를 들면, 스냅샷에서 변경된 값들에 기반함)를 도 1의 애플리케이션(108)에 반환할 수 있거나, 또는 단순히 몇몇 예상치 않은 작업이 수행되었다는 지시를 애플리 케이션(108)에 반환할 수 있다.
도 3을 참조하면, 로크설정 모듈(306)이 데이터 저장소(106)의 비제한 부분의 일부분들을 로킹하여서, 이런 로킹된 일부분들이 연산 발생기(104)에 의해 액세스될 수가 없다. 또는, 로크설정 모듈(306)은 비제한 부분의 일부분들 보다는 오히려 데이터 저장소(106)의 부가적인 일부분들을 로킹할 수 있다. 그에 더하여, 데이터 저장소(106)의 비제한 부분은 데이터 저장소(106)의 전부일 수도 있음에 주목해야 한다(예를 들면, 사용권한 모듈(304)이 존재하지 않는 실시예의 경우에, 전체 데이터 저장소(106)가 비제한 부분으로서 간주된다). 로크설정 모듈(306)은, 전형적으로 데이터 저장소(106)로부터 데이터 값들을 판독하는 것을 포함하는 애플리케이션(108)으로부터의 요청들을 위해 이용된다.
상기 논의된 대로, 데이터 저장소(106)에 의해 지원되는 사용권한들의 입도는 데이터 저장소(106)의 모든 원하는 일부분들이 제한받도록 허용할 수 없다(예를 들면, 사용권한들에 의해 전체 테이블로의 액세스는 거절당할 수 있으나, 각각의 행 단위로 사용권한들을 승인하거나 거절할 수는 없게 한다.) 로크설정 모듈(306)은 데이터 저장소(106)에 의해 지원되는 사용권한들에 의해 허용된 것보다 더욱 세밀한 입도 로 데이터 저장소(106)의 부분들의 로킹을 허용한다. 로크설정 모듈(306)은, 동적으로 생성된 연산들이 액세스하지 말아야 하는, 데이터 저장소(106)의 비제한 부분의 이런 일부분들을 식별한다. 애플리케이션(108)은 데이터 저장소(106)로부터 요청된 데이터가 무엇인지를 데이터 무결성 관리자(102)에게 알려서, 로크설정 모듈(306)로 하여금 동적으로 생성된 연산들이 데이터 저장소(106)의 비 제한 부분 중 어떤 일부분을 액세스하지 말아야 하는지 판정하게 하고 이런 일부분들을 로킹하게 한다.
동적으로 생성된 연산들이 액세스하지 말아야 하는 데이터 저장소(106)의 비제한 부분의 일부분들은 여러 가지 다른 방법으로 식별될 수 있는데, 적어도 데이터 저장소(106)의 고유한 성질에 부분적으로 의존한다. 데이터 저장소(106)가 Microsoft® SQL 서버인 경우의 소정의 실시예에서, 동적으로 생성된 연산들이 액세스하지 말아야 하는 데이터 저장소(106)의 비제한 부분의 일부분들이, 애플리케이션(108)로부터의 요청을 만족시키지 못하는 데이터 저장소(106)의 비제한 부분의 테이블(들)의 각각의 행을 선택하는 로크설정 모듈(306)에 의해 (예를 들면, 일차 키와 같은 식별자에 대해) 식별된다. 예를 들면, 애플리케이션(108)으로부터의 요청을 만족시키지 못하는 행들을 식별하기 위해, 데이터 저장소(106)에 연산들을 제출하는 로크설정 모듈(306)에 의해 이런 행들(및 그것들의 식별자들)이 결정된다. 이런 행들 각각에 대해, 로크설정 모듈(306)은 행에 대해 업데이트 트랜잭션을 개시하나, 업데이트 트랜잭션을 완성하지 못한다. 트랜잭션은 모두 수행되거나 전혀 수행되지 않을 것 둘 중 하나를 보장하는 연산들의 집합이다. 트랜잭션은, 그 집합에 있는 모든 연산들의 결과를 완료하거나 집합에 있는 연산들의 어떤 결과도 완료되지 않도록 트랜잭션을 롤백하는 것 둘 중 하나를 실행하는 연산에 의해 전형적으로 완결된다. 엡데이트 트랜잭션은 데이터 저장소(106)의 특정 부분(예를 들면, 특정 행)을 업데이트하거나 수정하는 트랜잭션이다. 업데이트 트랜잭션이 각각의 행에 대해 개시된 후, 로크설정 모듈(306)은 자신의 로킹 프로세스가 실행되어 요 청이 연산 발생기(104)로 제출될 수 있다고 애플리케이션(108)에게 통보하여서, 발생기(104)가 동적으로 연산들을 생성할 수 있게 한다.
"로크 에스컬레이션(lock escalation)"으로 지칭되는 데이터 저장소(106)의 상태를 벗어나기 위해서 각각의 행들에 대해 분리된 업데이트 트랜잭션을 개시한다. 로크 에스컬레이션은, 데이터 저장소(106)가 테이블에 있는 충분히 많은 행들을 액세스하는 트랜잭션을 수신할 경우 발생하는데, 이때 데이터 저장소(106)는 그 트랜잭션에 의해 요청된 대로 각각의 행들을 로킹하려 시도하기 보다는 전체 테이블을 로킹할 것으로 결론내린다. 그러나, 전체 테이블을 로킹하는 경우, 동적으로 생성된 연산들에 의해 액세스 되어야만 하는 테이블의 일부분들이, 동적으로 생성된 연산들에 의해 액세스가 불가할 것이다. 그래서, 로크 에스컬레이션을 방지하고, 동적으로 생성된 연산들에 의해 액세스 되어야 하는 테이블의 일부분이 동적으로 생성된 연산들에게 액세스 가능하게 되도록, 각각의 행들에 대한 각각의 업데이트 트랜잭션들을 개시한다. 데이터 저장소(106)는 이러한 개별적인 업데이트 트랜잭션을 개별적으로 처리하여, 로크 에스컬레이션은 발생하지 않을 것이다. 데이터 저장소(106)가 로크 에스컬레이션을 나타내지 않는 실시예의 경우에, 이런 개별적인 업데이트 트랜잭션들을 사용할 필요가 없게 되고, 동적으로 생성된 연산들이 액세스하지 말아야 하는 모든 행들을 식별하는 단일 업데이트 트랜잭션을 사용할 수 있다.
애플리케이션(108)으로부터의 요청을 만족시키지 않는 각각의 행들에 대한 업데이트 트랜잭션을 개시하였으나 아직 완결하지 않음으로써, 데이터 저장소(106) 는 로크 모듈(306)이 이런 행들에 대해 변경을 행하고 있는 중이라고 믿는다. 그러므로, 동적으로 생성된 연산들을 수행할 때, 임의의 연산들이 데이터 저장소(106)의 로킹된 일부분을 액세스(예를 들면, 판독)하려고 시도하는 경우, 데이터 저장소(106)는 그 연산을 실행하지 않는데, 이는 데이터 저장소(106)의 그 일부분이 미결된 업데이트 트랜잭션(들)로 인해 로킹되어 있기 때문이다. 데이터 저장소(106)는 다른 컴포넌트(로크설정 모듈(306))가 데이터 저장소(106)의 그 일부분을 업데이트하는 중이란 것을 알고 있어서, 데이터 저장소(106)는 해당 연산을 수행하지 않을 것인데, 이는 해당 연산에 대해서 어떤 값(들)이 적절한지는 미결된 업데이트 트랜잭션(들)이 완결된 이후에야 분명해지기 때문이다. 데이터 저장소(106)는 전형적으로 특정 시간 이후에 타임아웃될 것이고, 연산이 타임아웃되어 실행될 수 없다는 지시를 연산 발생기(104)에 반환할 것이다. 그 다음에, 연산 발생기(104)는 요청을 수행할 수 없다고 지시하는 응답을 애플리케이션(108)에 반환하고, 애플리케이션(108)은 동적으로 생성된 연산(들)에 문제가 발생하였다고 추론할 수 있다.
애플리케이션(108)은 데이터 무결성 관리자(102)에게 동적으로 생성된 연산이 수행되었던 시각은 언제인지를 알려주며, 이 시점에서 로크설정 모듈(306)은 행들에 설정하였던 로크들을 해제할 수 있는지도 알려준다. 예를 들면, 로크들을 해제하고 업데이트 트랜잭션들을 롤백할 것을 데이터 저장소(106)에 알려주는 로크설정 모듈(306)이 이런 로크들의 해제를 수행할 수 있다. 실제로 데이터 저장소(106)는 트랜잭션들을 롤백함으로써, 이런 업데이트 트랜잭션들에 응답하는 어떤 데이터 업데이트도 수행하지 않는다. 로크들을 해제하고 업데이트 트랜잭션들을 롤백함으로써 업데이트 트랜잭션들이 완결된다(이런 업데이트 트랜잭션들의 어떤 것도 데이터 저장소(106)에서 완료되지 않았을 경우일지라도 그러함).
소정의 실시예에서, 로크설정 모듈(306)은 로크들의 여러 다른 집합을 동시에 설정할 수 있다. 이런 로크들의 다른 집합을 개별적으로 설정하고 해제할 수 있고, 데이터 저장소(106)으로의 여러 가지 연결(예를 들면, 도 1의 비제한적 연결(110)과 유사한 여러 가지 비제한적 연결들)을 통해 이런 로크들을 설정하는 업데이트 트랜잭션들을 전형적으로 실행할 것이다.
도 6은 동적으로 생성된 연산들이 액세스하지 말아야 하는 데이터 저장소의 부분이 동적으로 생성된 연산들에 의해 액세스 되지 않음을 검증하는 예시적인 프로세스(600)를 예시하는 흐름도이다. 프로세스(600)는 도 2의 셋업 동작(202) 및/또는 검증 동작(210)을 실행하는 것으로서 수행될 수 있는 예시적인 프로세스이다. 프로세스(600)를 소프트웨어, 펌웨어, 하드웨어, 또는 그것들의 조합으로 실행할 수 있다.
처음에, 사용권한들은 액세스하지 말아야 하는 데이터 저장소의 일부분들로의 액세스를 거절하는데 사용된다(동작 602). 예를 들면, 이런 사용권한들이 상기 논의한 대로 도 3의 사용권한 모듈(304)에 의해 설정된다. 판독하지 말아야 하는 데이터 저장소의 비제한 부분의 일부분들을 로킹한다(동작 604). 예를 들면, 도 3의 로크설정 모듈(306)을 참조하여 상기 논의한 대로 이런 로킹을 실행할 수 있다.
동적으로 생성된 연산(들)을 실행한(또는 동적으로 생성된 연산(들)을 동시 에 실행한) 이후에, 프로세스(600)는 데이터 저장소의 임의의 로킹된 일부분이 동적으로 생성된 연산(들)에 의해 액세스 되었는지에 따라 진행된다(동작 606). 동적으로 생성된 연산(들)이 데이터 저장소의 임의의 일부분을 액세스하였다면, 동적으로 생성된 연산(들)은 액세스하지 말았어야 했던 데이터 저장소의 일부분으로의 액세스를 시도하였다(동작 608). 선택적으로, 동적으로 생성된 연산(들)이 액세스하지 말았어야 했던 데이터 저장소의 일부분으로의 액세스를 시도했음에 대한 지시가 도 1의 애플리케이션(108)에 반환될 수 있다. 그러나, 데이터 저장소의 로킹된 어떤 일부분도 동적으로 생성된 연산(들)에 의해 액세스 되지 않았다면, 동적으로 생성된 연산(들)이 액세스하지 말았어야 했던 데이터 저장소의 일부분으로의 액세스를 시도하지 않았다는 것이다(동작 610). 선택적으로 이런 검증을 애플리케이션(108)에 반환할 수 있다.
도 7은 본원에서 기술된 기술들을 구현하는데 사용될 수 있는 전반적인 컴퓨터 환경(700)을 도시한다. 컴퓨터 환경(700)은 컴퓨팅 환경의 한 가지 예시일 뿐이며, 컴퓨터 및 네트워크 아키텍처의 사용과 기능 범위에 대하여 임의의 제한을 제시하려는 의도가 아니다. 컴퓨터 환경(700)은 그 예시적인 컴퓨터 환경(700)에서 예시한 컴포넌트들 중 임의의 하나 혹은 그들의 조합에 관련된 어떤 종속 사항이나 요구사항을 가지지 않는 것으로 해석되어야 한다.
컴퓨터 환경(700)은 컴퓨터(702) 형태인 범용 컴퓨팅 장치를 포함한다. 컴퓨터(702)는 예를 들면, 도 1의 애플리케이션(108), 연산 발생기(104), 데이터 무결성 관리자(102), 및/또는 데이터 저장소(106)가 구현될 수 있는 장치일 것이다. 컴퓨터(702)의 컴포넌트는 하나 이상의 프로세서들 또는 프로세싱 유닛들, 시스템 메모리(706), 및 프로세서(704)를 포함하여 다양한 시스템 컴포넌트들을 시스템 메모리(706)에 결합시키는 시스템 버스(708)를 포함할 수 있으나, 이에만 국한되지는 않는다.
시스템 버스(708)는 메모리 버스 또는 메모리 제어기, 주변 장치 버스, 가속 그래픽 포트, 및 프로세서 또는 다양한 버스 아키텍처 중 임의의 것을 사용하는 로컬 버스를 포함하여 여러 형태의 버스 구조들 중 다수 혹은 임의의 하나를 나타낸다. 예로서, 이런 아키텍처는 업계 표준 구조(ISA) 버스, 마이크로 채널 구조(MCA) 버스, Enhanced ISA 버스(EISA), 비디오 전자 공학 표준 협회(VESA) 로컬 버스, 및 메자닌 버스라고 알려진 주변 장치 상호 연결(PCI) 버스를 또한 포함한다.
컴퓨터(702)는 전형적으로 다양한 컴퓨터 판독가능 매체를 포함한다. 컴퓨터 판독가능 매체는 컴퓨터(702)에 의해 액세스될 수 있는 임의의 이용가능한 매체, 휘발성 혹은 비휘발성 매체, 분리형 혹은 비분리형 매체 모두를 포함한다.
시스템 메모리(706)는 임의 접근 메모리(RAM:710)와 같은 휘발성 메모리 및/또는 판독 전용 메모리(ROM:712)와 같은 비휘발성 메모리 형태의 컴퓨터 판독가능 매체를 포함한다. 시작할 때 등에 컴퓨터(702) 내의 구성 요소들 사이의 정보 전달을 돕는 기본적인 루틴들을 포함하는 기본 입력/출력 시스템(BIOS:714)은 전형적으로 ROM(712)에 저장된다. RAM(710)은 전형적으로 프로세싱 유닛(704)에 의해서 현재 동작 중인 즉시 액세스 가능한 프로그램 모듈 및/또는 데이터를 포함한다.
컴퓨터(702)는 또한 기타 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매 체를 포함할 수 있다. 실례로서, 도 7은 비분리형 비휘발성 자기 매체(도시하지 않음)로부터 판독하거나 이것에 기입하는 하드 디스크 드라이브(716), 분리형 비휘발성 자기 디스크(720)(예를 들면, "플로피 디스크")로부터 판독하거나 이것에 기입하는 자기 디스크 드라이브(718), 및 CD-ROM, DVD-ROM, 또는 기타 광학 매체와 같은 분리형 비휘발성 광디스크(724)로부터 판독하거나 이것에 기입하는 광디스크 드라이브(722)를 예시한다. 하드 디스크 드라이브(716), 자기 디스크 드라이브(718), 및 광디스크 드라이브(722)는 각각 하나 이상의 데이터 매체 인터페이스(725)를 통해 시스템 버스(708)에 연결될 수 있다. 대안적으로, 하드 디스크 드라이브(716), 자기 디스크 드라이브(718), 및 광디스크 드라이브(722)는 하나 이상의 인터페이스(도시하지 않음)를 통해 시스템 버스에 연결될 수 있다.
디스크 드라이브들 및 관련 컴퓨터 판독가능 매체는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 기타 데이터의 비휘발성 저장소로서 컴퓨터(702)에 제공된다. 예로서 하드 디스크(716), 분리형 자기 디스크(720), 및 분리형 광디스크(724)를 도시하고 있을지라도, 컴퓨터에 의해 액세스될 수 있는 데이터를 저장할 수 있는 자기 카세트 또는 기타 자기 저장 장치, 플래시 메모리 카드, CD-ROM, 디지털 다목적 디스크(DVD) 또는 기타 광저장소, 임의 접근 메모리(RAM), 판독 전용 메모리(ROM), 전기적으로 삭제가능한 프로그램가능한 판독-전용 메모리(EEPROM) 등과 같은 기타 유형의 컴퓨터 판독가능 매체가 예시적인 컴퓨팅 시스템 및 환경을 구현하는데 이용될 수도 있음을 인식할 수 있다.
예로서 운영 체제(726), 하나 이상의 애플리케이션 프로그램(728), 기타 프 로그램 모듈(730), 및 프로그램 데이터(732)를 포함한 임의 개수의 프로그램 모듈이 하드 디스크(716), 자기 디스크(720), 광디스크(724), ROM(712) 및/또는 RAM(710)에 저장될 수 있다. 이런 운영 체제(726), 하나 이상의 애플리케이션 프로그램(728), 기타 프로그램 모듈(730), 및 프로그램 데이터(732)(또는 이들의 몇 가지 조합)가 각각 분산 파일 시스템을 지원하는 상주하는 컴포넌트의 일부 혹은 전체를 구현할 수 있다.
사용자는 키보드(734) 및 포인팅 장치(736)(예를 들면, "마우스") 같은, 입력 장치를 통해 명령어와 정보를 컴퓨터(702)에 입력할 수 있다. 기타 입력 장치(들)(738)(특별히 도시되지 않음)는 마이크로폰, 조이스틱, 게임 패드, 위성 접시형 안테나, 직렬 포트, 스캐너 등을 포함할 수 있다. 이러한 장치들과 기타 입력 장치들은 종종 시스템 버스(708)에 결합된 사용자 입력/출력 인터페이스(740)를 통해 프로세싱 유닛(704)에 연결되는데, 병렬 포트, 게임 포트, 또는 범용 직렬 버스(USB)와 같은 버스 구조 및 기타 인터페이스에 의해 연결될 수 있다.
또한, 모니터(742) 또는 다른 유형의 디스플레이 장치가 비디오 어댑터(744)와 같은 인터페이스를 통해 시스템 버스(708)에 연결될 수 있다. 모니터(742) 이외에, 기타 주변 출력 장치는 스피커(도시되지 않음)와 같은 컴포넌트, 및 입력/출력 인터페이스(740)를 통해 컴퓨터(702)에 연결될 수 있는 프린터(746)를 포함할 수 있다.
컴퓨터(702)는 원격 컴퓨팅 장치(748)와 같은 하나 이상의 원격 컴퓨터들로의 논리적 연결을 사용하는 네트워크 환경에서 동작할 수 있다. 예로서, 원격 컴 퓨팅 장치(748)는 개인용 컴퓨터, 휴대형 컴퓨터, 서버, 라우터, 네트워크 컴퓨터, 피어 장치, 또는 기타 공통 네트워크 노드 등일 수 있다. 원격 컴퓨터 장치(748)는 컴퓨터(702)와 관련되어 본원에 기술된 구성요소들과 특징을 모두 혹은 다수 포함할 수 있는 휴대형 컴퓨터로서 도시된다.
컴퓨터(702)와 원격 컴퓨터(748) 사이의 논리적 연결은 근거리 통신망(LAN:750)과 일반적인 광역 통신망(WAN:752)으로서 도시된다. 그러한 네트워킹 환경들은 사무실, 기업 규모 컴퓨터 네트워크, 인트라넷 및 인터넷에서 흔한 것이다.
LAN 네트워킹 환경에서 사용될 때, 컴퓨터(702)는 네트워크 어댑터(754) 또는 인터페이스를 통해 LAN(750)으로 연결된다. WAN 네트워킹 환경에서 사용될 때, 컴퓨터(702)는 전형적으로 WAN(752)을 통해 통신을 설정하기 위한 모뎀(756) 또는 기타 수단을 포함한다. 컴퓨터(702)에 내장될 수 있거나 외장될 수 있는 모뎀(756)은 입력/출력 인터페이스(740) 또는 기타 적절한 메커니즘을 통해 시스템 버스(708)로 연결된다. 도시된 네트워크 연결들은 예시적이며, 컴퓨터(702 및 748) 사이에 통신 링크를 설정하기 위한 기타 수단들이 사용될 수 있다는 것을 인식할 것이다.
네트워크 환경에서, 컴퓨팅 환경(700)과 함께 예시된, 컴퓨터(702)에 관련되어 도시된 프로그램 모듈이나 그 일부는 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 원격 애플리케이션 프로그램(758)은 원격 컴퓨터(748)의 메모리 장치에 상주한다. 이런 프로그램 및 컴포넌트들이 다양한 순간에 컴퓨팅 장치(702)의 다른 저장 컴포넌트에 상주하고, 컴퓨터의 데이터 프로세서(들)에 의해 실행됨을 인식하 고 있을지라도, 예시를 목적으로 애플리케이션 프로그램 및 운영 체제와 같은 기타 실행가능한 프로그램 컴포넌트들이 본원에서 분리된 블록들로 도시되어 있다.
다양한 모듈 및 기술이, 프로그램 모듈과 같은 하나 이상의 컴퓨터 또는 기타 장치들에 의해 실행되는 컴퓨터-실행가능 명령어들의 일반적 맥락에서 본원에 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정 태스크를 수행하고, 특정 추상화 데이터 타입을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 전형적으로, 프로그램 모듈의 기능은 다양한 실시예에서 원하는 대로 조합하거나 분산시킬 수 있다.
상기 모듈 및 기술에 대한 구현물이 몇몇 형태의 컴퓨터 판독가능 매체에 저장되거나 이를 통해 전송될 수 있다. 컴퓨터 판독가능 매체는 컴퓨터에 의해 액세스가능한 임의의 매체일 수 있다. 예로서, 컴퓨터 판독가능 매체는 "컴퓨터 저장 매체" 및 "통신 매체"를 포함할 수 있으나, 이에만 국한되지는 않는다.
"컴퓨터 저장 매체"는 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 기타 데이터 같은 정보를 저장하는 임의의 방법 및 기술로 구현된 휘발성 혹은 비휘발성, 분리형 혹은 비분리형 매체를 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리, 또는 기타 메모리 기술, CD-ROM, 디지털 다목적 디스크(DVD), 또는 기타 광저장소, 자기 카세트, 자기 테이프, 자기 디스크 저장소 또는 기타 자기 저장 장치, 또는 원하는 정보를 저장하는데 사용되며 컴퓨터에 의해 액세스될 수 있는 기타 매체를 포함하나, 이에만 국한되지는 않는다.
"통신 매체"는 전형적으로 컴퓨터 판독가능 명령어, 데이터 구조, 프로그램 모듈, 또는 기타 데이터를 반송파와 같은 변조된 데이터 신호 및 기타 전송 메커니즘에 포함시킨 것이다. 통신 매체는 임의의 정보 전송 매체도 포함한다. "변조된 데이터 신호"란 용어는 어떤 신호의 하나 이상의 특성을 그 신호에 실린 정보를 부호화하는 방식으로 설정 또는 변경시킨 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크와, 유선에 의한 직접 연결과 같은 유선 매체와, 음파, RF, 적외선 같은 무선 매체와, 기타 무선 매체를 포함하나, 이에만 국한되지 않는다. 상기의 임의의 것들을 조합한 것도 컴퓨터 판독가능 매체 범위에 포함된다.
상기의 설명이 구조적인 특징 및/또는 방법론적인 동작들에 대한 특정한 언어를 사용할지라도, 첨부된 청구항에서 정의된 발명이 상술된 특정한 특징 또는 동작들에만 한정되지 않음을 이해할 것이다. 다소, 특정한 특징 및 동작들은 본 발명을 구현하는 예시적인 형태로서 공개되어 있다.
데이터 저장소에 동적으로 생성된 연산들을 검증하는 방법을 제공함으로써 데이터베이스에 행해진 변경을 정확하게 검증할 수 있다.

Claims (36)

  1. 복수의 명령어들이 저장된 하나 이상의 컴퓨터 판독가능 기억 매체로서,
    상기 복수의 명령어들은 장치의 하나 이상의 프로세서에 의해 실행될 때 상기 하나 이상의 프로세서로 하여금,
    데이터 저장소의 비제한(unrestricted) 부분에만 액세스를 허용하도록 상기 데이터 저장소에 대한 사용권한(permission)을 설정하는 액트(act) - 상기 데이터 저장소는 구조화된 요청에 의해 액세스가능한 구조화 데이터베이스를, 상기 요청에 기초하여 동적으로 생성되는 하나 이상의 동적으로 생성된 연산(operation)에 의해 정의하고, 상기 데이터 저장소의 상기 비제한 부분은 상기 하나 이상의 동적으로 생성되는 연산에 의해 액세스되지 않아야 하는 상기 데이터 저장소의 제1 부분을 배제함 - ;
    상기 하나 이상의 동적으로 생성된 연산에 의해 액세스되지 않아야 하는 상기 데이터 저장소의 부분에의 액세스를 로킹(locking)하도록 로킹설정(lockset) 모듈을 활성화하는 액트 - 상기 데이터 저장소의 부분은 상기 데이터 저장소의 일부에 포함됨 - ;
    상기 하나 이상의 동적으로 생성되는 연산이 수행된 후에, 상기 데이터 저장소의 상기 비제한 부분에 예상치 못한 변경이 발생하였는지의 여부를 체크하는 액트 - 상기 예상치 못한 변경은 수행되는 각각의 연산에 요구되는 것을 넘어선 변경을 포함함 - ; 및
    상기 예상치 못한 변경이 발생하였는지의 여부에 대한 판정을 행할 시에, 상기 데이터 저장소의 상기 비제한 부분에 상기 예상치 못한 변경이 발생하였는지의 여부에 대한 표시를 전달하는 액트 - 상기 전달은 적어도 하나의 애플리케이션에 의해 발생함 -
    를 수행하게 하고,
    상기 복수의 명령어들은 또한, 상기 하나 이상의 프로세서로 하여금,
    상기 하나 이상의 연산들이 수행되기 전에, 상기 비제한 부분의 일부분에 대한 제1 스냅샷을 캡처하게 하고,
    상기 하나 이상의 연산들이 수행된 후에, 상기 비제한 부분의 일부분에 대한 제2 스냅샷을 캡처하게 하고,
    상기 제1 스냅샷과 상기 제2 스냅샷을 비교함으로써 상기 비제한 부분에 임의의 예상치 못한 변경이 발생하였는지의 여부를 체크하게 하고,
    상기 제1 스냅샷과 상기 제2 스냅샷이 동일하지 않은 경우, 상기 비제한 부분에 예상치 못한 변경들이 발생한 것으로 판정하게 하는 하나 이상의 컴퓨터 판독가능 기억 매체.
  2. 제1항에 있어서,
    상기 예상치 못한 변경들은 상기 요청을 수행하기 위해 변경되지 않아야 하는 상기 비제한 부분에서의 데이터의 임의적 추가, 삭제, 또는 수정을 포함하는 하나 이상의 컴퓨터 판독가능 기억 매체.
  3. 제1항에 있어서,
    상기 비제한 부분의 일부분은 상기 요청을 수행하기 위해 변경되지 않아야 하는 상기 비제한 부분의 해당 일부분을 포함하는 하나 이상의 컴퓨터 판독가능 기억 매체.
  4. 제1항에 있어서,
    상기 복수의 명령어들은 또한, 상기 하나 이상의 프로세서로 하여금,
    상기 제1 스냅샷과 상기 제2 스냅샷이 동일한 경우, 상기 비제한 부분에 예상치 못한 변경들이 발생하지 않은 것으로 판정하게 하는 하나 이상의 컴퓨터 판독가능 기억 매체.
  5. 제1항에 있어서,
    상기 비제한 부분의 일부분은, 데이터베이스 내에 있는 하나 이상의 테이블의 하나 이상의 행들로부터의 데이터인 하나 이상의 컴퓨터 판독가능 기억 매체.
  6. 제5항에 있어서,
    상기 제1 스냅샷을 캡처하는 것은 버전 값들의 열을 복사(copy)하는 것이고, 상기 버전 값들은 상기 하나 이상의 연산들이 수행되기 전에 상기 하나 이상의 행들로부터, 해당 특정 행의 데이터가 변경될 때마다 변경되며, 상기 제2 스냅샷을 캡처하는 것은, 상기 하나 이상의 연산들이 수행된 후에 상기 하나 이상의 행들로부터 상기 버전 값들의 열을 복사하는 것인 하나 이상의 컴퓨터 판독가능 기억 매체.
  7. 제5항에 있어서,
    상기 제1 스냅샷을 캡처하는 것은, 상기 하나 이상의 연산들이 수행되기 전에 상기 하나 이상의 행들로부터 버전 값들의 열과 일차 키 값들의 열을 복사하는 것이고, 상기 제2 스냅샷을 캡처하는 것은, 상기 하나 이상의 연산들이 수행된 후에 상기 하나 이상의 행들로부터 상기 버전 값들의 열과 상기 일차 키 값들의 열을 복사하는 것인 하나 이상의 컴퓨터 판독가능 기억 매체.
  8. 제1항에 있어서,
    상기 비제한 부분에 임의의 예상치 못한 변경들이 발생하였는지의 여부를 체크하는 것은,
    상기 데이터 저장소의 상기 비제한 부분에 발생한 임의의 변경에 대한 통지를 상기 데이터 저장소에 의해 송신하도록 요청하는 것과,
    상기 요청을 수행하기 위해 발생하지 않아야 하는 상기 비제한 부분에서의 데이터의 임의적 추가, 삭제, 또는 수정이 발생하였는지의 여부를 판정하기 위해, 상기 데이터 저장소로부터 수신한 임의의 통지를 분석하는 것인 하나 이상의 컴퓨터 판독가능 기억 매체.
  9. 복수의 명령어들이 저장된 하나 이상의 컴퓨터 판독가능 기억 매체로서,
    상기 복수의 명령어들은 장치의 하나 이상의 프로세서에 의해 실행될 때 상기 하나 이상의 프로세서로 하여금,
    데이터 저장소에의 액세스를 위한 셋업 동작들을 수행하는 액트 - 상기 데이터 저장소는 구조화된 요청에 의해 액세스가능한 구조화된 데이터베이스를 정의하고, 상기 셋업 동작들은 동적으로 생성된 연산들이 생성될 상기 요청에 적어도 부분적으로 기초하며, 상기 수행하는 액트는,
    상기 데이터 저장소의 제한된 부분 및 상기 데이터 저장소의 비제한
    부분을 확립하기 위해 상기 데이터 저장소의 일부분에 대한 사용권한
    을 설정하고;
    상기 데이터 저장소의 제한된 부분의 일부에의 액세스를 로킹하도록
    모듈을 활성화하고;
    상기 하나 이상의 동적으로 생성되는 연산들에 의해 액세스되지 않아
    야 하는 상기 데이터 저장소의 부분에의 액세스를 로킹하는 것 - 상기
    데이터 저장소의 부분은 상기 비제한 부분에 포함되며, 상기 데이터
    저장소의 부분에의 액세스를 로킹하는 것은 상기 데이터 저장소의 비
    제한 부분 중 로킹된 부분의 데이터에 대해 하나 이상의 업데이트 트
    랜잭션을 시작하되, 상기 하나 이상의 동적으로 생성되는 연산들이 수
    행되기까지는 상기 하나 이상의 업데이트 트랜잭션을 완결하지 못하게
    하는 것임 - ;
    상기 동적으로 생성된 연산들이 수행된 후에, 상기 동적으로 생성된 연산들에 의해 예상치 못한 작업이 수행되지 않았음을 검증하는 액트 - 상기 예상치 못한 작업은 상기 데이터 저장소의 비제한 부분에 예상치 못한 변경들을 발생시키는 동적으로 생성되는 연산들, 상기 데이터 저장소의 제한된 부분에의 액세스를 시도하는 동적으로 생성되는 연산들, 또는 상기 데이터 저장소의 비제한 부분에 예상치 못한 변경들을 발생시키고 상기 데이터 저장소의 제한된 부분에의 액세스를 시도하는 동적으로 생성되는 연산들을 포함함 - ,
    상기 동적으로 생성된 연산들에 의해 예상치 못한 작업이 수행되지 않은 경우, 상기 동적으로 생성된 연산들이 상기 구조화된 요청에 대해 올바른(correct) 것으로 판정하는 액트,
    상기 동적으로 생성된 연산들에 의해 임의의 예상치 못한 작업이 수행된 경우, 상기 동적으로 생성된 연산들이 상기 구조화된 요청에 대해 올바르지 않은 것으로 판정하는 액트, 및
    상기 데이터 저장소에서 상기 동적으로 생성되는 연산들이 올바른지 여부에 대한 결과들을 애플리케이션에 반환하는 액트
    를 수행하게 하는 하나 이상의 컴퓨터 판독가능 기억 매체.
  10. 제9항에 있어서,
    상기 데이터 저장소는 복수의 테이블을 갖는 데이터베이스를 포함하고, 상기 데이터 저장소의 상기 비제한 부분은 하나 이상의 상기 복수의 테이블을 포함하고, 상기 데이터 저장소의 일부분은 상기 비제한 부분에서의 상기 복수의 테이블 중 적어도 하나의 테이블의 하나 이상의 행들을 포함하는 하나 이상의 컴퓨터 판독가능 기억 매체.
  11. 제9항에 있어서,
    상기 데이터 저장소의 일부분에의 액세스를 로킹하는 것은, 상기 하나 이상의 연산들을 상기 데이터 저장소의 일부분에 액세스하는 것으로부터 방지하는 것인 하나 이상의 컴퓨터 판독가능 기억 매체.
  12. 제9항에 있어서,
    상기 요청은 상기 데이터 저장소로부터 데이터를 검색하라는 요청을 포함하는 하나 이상의 컴퓨터 판독가능 기억 매체.
  13. 데이터 저장소에서 동적으로 생성된 연산들이 올바른지의 여부를 판정하는 방법으로서 - 상기 데이터 저장소는 구조화된 요청에 의해 액세스가능한 구조화된 데이터베이스를 정의함 - ,
    데이터 저장소에의 액세스를 위한 셋업 동작들을 수행하는 단계 - 상기 셋업 동작들은 동적으로 생성된 연산들이 생성될 상기 요청에 적어도 부분적으로 기초하며, 상기 수행하는 단계는,
    상기 데이터 저장소의 제한된 부분 및 상기 데이터 저장소의 비제한
    부분을 확립하기 위해 상기 데이터 저장소의 일부분에 대한 사용권한
    을 설정하는 단계;
    상기 데이터 저장소의 제한된 부분의 일부에의 액세스를 로킹하도록
    로킹설정 모듈을 활성화하는 단계;
    상기 비제한 부분의 일부에의 액세스를 로킹하는 단계; 및
    상기 비제한 부분에 임의의 예상치 못한 변경이 발생하였는지의 여부
    에 대한 후속 체크를 허용하는 단계
    를 포함함 - 상기 예상치 못한 변경은 수행되는 동적으로 생성된 연산
    에 요구되는 것을 넘어선 변경을 포함함 - ;
    상기 동적으로 생성된 연산들이 수행된 후에, 상기 동적으로 생성된 연산들에 의해 예상치 못한 작업이 수행되지 않았음을 검증하는 단계 - 상기 예상치 못한 작업은 상기 데이터 저장소의 비제한 부분에 예상치 못한 변경들을 발생시키는 동적으로 생성되는 연산들, 상기 데이터 저장소의 제한된 부분에의 액세스를 시도하는 동적으로 생성되는 연산들, 또는 상기 데이터 저장소의 비제한 부분에 예상치 못한 변경들을 발생시키고 상기 데이터 저장소의 제한된 부분에의 액세스를 시도하는 동적으로 생성되는 연산들을 포함함 - ,
    상기 동적으로 생성된 연산들에 의해 예상치 못한 작업이 수행되지 않은 경우, 상기 동적으로 생성된 연산들이 상기 요청에 대해 올바른 것으로 판정하는 단계,
    상기 동적으로 생성된 연산들에 의해 임의의 예상치 못한 작업이 수행된 경우, 상기 동적으로 생성된 연산들이 상기 요청에 대해 올바르지 않은 것으로 판정하는 단계, 및
    상기 데이터 저장소에서 상기 동적으로 생성되는 연산들이 올바른지 여부에 대한 결과들을 애플리케이션에 반환하는 단계
    를 포함하며,
    상기 비제한 부분에 임의의 예상치 못한 변경이 발생하였는지의 여부에 대한 후속 체크를 허용하는 단계는,
    상기 동적으로 생성된 연산들이 수행되기 전에, 상기 비제한 부분의 제1 부분에 대한 제1 스냅샷을 캡처하는 단계,
    상기 동적으로 생성된 연산들이 수행된 후에, 상기 비제한 부분의 제1 부분에 대한 제2 스냅샷을 캡처하는 단계,
    상기 제1 스냅샷과 상기 제2 스냅샷을 비교하는 단계,
    상기 제1 스냅샷과 상기 제2 스냅샷이 동일하지 않은 경우, 상기 동적으로 생성된 연산들에 의해 예상치 못한 작업이 수행된 것으로 판정하는 단계, 및
    상기 제1 스냅샷과 상기 제2 스냅샷이 동일한 경우, 상기 동적으로 생성된 연산들에 의해 예상치 못한 작업이 수행되지 않은 것으로 판정하는 단계
    를 포함하는 방법.
  14. 제13항에 있어서,
    상기 비제한 부분의 제1 부분은 상기 요청을 수행하기 위해 변경되지 않아야 하는 상기 비제한 부분의 해당 일부분을 포함하는 방법.
  15. 제13항에 있어서,
    상기 비제한 부분의 제1 부분은 데이터베이스 내에 있는 하나 이상의 테이블의 하나 이상의 행들로부터의 데이터인 방법.
  16. 제13항에 있어서,
    상기 비제한 부분에 임의의 예상치 못한 변경이 발생하였는지의 여부에 대한 후속 체크를 허용하는 단계는,
    상기 데이터 저장소의 상기 비제한 부분에 발생한 임의의 변경에 대한 통지를 상기 데이터 저장소에 의해 송신하도록 요청하는 단계; 및
    상기 요청을 수행하기 위해 발생하지 않아야 하는 상기 비제한 부분에서의 데이터의 임의적 추가, 삭제, 또는 수정이 발생하였는지의 여부를 판정하기 위해, 상기 데이터 저장소로부터 수신한 임의의 통지를 분석하는 단계
    를 포함하는 방법.
  17. 제13항에 있어서,
    상기 비제한 부분의 일부에의 액세스를 로킹하는 것은, 상기 데이터 저장소의 일부분의 데이터에 대해 하나 이상의 업데이트 트랜잭션을 시작하되, 상기 동적으로 생성되는 연산들이 수행되기까지는 상기 하나 이상의 업데이트 트랜잭션을 완결하지 못하게 하는 것을 포함하는 방법.
  18. 제13항에 있어서,
    상기 요청이 상기 데이터 저장소를 수정하라는 요청인 경우에만, 상기 비제한 부분에 임의의 예상치 못한 변경들이 발생하였는지 여부에 대한 후속 체크를 허용하는 단계를 더 포함하는 방법.
  19. 제13항에 있어서,
    상기 요청이 상기 데이터 저장소로부터 데이터를 검색하라는 요청인 경우에만, 상기 비제한 부분의 일부분에의 액세스를 로킹하는 단계를 더 포함하는 방법.
  20. 시스템으로서,
    프로세서; 및
    상기 프로세서에 연결되는 메모리
    를 포함하며,
    상기 메모리는,
    데이터 저장소에서, 구조화된 요청에 기초하여 동적으로 생성되는 하나 이상의 동적으로 생성된 연산들이 수행된 후에, 상기 데이터 저장소의 일부분에 임의의 예상치 못한 변경이 발생하였는지의 여부를 체크하는 스냅샷 모듈 - 상기 데이터 저장소는 상기 구조화된 요청에 의해 액세스가능한 구조화된 데이터베이스를 정의하고, 상기 예상치 못한 변경은 수행된 연산에 요구되는 것을 넘어선 변경을 포함하며, 상기 일부분에 임의의 예상치 못한 변경이 발생하였는지의 여부를 체크하는 스냅샷 모듈은:
    하나 이상의 연산들이 수행되기 전에, 상기 일부분의 제1 부분에 대한
    제1 스냅샷을 캡처하고,
    상기 하나 이상의 연산들이 수행된 후에, 상기 일부분의 제1 부분에
    대한 제2 스냅샷을 캡처하고,
    상기 제1 스냅샷과 상기 제2 스냅샷을 비교하고,
    상기 제1 스냅샷과 상기 제2 스냅샷이 동일하지 않은 경우, 상기 일부
    분에 예상치 못한 변경이 발생한 것으로 판정하고,
    상기 제1 스냅샷과 상기 제2 스냅샷이 동일한 경우, 상기 일부분에 예
    상치 못한 변경이 발생하지 않은 것으로 판정함 - ; 및
    상기 하나 이상의 동적으로 생성된 연산들에 의해 액세스되지 않아야 하는 상기 데이터 저장소의 일부분에의 액세스를 로킹하는 로킹설정 모듈 - 상기 데이터 저장소의 일부분은 상기 데이터 저장소의 부분에 포함됨 -
    을 포함하는 시스템.
  21. 제20항에 있어서,
    상기 데이터 저장소의 일부분에만 액세스를 허용하도록 상기 데이터 저장소에 대한 사용권한을 설정하는 사용권한 모듈을 더 포함하며, 상기 데이터 저장소의 일부분은 상기 하나 이상의 연산들에 의해 액세스되지 않아야 하는 상기 데이터 저장소의 또 다른 일부분을 제외하는 시스템.
  22. 제20항에 있어서,
    상기 스냅샷 모듈은 상기 요청이 상기 데이터 저장소를 수정하라는 요청인 경우에만, 상기 일부분에 임의의 예상치 않은 변경이 발생하였는지의 여부를 체크하는 시스템.
  23. 제20항에 있어서,
    상기 로킹설정 모듈은 상기 요청이 상기 데이터 저장소로부터 데이터를 검색하라는 요청인 경우에만, 상기 데이터 저장소의 일부분에의 액세스를 로킹하는 시스템.
  24. 제20항에 있어서,
    상기 일부분에 임의의 예상치 못한 변경이 발생하였는지의 여부를 체크하는 스냅샷 모듈은,
    상기 데이터 저장소의 일부분에 임의의 변경이 발생한 경우에, 상기 데이터 저장소에 의해 통지를 송신할 것을 요청하고,
    상기 요청을 수행하기 위해 발생하지 않아야 하는 상기 일부분에서의 데이터의 임의적 추가, 삭제, 또는 수정이 발생하였는지의 여부를 판정하기 위해, 상기 데이터 저장소로부터 수신한 임의의 통지를 분석하는 시스템.
  25. 제20항에 있어서,
    상기 하나 이상의 연산들에 의해 액세스되지 않아야 하는 상기 데이터 저장소의 일부분에의 액세스를 로킹하는 로킹설정 모듈은,
    상기 데이터 저장소의 일부분의 데이터에 대해 하나 이상의 업데이트 트랜잭션을 시작하되, 상기 하나 이상의 연산들이 수행되기까지는 상기 하나 이상의 업데이트 트랜잭션을 완결하지 못하게 하는 시스템.
  26. 시스템으로서,
    프로세서;
    상기 프로세서에 연결되는 메모리;
    데이터 저장소에의 액세스를 위한 셋업 동작들을 수행하는 수단 - 상기 데이터 저장소는 구조화된 요청에 의해 액세스가능한 구조화된 데이터베이스를 정의하고, 상기 셋업 동작들은 동적으로 생성된 연산들이 생성될 상기 요청에 적어도 부분적으로 기초하며, 상기 수행하는 수단은,
    상기 데이터 저장소의 제한된 부분 및 상기 데이터 저장소의 비제한
    부분을 확립하기 위해 상기 데이터 저장소의 부분들에 대한 사용권한
    을 설정하는 수단;
    상기 데이터 저장소의 제한된 부분의 일부에의 액세스를 로킹하는 수
    단;
    상기 비제한 부분의 일부에의 액세스를 로킹하는 수단 또는 상기 비제
    한 부분에 임의의 예상치 못한 변경이 발생하였는지의 여부에 대한 후
    속 체크를 허용하는 수단 - 상기 예상치 못한 변경은 수행되는 연산에
    요구되는 것을 넘어선 변경을 포함함 -
    을 포함함 - ,
    상기 동적으로 생성된 연산들이 수행된 후에, 상기 동적으로 생성된 연산들에 의해 예상치 못한 작업이 수행되지 않았음을 검증하는 수단 - 상기 예상치 못한 작업은 상기 데이터 저장소의 비제한 부분에 예상치 못한 변경들을 발생시키는 동적으로 생성되는 연산들, 상기 데이터 저장소의 제한된 부분에의 액세스를 시도하는 동적으로 생성되는 연산들, 또는 상기 데이터 저장소의 비제한 부분에 예상치 못한 변경들을 발생시키고 상기 데이터 저장소의 제한된 부분에의 액세스를 시도하는 동적으로 생성되는 연산들을 포함함 - ,
    상기 동적으로 생성된 연산들에 의해 임의의 예상치 못한 작업이 수행되지 않은 경우, 상기 동적으로 생성된 연산들이 상기 요청에 대해 올바른 것으로 판정하는 수단,
    상기 동적으로 생성된 연산들에 의해 임의의 예상치 못한 작업이 수행된 경우, 상기 동적으로 생성된 연산들이 상기 요청에 대해 올바르지 않은 것으로 판정하는 수단, 및
    상기 데이터 저장소에서 상기 동적으로 생성되는 연산들이 올바른지 여부에 대한 결과들을 애플리케이션에 반환하는 수단
    을 포함하며,
    상기 비제한 부분의 일부에의 액세스를 로킹하는 수단은, 상기 데이터 저장소의 비제한 부분의 로킹된 부분의 데이터에 대해 하나 이상의 업데이트 트랜잭션을 시작하되, 상기 동적으로 생성된 연산들이 수행되기까지는 상기 하나 이상의 업데이트 트랜잭션을 완결하지 못하게 하는 수단을 포함하는 시스템.
  27. 제26항에 있어서,
    상기 비제한 부분에 임의의 예상치 못한 변경이 발생하였는지의 여부에 대한 후속 체크를 허용하는 수단은, 상기 동적으로 생성된 연산들이 수행되기 전에, 상기 비제한 부분의 제1 부분에 대한 제1 스냅샷을 캡처하는 수단을 포함하는 시스템.
  28. 제27항에 있어서
    상기 동적으로 생성된 연산들이 수행된 후에, 상기 비제한 부분의 상기 제1 부분에 대한 제2 스냅샷을 캡처하기 위한 수단,
    상기 제1 스냅샷과 상기 제2 스냅샷을 비교하는 수단,
    상기 제1 스냅샷과 상기 제2 스냅샷이 동일하지 않은 경우, 상기 동적으로 생성된 연산들에 의해 예상치 못한 작업이 수행된 것으로 판정하는 수단, 및
    상기 제1 스냅샷과 상기 제2 스냅샷이 동일한 경우, 상기 동적으로 생성된 연산들에 의해 예상치 못한 작업이 수행되지 않은 것으로 판정하는 수단
    을 더 포함하는 시스템.
  29. 제26항에 있어서,
    상기 비제한 부분에 임의의 예상치 못한 변경이 발생하였는지의 여부에 대한 후속 체크를 허용하는 수단은,
    상기 데이터 저장소의 상기 비제한 부분에 발생한 임의의 변경에 대한 통지를 상기 데이터 저장소에 의해 송신하도록 요청하는 수단, 및
    상기 요청을 수행하기 위해 발생하지 않아야 하는 상기 비제한 부분에서의 데이터의 임의적 추가, 삭제, 또는 수정이 발생하였는지의 여부를 판정하기 위해, 상기 데이터 저장소로부터 수신한 임의의 통지를 분석하는 수단
    을 포함하는 시스템.
  30. 삭제
  31. 삭제
  32. 삭제
  33. 삭제
  34. 삭제
  35. 삭제
  36. 삭제
KR1020050064244A 2004-08-31 2005-07-15 데이터 저장소에서 동적으로 생성된 연산들의 검증 KR101143121B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/931,075 US7457832B2 (en) 2004-08-31 2004-08-31 Verifying dynamically generated operations on a data store
US10/931,075 2004-08-31

Publications (2)

Publication Number Publication Date
KR20060050223A KR20060050223A (ko) 2006-05-19
KR101143121B1 true KR101143121B1 (ko) 2012-05-24

Family

ID=35355001

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020050064244A KR101143121B1 (ko) 2004-08-31 2005-07-15 데이터 저장소에서 동적으로 생성된 연산들의 검증

Country Status (5)

Country Link
US (1) US7457832B2 (ko)
EP (1) EP1669904B1 (ko)
JP (1) JP4890811B2 (ko)
KR (1) KR101143121B1 (ko)
CN (1) CN1744061B (ko)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7299239B1 (en) * 2002-12-02 2007-11-20 Oracle International Corporation Methods for partitioning an object
JP2007264814A (ja) * 2006-03-27 2007-10-11 Fujitsu Ltd レプリケーションデータ作成プログラム、レプリケーションデータ反映プログラムおよびデータベース装置
US8065666B2 (en) * 2006-06-02 2011-11-22 Rockwell Automation Technologies, Inc. Change management methodologies for industrial automation and information systems
GB0624577D0 (en) * 2006-12-08 2007-01-17 Skype Ltd Communication Systems
US7945946B2 (en) * 2007-02-06 2011-05-17 Red Hat, Inc. Attribute level access control
US8356014B2 (en) * 2007-06-15 2013-01-15 Oracle International Corporation Referring to partitions with for (values) clause
US8209294B2 (en) * 2007-06-15 2012-06-26 Oracle International Corporation Dynamic creation of database partitions
US8140493B2 (en) * 2007-06-15 2012-03-20 Oracle International Corporation Changing metadata without invalidating cursors
US8135688B2 (en) * 2007-06-15 2012-03-13 Oracle International Corporation Partition/table allocation on demand
US8676808B2 (en) 2009-07-09 2014-03-18 Dillon Software Services, Llc Data store interface that facilitates distribution of application functionality across a multi-tier client-server architecture
US8856089B1 (en) * 2010-08-27 2014-10-07 Amazon Technologies, Inc. Sub-containment concurrency for hierarchical data containers
US8688666B1 (en) 2010-08-27 2014-04-01 Amazon Technologies, Inc. Multi-blob consistency for atomic data transactions
US8510344B1 (en) 2010-08-27 2013-08-13 Amazon Technologies, Inc. Optimistically consistent arbitrary data blob transactions
US8402061B1 (en) 2010-08-27 2013-03-19 Amazon Technologies, Inc. Tiered middleware framework for data storage
US8510304B1 (en) 2010-08-27 2013-08-13 Amazon Technologies, Inc. Transactionally consistent indexing for data blobs
US8621161B1 (en) 2010-09-23 2013-12-31 Amazon Technologies, Inc. Moving data between data stores
US20120209823A1 (en) * 2011-02-14 2012-08-16 Nokia Corporation Method and system for managing database access contention
US8700567B2 (en) * 2011-02-28 2014-04-15 Hitachi, Ltd. Information apparatus
US10409835B2 (en) * 2014-11-28 2019-09-10 Microsoft Technology Licensing, Llc Efficient data manipulation support
CN107291710B (zh) * 2016-03-30 2020-07-03 杭州海康威视数字技术股份有限公司 一种用于分布式数据库系统的更新数据的方法及装置
KR101697301B1 (ko) * 2016-08-29 2017-01-17 주식회사 넷앤드 Dbms에 대한 보안을 강화하는 방법 및 시스템
CN110362534B (zh) * 2019-07-22 2023-05-12 深信服科技股份有限公司 一种快照验证方法、系统及电子设备和存储介质
US11860835B1 (en) * 2020-06-29 2024-01-02 Amazon Technologies, Inc. Efficient drop column requests in a non-relational data store

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5987557A (en) 1997-06-19 1999-11-16 Sun Microsystems, Inc. Method and apparatus for implementing hardware protection domains in a system with no memory management unit (MMU)
WO2002065285A1 (en) 2001-02-14 2002-08-22 Invicta Networks, Inc. Systems and methods for creating a code inspection system
WO2002073432A1 (en) 2001-03-13 2002-09-19 Koninklijke Philips Electronics N.V. Automatic data update
US20030188184A1 (en) 2002-03-27 2003-10-02 Strongin Geoffrey S. Method and apparatus for improved security in a data processor

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5404499A (en) * 1990-01-24 1995-04-04 Logical Services Incorporated Semi-automatic program execution error detection
JPH06342396A (ja) * 1990-07-02 1994-12-13 Internatl Business Mach Corp <Ibm> 共有データのアクセスを直列化する方法及び装置
US5408642A (en) * 1991-05-24 1995-04-18 Symantec Corporation Method for recovery of a computer program infected by a computer virus
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
JPH07191888A (ja) 1991-12-31 1995-07-28 Internatl Business Mach Corp <Ibm> データベース・マネージャにアクセスするデータベース・アクセス要求の処理方法及びシステム
US5440723A (en) * 1993-01-19 1995-08-08 International Business Machines Corporation Automatic immune system for computers and computer networks
US5440735A (en) * 1993-10-08 1995-08-08 International Business Machines Corporation Simplified relational data base snapshot copying
US5537540A (en) * 1994-09-30 1996-07-16 Compaq Computer Corporation Transparent, secure computer virus detection method and apparatus
US5668999A (en) * 1994-12-20 1997-09-16 Sun Microsystems, Inc. System and method for pre-verification of stack usage in bytecode program loops
US5717911A (en) * 1995-01-23 1998-02-10 Tandem Computers, Inc. Relational database system and method with high availability compliation of SQL programs
US5812828A (en) * 1995-06-01 1998-09-22 Centerline Software, Inc. Function simulation
US5907709A (en) * 1996-02-08 1999-05-25 Inprise Corporation Development system with methods for detecting invalid use and management of resources and memory at runtime
US6721941B1 (en) * 1996-08-27 2004-04-13 Compuware Corporation Collection of timing and coverage data through a debugging interface
US6760903B1 (en) * 1996-08-27 2004-07-06 Compuware Corporation Coordinated application monitoring in a distributed computing environment
US5930795A (en) * 1997-01-21 1999-07-27 International Business Machines Corporation Supporting dynamic tables in SQL query compilers
JP3685651B2 (ja) * 1999-06-04 2005-08-24 沖電気工業株式会社 相互接続装置及びアクティブQoSマッピング方法
US6560774B1 (en) * 1999-09-01 2003-05-06 Microsoft Corporation Verifier to check intermediate language
US7111307B1 (en) * 1999-11-23 2006-09-19 Microsoft Corporation Method and system for monitoring and verifying software drivers using system resources including memory allocation and access
US7032110B1 (en) * 2000-06-30 2006-04-18 Landesk Software Limited PKI-based client/server authentication
US6725240B1 (en) * 2000-08-08 2004-04-20 International Business Machines Corporation Apparatus and method for protecting against data tampering in an audit subsystem
US6981245B1 (en) * 2000-09-14 2005-12-27 Sun Microsystems, Inc. Populating binary compatible resource-constrained devices with content verified using API definitions
US6704745B2 (en) * 2000-12-11 2004-03-09 Microsoft Corporation Transforming data between first organization in a data store and hierarchical organization in a dataset
EP2267626B8 (en) * 2001-03-28 2016-11-30 NDS Limited Digital rights management system and method
US7287227B2 (en) * 2001-06-29 2007-10-23 Ve Enterprises Llc System and method for editing web pages in a client/server architecture
US7035859B2 (en) * 2001-08-08 2006-04-25 International Business Machines Corporation Method and system for intra-table referential integrity for relational database systems
US7194475B2 (en) * 2001-10-30 2007-03-20 International Business Machines Corporation Method, system, and program for performing an impact analysis of program statements in at least one source code file
US7249133B2 (en) * 2002-02-19 2007-07-24 Sun Microsystems, Inc. Method and apparatus for a real time XML reporter
JP2003303125A (ja) * 2002-04-10 2003-10-24 Ricoh Co Ltd データ管理装置、データ管理プログラム及び記録媒体
US7752197B2 (en) * 2002-10-03 2010-07-06 International Business Machines Corporation SQL query construction using durable query components
US20040225459A1 (en) * 2003-02-14 2004-11-11 Advantest Corporation Method and structure to develop a test program for semiconductor integrated circuits
JP4292882B2 (ja) * 2003-03-18 2009-07-08 株式会社日立製作所 複数のスナップショット維持方法及びサーバ装置及びストレージ装置
US7305393B2 (en) * 2003-04-29 2007-12-04 International Business Machines Corporation Mounted filesystem integrity checking and salvage
US7171413B2 (en) * 2003-08-29 2007-01-30 International Business Machines Corporation Two phase intermediate query security using access control
US7457817B2 (en) * 2003-12-12 2008-11-25 Oracle International Corporation Versioning in an integration platform
WO2006089092A2 (en) * 2005-02-16 2006-08-24 Ziyad Dahbour Hierarchal data management

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5987557A (en) 1997-06-19 1999-11-16 Sun Microsystems, Inc. Method and apparatus for implementing hardware protection domains in a system with no memory management unit (MMU)
WO2002065285A1 (en) 2001-02-14 2002-08-22 Invicta Networks, Inc. Systems and methods for creating a code inspection system
WO2002073432A1 (en) 2001-03-13 2002-09-19 Koninklijke Philips Electronics N.V. Automatic data update
US20030188184A1 (en) 2002-03-27 2003-10-02 Strongin Geoffrey S. Method and apparatus for improved security in a data processor

Also Published As

Publication number Publication date
KR20060050223A (ko) 2006-05-19
JP2006072986A (ja) 2006-03-16
EP1669904B1 (en) 2017-09-27
EP1669904A1 (en) 2006-06-14
CN1744061A (zh) 2006-03-08
US7457832B2 (en) 2008-11-25
JP4890811B2 (ja) 2012-03-07
CN1744061B (zh) 2010-10-06
US20060047658A1 (en) 2006-03-02

Similar Documents

Publication Publication Date Title
KR101143121B1 (ko) 데이터 저장소에서 동적으로 생성된 연산들의 검증
US11824970B2 (en) Systems, methods, and apparatuses for implementing user access controls in a metadata driven blockchain operating via distributed ledger technology (DLT) using granular access objects and ALFA/XACML visibility rules
US11178151B2 (en) Decentralized database identity management system
US10102016B2 (en) Dynamic determination of local and remote API calls
US11693840B2 (en) Database storing authenticated skill-based attributes
JP2022533770A (ja) 共有の秘密及び読み取りの合意を用いてメタデータ駆動型ブロックチェーン上で忘れられる権利を実施するシステム又は方法
US7386609B2 (en) Method, system, and program for managing devices in a network
US8655859B2 (en) Concurrency control for extraction, transform, load processes
JP2021525931A (ja) ブロックチェーンのための効率的な検証
JP2021518705A (ja) ブロックチェーン台帳のためのランタイム自己修正
TW202008196A (zh) 基於中心化結算與區塊鏈存證的交易方法及系統
US11720545B2 (en) Optimization of chaincode statements
JP2006072986A5 (ko)
US11327905B2 (en) Intents and locks with intent
US20080066071A1 (en) Capturing effort level by task upon check-in to source control management system
US10943027B2 (en) Determination and visualization of effective mask expressions
CA3088693C (en) Method and system for secure digital documentation of subjects using hash chains
CN108846129B (zh) 存储数据访问方法、装置及存储介质
KR20060116140A (ko) 저장 플랫폼에서의 로킹 및 아이솔레이션을 위한 시스템 및방법
US11734432B2 (en) Detecting second-order security vulnerabilities via modelling information flow through persistent storage
EP3458979B1 (en) Reconciling foreign key references and table security policies
US8635331B2 (en) Distributed workflow framework
US20180107832A1 (en) Table privilege management
US11188228B1 (en) Graphing transaction operations for transaction compliance analysis
Qiu et al. A deep study of the effects and fixes of server-side request races in web applications

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170330

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20180328

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20190328

Year of fee payment: 8