CN111670436B - 数据库系统 - Google Patents

数据库系统 Download PDF

Info

Publication number
CN111670436B
CN111670436B CN201980011015.9A CN201980011015A CN111670436B CN 111670436 B CN111670436 B CN 111670436B CN 201980011015 A CN201980011015 A CN 201980011015A CN 111670436 B CN111670436 B CN 111670436B
Authority
CN
China
Prior art keywords
transaction log
database system
transaction
security counter
database
Prior art date
Legal status (The legal status 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 status listed.)
Active
Application number
CN201980011015.9A
Other languages
English (en)
Other versions
CN111670436A (zh
Inventor
K·瓦斯瓦尼
M·S·d·S·科斯塔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Microsoft Technology Licensing LLC
Original Assignee
Microsoft Technology Licensing LLC
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 Microsoft Technology Licensing LLC filed Critical Microsoft Technology Licensing LLC
Publication of CN111670436A publication Critical patent/CN111670436A/zh
Application granted granted Critical
Publication of CN111670436B publication Critical patent/CN111670436B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/21Design, administration or maintenance of databases
    • 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/53Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by executing in a restricted environment, e.g. sandbox or secure virtual machine
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2228Indexing structures
    • G06F16/2272Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/23Updating
    • G06F16/2358Change logging, detection, and notification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • 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
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • 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
    • G06F21/6218Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database
    • G06F21/6227Protecting access to data via a platform, e.g. using keys or access control rules to a system of files or objects, e.g. local or distributed file system or database where protection concerns the structure of data, e.g. records, types, queries
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/466Transaction processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45587Isolation or security of virtual machine instances

Abstract

在各种示例中,存在一种数据库系统,该数据库系统包括操作系统、查询引擎、事务管理器和实现数据库管理功能的组件。查询引擎和事务管理器被配置为与操作系统和实现数据库管理功能的组件分开地在主计算机系统的一个或多个存储器飞地内被执行。

Description

数据库系统
技术领域
本公开的各实施例总体上涉及数据库系统。
背景技术
该技术总体上涉及数据库系统,并且更具体地涉及用于保护存储在数据库系统中的数据的机密性以及在数据库系统内执行的查询的完整性的数据库系统。
数据库管理员通常具有重要的特权以控制和/或监测其上运行有数据库系统的主计算机系统。这是允许数据库管理员对数据库系统内的数据库执行管理任务(或功能)所必需的。其他用户可能还具有对数据库系统和/或主计算机系统的显著特权,这可以使他们可以访问数据库内的数据或者操纵对数据库执行的查询,从而影响提供给数据库或从数据库接收的数据的完整性。通过利用系统软件、操作系统或管理程序中的错误,某些未授权第三方(通常称为黑客)也可能获取数据库系统和/或主计算机系统的显著特权。
数据库系统中的一些或所有数据库内的数据可以被认为是机密的,并且仅应当由该数据库的授权用户访问,该用户可能不包括数据库管理员或者对数据库系统和/或主计算机系统具有显著特权的其他授权用户(不必说,未授权用户也是如此)。例如,人力资源(HR)数据库可能包含各种个人数据项,诸如出生日期或薪水,这些数据项被认为是机密的并且只能由授权用户(诸如HR部门的成员)访问。然而,鉴于他们具有对数据库系统和/或主计算机系统的显著特权,因此维持来自其他这样的用户的数据的机密性是具有挑战性的。这样的用户例如可以从持久性的磁盘上存储装置访问数据。即使在使用语义安全加密来保护磁盘上存储装置中的静态数据的情况下,这样的数据在操作时仍燃可能受到这样的用户的监听,因为这需要在存储器中对数据进行解密。
另外,可以认为数据库系统中的一些或所有数据库内的数据的准确性特别重要。例如,关键业务决策可能基于数据库内存储的数据,因此该数据中的错误可能会对业务产生重大影响。但是,鉴于它们具有对数据库系统和/或主计算机系统的显著特权,维持从其他这样的用户存储在数据库中和从数据库中检索的数据的完整性是具有挑战性的。即使可以确保单个数据项(或数据)的机密性和完整性,这些用户仍然可以通过改变响应于对数据库的查询而提供的结果来影响数据库的完整性。例如,这样的用户可能试图篡改查询本身以改变执行查询的方式以跳过某些数据项,从而导致不准确的结果。
在云计算环境中,用户可以利用远程数据库系统来存储和处理他们的数据。数据库系统的用户可能不知道远程数据库系统的物理位置。此外,用户可能不直到或不信任可以访问远程数据库系统的其他用户,包括例如运行云计算环境的第三方的数据库管理员。用户还可能担心未授权用户在远程数据库系统上获取特权。如果用户不能自信地确定他们存储在远程数据库系统中的数据(关于数据的机密性和完整性)不受其他这样的用户的威胁,则可能会劝阻用户不要使用云计算环境来存储和//或处理他们的数据。
可信执行环境(TEE)是处理器的安全区域,其保证了在安全区域内的代码和数据在机密性和完整性方面得到保护。提供TEE的一种技术是使用存储器飞地(enclave)。例如,可以使用虚拟安全模式(VSM)创建飞地。替代地,/>处理器可以包括允许创建安全飞地的软件保护扩展(SGX)指令。但是,可以使用其他创建安全区的机制,诸如安全加密虚拟化(SEV)。用于特定进程的代码和数据可以在飞地内存储和/或处理。飞地内的数据和处理被保护不受计算机系统内可能正在执行的其他进程的威胁,从而有助于确保其机密性和完整性。飞地通常提供飞地报价机制,该机制使得用户能够验证某个进程实际上是否正在有效飞地中操作以及飞地(例如,飞地内的实际进程)的状态。
以下描述的实施例不限于解决已经知数据库系统的任何或所有缺点的实现。
发明内容
下面呈现本公开的简化概述,以便向读者提供基本理解。该概述既不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于限制所要求保护的主题的范围。其唯一目的是以简化的形式呈现本文中公开的概念的选择,作为稍后呈现的更详细描述的序言。
在各种示例中,存在一种数据库系统,该数据库系统包括操作系统、查询引擎、事务管理器和实现数据库管理功能的组件。查询引擎和事务管理器被配置为与操作系统和实现数据库管理功能的组件分开地在主计算机系统的一个或多个存储器飞地内被执行。
通过参考以下结合附图考虑的详细描述,将能够更好地理解很多附带特征,因为它们会变得更好理解。
附图说明
根据结合附图阅读的以下详细描述,将能够更好地理解本描述,在附图中:
图1示出了在其中实现数据库系统的实施例的示例性的基于计算的设备;
图2是可以在图1所示的基于计算的设备上操作的示例性数据库系统的示意图;
图3是示出用户与数据库系统交互的示意图;
图4是用于与数据库系统交互的示例性方法的流程图;
图5示出了可以在图1所示的基于计算的设备上操作的另一示例性数据库;
图6示出了数据库系统的实施例可以与之通信以维持和检索安全计数的示例性的分布式单调计数器服务(MCS);
图7是用于将事务日志条目写入事务日志中的示例性方法的流程图;
图8是示出第一计数、第二计数和第三计数与事务日志内的事务条目之间的示例性关系的示意图;以及
图9是用于使用事务日志来恢复数据库的示例性方法的流程图。在附图中,相同的附图标记用于指示相同的部分。
具体实施方式
以下结合附图提供的详细描述旨在作为对本示例的描述,而非旨在表示构建或利用本示例的唯一形式。该描述阐述了示例的功能以及用于构造和操作示例的操作顺序。然而,可以通过不同的示例来实现相同或等同的功能和序列。
在一个示例中,存在一种数据库系统,该数据库系统包括操作系统、查询引擎、事务管理器以及实现数据库管理功能的组件(130)。查询引擎和事务管理器被配置为与操作系统和实现数据库管理功能的组件分开地在主计算机系统的一个或多个存储器飞地内被执行。
通过在主计算机系统的一个或多个存储器飞地中执行查询引擎和事务管理器,由查询引擎和事务管理器处理的数据对于主计算机系统上运行的其他进程是不可访问的。因此,可以保护由查询引擎和事务管理器处理的数据的机密性和完整性。通过将整个查询引擎放置在存储器飞地内部,查询引擎用于处理查询的查询计划也受到保护以免受存储器飞地外部的主计算机系统上运行的其他进程的侵害。这阻止了主计算机系统上的其他进程能够改变查询计划并且从而确保了由查询引擎执行的查询的完整性。同时,由于操作系统和实现数据库管理功能的组件是与查询引擎和事务管理器分开地执行的(即,在查询引擎和事务管理器正在其中执行的飞地外部),因此管理用户能够执行数据库系统上的管理任务,而不需要能够访问由查询引擎处理的数据或以其他方式篡改由查询引擎执行的操作。类似地,通过利用操作系统中的错误(或在飞地外部处理的数据库系统的其他组件)来获取对系统的访问的任何未授权用户将无法访问或篡改由数据库系统的查询引擎和事务管理器执行的处理。
该方法相对于可以被用于使用飞地来保护数据的其他方法具有优势。例如,另一种方法可能是尝试将查询引擎的一小部分(诸如仅执行引擎(或表达式评估器))放入飞地中。然后,实际上构建查询的查询引擎的其余部分将在飞地外部执行。但是,该方法不会为查询提供机密性,也不会为结果提供完整性,因为解析和计划查询的执行的查询引擎的部分仍然位于飞地外部,因此它们对在主计算机系统上运行的其他进程不可见并且可能由在主计算机系统上运行的其他进程可控制。另一种方法是尝试将整个数据库系统放置在飞地内部。但是,这种方法导致了庞大的可信计算基础并且增加了性能开销。另外,该方法将无法提供数据库管理员的保护,因为数据库管理组件将可以访问由查询引擎和事务管理器使用的存储器,并且因此将能够监测并且可能篡改其操作。
在另一示例中,存在一种用于与数据库系统进行交互的计算机实现的方法。该方法创建与数据库系统上的存储器飞地的安全连接。该方法向存储器飞地请求飞地报价,并且使用飞地报价验证在存储器飞地中运行的进程包括数据库系统的查询引擎和事务管理器,但是不包括数据库系统的操作系统或实现数据库系统的数据库管理功能的组件。该方法经由安全连接向数据库系统发送执行查询的请求。
通过使用飞地报价来验证在存储器飞地中运行的进程包括数据库系统的查询引擎和事务管理器,但是不包括数据库管理组件的操作系统,用户可以知道它们向数据库系统发送的任何查询将由查询引擎进行处理以使得它们免受在主计算机系统上运行的其他进程的攻击。
诸如由Hekaton引擎提供的存储器中数据库将其数据存储在易失性存储器中的表和索引中。尽管这可以提供很多优点(诸如改进的性能),但是存储器中数据库的一个缺点是,当它们在其上运行的计算机系统重启时(诸如由于电源或组件故障或者作为计算机系统的日常维护的一部分),存储在易失性存储器中的数据将会丢失。因此,这样的存储器中数据库通常利用事务日志来允许在主计算机系统重启之后通过重放记录在事务日志的日志条目中的事务来恢复数据库的当前状态。除存储器中数据库以外的其他数据库也可以利用事务日志来恢复数据库的状态,以防数据库的主存储丢失或损坏(即使通常情况下在主计算机系统的正常重启时不会发生这种情况)。
假定从事务日志(或仅是日志)中恢复之后的数据库状态由从事务日志读取的事务日志条目确定,则希望提供一种机制,通过该机制,可以确保事务日志的完整性。否则,有权访问(被授权或未被授权)事务日志的用户可以有意或无意地改变日志,从而在从日志中恢复数据库系统时改变数据库系统的状态。尽管存在用于验证各个日志条目的完整性的机制,诸如通过在日志文件中包括日志条目内容的签名哈希,但是也希望能够确保日志中的日志条目的集合本身不变。
Merkle树提供了一种用于确保日志条目的集合的完整性的可能的解决方案。Merkle树是一种树数据结构,其中每个叶节点都用数据块的哈希标记并且每个非叶节点都用其子节点的标签的密码哈希标记。但是,为高并发和写入密集型工作负载维持Merkle树,这样的数据库事务日志可能在计算上是密集的。这是因为,当向Merkle树的叶节点写入时,每个父节点也需要更新。因此,当使用Merkle树来维持事务日志时,需要一个进程来将日志条目附加到事务日志以获取对叶节点及其每个父节点的锁定。由于数据库事务日志是仅附加工作负载并且可以利用大量不同的事务处理线程来同时处理事务,因此基于Merkle树的事务日志可能会引起很大的争用并且最终成为数据库系统中的瓶颈。这是因为,每个事务处理线程都将尝试向Merkle树中的大致相同的节点集写入并且因此最终将彼此竞争(并且必须等待)以获取将日志条目附加到事务日志所需要的锁定。
在另一示例中,存在一种数据库系统,该数据库系统被配置为使得该数据库系统的至少一部分被配置为在可信执行环境内执行,该数据库系统包括:被配置为将事务日志条目写入被存储在可信执行环境外部的事务日志中的事务记录器,每个事务日志条目表示由数据库系统处理的事务;被配置为维持已经提交给数据库的事务的已经写入事务日志中的事务日志条目的数目的表示的第一安全计数器;以及被配置为至少部分地基于从事务日志中检索到的事务日志条目和第一安全计数器的当前值来恢复数据库系统的恢复模块。
在另一示例中,提供了一种用于将事务日志条目写入数据库系统的事务日志中的计算机实现的方法,其中数据库系统的至少一部分被配置为在可信执行环境内执行并且事务日志存储在可信执行环境外部,该方法包括:维持第一安全计数,该第一安全计数表示已经提交给数据库的事务的已经写入事务日志中的事务日志条目的数目;以及将事务日志条目写入事务日志中。
在另一示例中,提供了一种用于恢复数据库系统的计算机实现的方法,其中数据库系统的至少一部分被配置为在可信执行环境内执行,该方法包括:接收从存储在可信执行环境外部的事务日志中检索到的一个或多个事务日志条目,该一个或多个事务日志条目中的每个表示由数据库系统处理的事务;以及接收由数据库系统维持的第一安全计数的当前值,该第一安全计数表示已经提交给数据库的事务的已经写入事务日志中的事务日志条目的数目;通过确定已经接收到正确数目的事务日志条目,至少部分地基于第一安全计数的当前值来验证事务日志的完整性;以及响应于验证所接收的事务日志条目的完整性,使用所接收的事务日志条目和第一安全计数的当前值来恢复数据库。
通过使用安全计数器来跟踪已经提交给数据库的事务的已经写入事务日志中的事务日志条目的数目,数据库系统能够验证其从事务日志接收的数目的事务日志条目包含足够数目的事务日志条目。由于安全计数器与事务日志是分开的,因此计数器和事务日志都需要以一种方式进行改变以使得它们仍然彼此对应以便数据库系统至少无法验证接收到正确数目的事务日志条目。
尽管本文中将本示例描述和示出为在计算机系统中实现,但是所描述的系统被提供仅作为示例而不是限制。如本领域技术人员将理解的,本示例适合于各种不同类型的计算机系统中的应用。
图1是示出示例性的基于计算的设备100的各种组件的示意图,该基于计算的设备100被实现为任何形式的计算和/或电子设备并且在一些示例中数据库系统的实施例在该基于计算的设备100中实现。
基于计算的设备100包括一个或多个处理器102,该处理器102是微处理器、控制器、或任何其他合适类型的处理器,该处理器102用于根据数据库系统或用于与数据库系统进行交互的方法的实施例来处理计算机可执行指令以控制设备的操作。在一些示例中,例如在使用片上系统架构的情况下,处理器102包括以硬件(而不是软件或固件)实现数据库系统的一部分的一个或多个固定功能块(也称为加速器)。在基于计算的设备处设置有包括操作系统的平台软件或任何其他合适的平台软件,以使得数据库系统或与数据库系统交互的方法能够在该设备上执行。
计算机可执行指令使用由基于计算的设备100可访问的任何计算机可读介质来提供。计算机可读介质包括例如计算机存储介质,诸如存储器104和通信介质。诸如存储器104等计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块等信息的任何方法或技术实现的易失性和非易失性的可移动和不可移动介质。计算机存储介质包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、可擦除可编程只读存储器(EPROM)、电子可擦除可编程只读存储器(EEPROM)、闪存或其他存储技术、光盘只读存储器(CD-ROM)、数字多功能磁盘(DVD)或其他光学存储设备、磁带盒、磁带、磁盘存储设备或其他磁性存储设备、或者用于存储供计算设备访问的信息的任何其他非传输介质。相反,通信介质在诸如载波或其他传输机制等调制数据信号中体现计算机可读指令、数据结构、程序模块等。如本文中定义的,计算机存储介质不包括通信介质。因此,计算机存储介质本身不应当被解释为传播信号。尽管计算机存储介质(存储器104)被示出为在基于计算的设备100内,但是应当理解,在一些示例中,该存储装置是远程分布或定位的,并且可以经由网络或其他通信链路(例如,使用通信接口106)来访问。
处理器102支持在基于计算的设备100的存储器104内创建存储器飞地108。作为示例,可以使用虚拟安全模式(VSM)创建飞地。替代地,/>处理器可以包括允许创建安全飞地的软件保护扩展(SGX)指令。但是,可以使用其他创建飞地的机制,诸如安全加密虚拟化(SEV)
基于计算的设备100还包括输入/输出控制器110,该输入/输出控制器110被布置为将显示信息输出到显示设备112,该显示设备112可以与基于计算的设备100分开或成一体。显示信息可以提供图形用户界面。输入/输出控制器110还被布置为从一个或多个设备接收和处理输入,诸如用户输入设备114(例如,鼠标、键盘、相机、麦克风或其他传感器)。当然,在一些示例中,基于计算的设备可以在没有永久连接的显示设备112或用户输入设备114的情况下作为无头服务器进行操作。在这种配置中,基于计算的设备100可以依赖于通信接口106来进行所有输入/输出。
替代地或另外地,本文中描述的功能至少部分由一个或多个硬件逻辑组件执行。例如而非限制,可选地使用的说明性类型的硬件逻辑组件包括现场可编程门阵列(FPGA)、专用集成电路(ASIC)、专用标准产品(ASSP)、系统级芯片系统(SOC)、复杂可编程逻辑器件(CPLD)、图形处理单元(GPU)。
图2是可以在计算设备(或主计算机系统)100上操作的示例性数据库系统200的示意图。数据库系统200包括操作系统210、查询引擎220、事务管理器230和实现数据库管理功能的组件(以其他方式称为数据库管理组件240)。除了这些组件,图2所示的示例性数据库系统200还包括存储器中存储引擎250、事务日志260、第二查询引擎270、第二事务管理器275、第二存储引擎280和访问控制模块290。然而,应当理解(如下所述),这些附加组件是可选的,并且在其他示例中可以省略或替换为替代组件。数据库系统200被配置为使得查询引擎220和事务管理器230在主计算机系统100上的存储器飞地108内部执行,而操作系统210和数据库管理组件240在存储器飞地108外部执行。通过在存储器飞地108外部执行这些组件,提供这些组件的进程将无法查看或干扰属于事务管理器230或查询引擎的任何存储器中数据。尽管在图2所示的示例数据库系统200中,查询引擎220和事务管理器230被配置为在存储器飞地中执行,但是在其他示例中,查询引擎220和事务管理器230被配置为在单独的存储器飞地中执行,其中在存储器飞地之间建立有安全通信通道以保护在单独的飞地中的组件之间传送的数据。
操作系统210包括使得数据库系统200能够与其在其上进行操作的主计算机系统100的各种硬件进行交互的各种功能。例如,操作系统可以提供使得数据库系统200能够接口并且将数据存储在非易失性储存器中的功能。在数据库系统200的各种示例中,可以使用任何已经知的操作系统210,包括例如Microsoft或Linux。
查询引擎220包括对数据库系统200执行查询所需要的所有组件。
在一个示例中,查询引擎220包括查询解析器222、查询优化器(或计划器)224和执行引擎226。查询解析器222允许查询引擎接收以诸如SQL等高级查询语言表达的要对数据库系统200执行的查询。查询解析器222分析以高级查询语言表达的查询以确定其含义。查询优化器(或计划器)224使用查询解析器222的输出来确定应当如何对数据库系统200执行查询。也就是说,查询优化器224确定应当对数据库系统200执行以便执行查询的一组动作。从查询优化器输出的该组动作可以称为查询计划或编译查询,因为它们包含对特定数据库系统200执行特定查询所需要的所有细节(该特定细节没有被包括在由查询解析器222接收的以高级语言表达的查询中表达的查询中)。执行引擎226使用从查询优化器224输出的该组动作来实际执行查询并且提供任何结果。通过将查询解析器222和查询优化器224包括在查询引擎220中,数据库系统200能够处理以高级查询语言表达的任何任意查询。此外,由于查询引擎200在存储器飞地内部操作,因此一旦主计算机系统100上的任何其他进程在飞地108中被接收到,则该进程将不能监测或篡改由查询引擎220从查询生成的查询计划。在一些示例中,可以对所接收的查询进行加密。这有助于确保在将其发送到查询引擎220时确保其机密性和完整性。在这些示例中,查询引擎基于其加密来对查询进行认证。
在另一示例中,查询引擎220包括执行引擎226和一个或多个预编译查询228。预编译查询228包含应当对数据库系统200执行以便执行查询的一组动作。因此,预编译查询228提供对数据库系统200执行特定查询所需要的所有细节,并且等同于先前示例中的查询优化器224的输出。然而,预编译查询可以由作为数据库系统200上的数据库的创建者的用户来编译,并且在数据库的创建期间被提供给数据库系统200的主计算机系统100以包括在查询引擎220中。这表示,数据库的创建者可以在不同的计算机系统(其可能更受该用户信任)上使用查询解析器和优化器以在创建数据库时编译要包括在查询引擎220中的查询。当用户希望对数据库系统200执行查询时,用户可以向查询引擎220指示应当执行哪个预编译查询228。然后,查询引擎220的执行引擎226使用由该预编译查询228详述的一组动作来对数据库系统200执行查询。
尽管图2所示的示例性数据库系统200包括查询解析器222、查询优化器224、执行引擎226和预编译查询228,但是应当理解,查询引擎不需要包含所有这些组件。实际上,如先前示例中所述,在不需要处理任意查询的能力的情况下(或在希望将用户限制为由预编译查询228表示的预定的一组查询的情况下),预编译查询228可以替换查询解析器222和查询优化器224。在数据库系统200包括所有这些组件的情况下(如图2所示),访问控制模块290可以对谁能够执行使用高级查询语言表达的任意查询以及谁能够执行每个预编译查询施加不同的限制。
事务管理器230管理数据库系统200对事务的处理。事务是将要原子地执行的用于将数据存储在数据库中的一组操作。也就是说,将集合中的所有操作都应用于数据库,或者都不应用。事务管理器230管理应用于数据库的每个事务的操作以确保将每个事务中的所有操作都应用于数据库,或者在无法将一个或多个操作应用于数据库的情况下回滚已经应用于数据库的任何操作。一旦事务中的操作已经被应用于数据库,则事务管理器230向请求将事务应用于数据库的实体提供关于事务已经成功完成(或提交给数据库)的确认。
实现数据库管理功能的组件240提供数据库管理员维持和/或优化数据库系统200的操作所需要的功能。例如,这些组件240可以包括允许管理员获取数据库系统的备份的组件,对主计算机系统100(或服务器)的问题进行故障排除,并且配置存储选项(例如,为特定数据库分配不同数量的易失性和/或非易失性储存器)。这些管理组件240不需要访问数据库中的实际数据。也就是说,它们可以对数据库中的数据的加密形式进行操作,并且不需要为了执行其功能而解密该数据的能力。
存储器中存储引擎250将数据存储在存储器中表中。存储器中存储引擎250还以存储器中方式存储一个或多个索引的数据。由于存储器中存储引擎250在存储器飞地108内执行,因此存储器中表和索引也存储在存储器飞地108内。这表示,存储器中存储引擎250的表和索引受到保护以不受诸如操作系统210或数据库管理组件等在存储器飞地108外部运行的进程的影响。因此,存储器中存储引擎250的使用提供了一种合适的方式以确保数据库系统200中的数据的机密性和完整性免受在主计算机系统上运行的其他进程的影响,同时使得查询引擎220和事务管理器230能够访问不受阻碍的数据。
应当理解,在存储器飞地108内执行的存储器中存储引擎250的使用是可选的,并且可以改为使用存储数据的其他方式。例如,在数据库系统200的一些其他示例中,使用将数据直接存储在非易失性储存器中的存储引擎。存储器飞地108通常不支持对非易失性储存器的直接访问(从存储器飞地108的角度来看,其因此可以称为外部存储器)。这表示,由这样的存储引擎存储的数据将离开存储器飞地108,并且不会被保护以免受对主计算机系统100执行的其他进程的影响。为了保护在存储器飞地108外部的数据,可以在离开存储器飞地108之前对其进行加密,并且然后以加密形式进行对其检索,并且一旦其返回存储器飞地108的保护范围内部则解密。换言之,在存储器飞地108内操作的查询引擎220和事务管理器230可以与这样的存储引擎进行交互以提供要存储在外部存储装置中的数据项的加密表示并且从外部存储装置中检索各个数据项的加密表示,这些数据项在存储器飞地108内部被解密以便对数据执行查询。与将数据以存储器中方式被存储在飞地内相比,这种附加的数据加密和解密会产生附加的开销。
在存储器飞地250内存在存储器中存储引擎250的情况下,当主计算机系统100重启时,存储在存储器中存储引擎250中的数据将丢失。例如,这样的重启可能是由主计算机系统100的电源故障、主计算机系统100的任何硬件组件的故障、或作为主计算机系统100日常维护的一部分而引起的。为了在这样的重启之间持久化数据,示例性数据库系统中示出的存储器中存储引擎250通过将表示事务的事务日志条目写入被存储在存储器飞地108外部的非易失性存储器中的事务日志(或只是日志)260中来持久化对一个或多个存储器中表和/或索引执行的事务。特别地,当事务管理器230完成与存储器中存储引擎的事务时,它可以将该事务的日志条目写入事务日志260中。当数据库系统200被重启时(也就是说,当正在其上执行数据库系统200的主计算机系统100被重启时),可以通过重放由事务日志260中的事务日志条目表示的事务来恢复存储器中存储引擎250的存储器中表和/或索引的状态。
由于事务日志260存储来自存储器中存储引擎250的所有信息(其被认为是敏感信息或机密信息),因此期望保护存储在事务日志260中的数据的机密性。在一些示例中,这是通过使用安全存储的密钥对事务日志条目进行加密来实现的。另外,由于事务日志260用于在数据库系统200重启之后恢复存储器中存储250的存储器中表和索引的状态,因此期望保护从事务日志读取的数据的完整性(即,防止恶意或意外地从事务日志中删除事务,从而在数据库系统重启之后恢复数据库时改变数据库的状态)。
下面参考图5-9进一步描述被配置为确保从事务日志读取的数据的完整性的数据库系统200的示例。
第二查询引擎270、第二事务管理器275和第二存储引擎280存储并且查询被认为是非敏感(即,非机密、非关键)的数据。因此,第二查询引擎270、第二事务管理器275、第二存储引擎280存储在存储器飞地108外部,并且无法访问在存储器飞地108内部操作的查询引擎220、事务管理器230和存储器中存储引擎250的数据。以这种方式,数据库系统200可以被配置为使用在存储器飞地108内部操作的组件来处理敏感数据并且使用在存储器飞地108外部操作的第二存储引擎280、事务管理器275和查询引擎270来处理非敏感数据。当然,由于查询引擎的分开,不可能对敏感数据和非敏感数据进行单个查询。在其他示例中,数据库系统200可能仅涉及敏感数据的处理,并且因此第二查询引擎270、第二事务管理器275和第二存储引擎280可以被省略。
访问控制模块290的作用是限制哪些查询可以由哪些用户执行。下面将结合图3和4进一步描述访问控制模块290。
应当理解,尽管上面已经描述的数据库系统200的各种组件被示出和讨论为分开的组件,但是在一些示例中,某些组件可以通过单个进程来实现,而在其他示例中,某些组件可以通过多个进程来实现。
应当进一步理解,尽管在以上描述中,各种组件被讨论为与存储器飞地108分开或在存储器飞地108外部,但是并不一定遵循这些组件必须在任何飞地外部实现。在一些示例中,一些组件可以与处理查询引擎220和事务管理器230的存储器飞地108分开地在它们自己的(或共享的)飞地中实现。
图3是示出用户与数据库系统交互的示意图。下面将结合图4更详细地讨论该图,图4,是用于与数据库系统200交互的方法400的流程图。
在操作410,方法400确定需要针对数据库系统200中的敏感数据运行(或执行(perform)或执行(execute))查询。如从前面的描述中应当理解的,敏感数据是针对其的数据的机密性和/或完整性对数据库系统的用户330而言很重要的数据。如果需要针对敏感数据运行查询,则方法400进行到操作415。否则,方法400进行到可选操作445。
在操作415,方法400创建与数据库系统200的存储器飞地108的安全连接390。例如,方法400可以创建与该飞地的TLS连接。一旦建立了安全连接390,则方法400进行到操作420。
在操作420,方法400从存储器飞地108请求飞地报价。该报价使得飞地及其内容能够被远程验证。例如,在处理器102支持使用SGX指令(其用于创建存储器飞地108)的情况下,报价是SGX报价。支持创建存储器飞地的其他技术提供类似的机制以于生成飞地报价以验证任何所创建的飞地及其内容。一旦接收到飞地报价,则方法400进行到可选操作425。在一些示例中,方法400中不包括可选操作425,在这种情况下,方法400进行到操作435。
在可选操作425,方法400从存储器飞地108接收唯一标识符350的表示。
在图2和3所示的示例中,数据库系统200被配置为在创建安全区时生成唯一标识符。这表示,每次启动飞地的实例时(诸如在数据库系统200重启之后)都会创建不同的唯一标识符。在一些示例中,唯一标识符是128位GUID。然而,可以改为使用其他形式的唯一标识符。示例性数据库系统200被配置为将存储器飞地108的该唯一标识符350的表示提供给密钥管理服务360。在一些示例中,唯一标识符350在为飞地的密钥的供应期间作为由密钥管理服务360请求的飞地报价的一部分被提供给密钥管理服务360。为了防止篡改或复制提供给密钥管理服务360的唯一标识符350的表示,可以使用密钥管理服务360的公钥380对其进行加密。密钥管理服务360维持它接收的新的唯一标识符350到其从中接收标识符的存储器飞地108的实例的映射。“新的”唯一标识符350表示密钥管理服务360先前尚未接收到该唯一标识符350。因此,密钥管理服务360将忽略提供密钥管理服务360先前已经接收到的唯一标识符350的数据库系统的任何新的实例。实质上,密钥管理服务360维持先前接收的唯一标识符350的黑名单,并且存储最近接收的(或当前的)新的唯一标识符350。当接收到新的唯一标识符350时,密钥管理服务360将先前存储的最近接收的新到唯一标识符350放置到黑名单上,并且将新的唯一标识符350存储为最近接收的新的唯一标识符350。
数据库系统200还被配置为在与客户端的任何通信中提供唯一标识符的表示。可以使用安全连接390的会话密钥来加密提供给用户330的唯一标识符350的表示。在一些示例中,方法400可以接收唯一标识符350作为在操作420中请求的飞地报价的一部分。在其他示例中,方法400可以诸如在对请求的响应370中与飞地报价分开地接收唯一标识符350。在任何情况下,一旦已经接收到唯一标识符350的表示,则方法400进行到可选操作430。
在可选操作430,方法400使用从存储器飞地108接收的唯一标识符350的表示来验证用户正在与之通信的存储器飞地108是存储器飞地108的最新创建的实例。这通过与密钥管理服务360进行通信以确定由飞地108提供的唯一标识符350是否是数据库系统200的当前唯一标识符350来实现。在一些示例中,在操作430,方法400基于由密钥管理服务360存储的当前唯一标识符350来将在操作425处接收的唯一标识符350提供给密钥管理服务360,该密钥管理服务360提供指示存储器飞地108的实例是否是最新存储器飞地的响应。在其他示例中,在操作430,方法400接收由密钥管理服务360存储的数据库系统200的当前唯一标识符。然后,方法400可以比较在操作425处从存储器飞地108接收的唯一标识符350以确定存储器飞地是否是最新的存储器飞地。
通过将唯一标识符350可选地用于提供给密钥管理服务360并且与用户330进行任何通信的存储器飞地108,可以防止所谓的“分叉”攻击。对数据库系统200的分叉攻击将包括创建存储器飞地108的多个实例,每个实例具有其自己的查询引擎、事务管理器等。通过将来自用户的不同请求定向到存储器飞地108的不同实例,可以操纵数据库系统200的状态。然而,在数据库系统200被配置为提供唯一标识符350的情况下,用户330被使得能够检查他们是否正在与存储器飞地108的最新创建的实例通信。这表示,仅单个实例可以是“活动的”。因为用户330可以拒绝与任何较旧实例进行通信。
在操作435,方法400使用所接收的飞地报价来验证在存储器飞地108中执行的进程包括预期的一组数据库系统组件。也就是说,数据库系统200的用户330在使用数据库系统200之前具有数据库系统200的架构的至少部分知识。特别地,根据本发明的实施例,用户330知道,飞地108应当包含查询引擎220和事务管理器230,这两者均以某种方式操作以保护存储在数据库系统中的数据的机密性和完整性。用户330还知道,飞地108不应当包含操作系统210或数据库管理组件240。通过标准飞地报价机制,用户330能够验证飞地是否包含查询引擎220和事务管理器230以及这些组件是否是将以预期方式操作以保护用户数据的预期组件。用户330还可以使用飞地报价来验证存储器飞地108不包含操作系统210或管理组件240。如果用户可以验证存储器飞地仅包括期望的一组数据库系统组件,则方法400进行到操作440。否则,方法400进行到可选操作445。
在操作440,该方法经由安全连接390向数据库系统200发送执行查询的请求340。在数据库系统200的存储器飞地108中的查询引擎220包括一个或多个预编译查询的示例中,请求340包括供应应当由数据库系统200执行哪个预编译查询的指示。然而,在其他示例中,请求340包括以高级查询语言指定的查询,诸如要由查询引擎220的查询解析器222和查询优化器224解析和编译的SQL。
如前所述,在一些示例中,数据库系统200可以包括在存储器飞地108内操作的访问控制模块290。该访问控制模块290控制哪些执行查询的请求应当由查询引擎220接受以及哪些应当被拒绝。访问控制模块290在飞地108内存储一个或多个公钥310。这些公钥310中的每个属于相关联的公钥私钥对320,该对公钥私钥对320属于被授权访问数据库系统200的用户330。控制模块290使用公钥330来认证由用户向数据库系统接收(或发出)的请求,以确定发出每个请求的用户是否被授权使用要求用户330拥有公钥私钥对320中的私钥的认证方案来访问数据库系统200。这样的认证方案可以基于认证方案的质询响应类型,或者可以简单地涉及用户330使用其私钥对请求分组的哈希进行签名。在任何情况下,访问控制模块都使用所存储的公钥310来确定是否允许根据认证方案来用户访问数据库。
在一些示例中,在查询引擎220包括预编译查询228的情况下,每个预编译查询228可以与与被允许执行该预编译查询228的用户相关联的一组公钥290相关联。在这样的示例中,访问控制模块290还通过使用认证方案确认用户的公钥310与他们尝试执行的预编译查询228相关联(即,用户拥有包括与预编译查询228相关联的一组公钥290中包含的公钥310的公钥私钥对320中的私钥)来检查发出执行特定预编译查询228的请求的用户320是否被授权执行该请求。
由查询引擎220存储的公钥可以在数据库系统200中的数据库创建时被固定。也就是说,访问控制模块290可以不允许在已经创建数据库之后添加附加公钥,使得只有拥有其公钥310在创建数据库时被包括在访问控制模块290中的公钥私钥对中的私钥的用户330可以能够访问数据库。但是,在其他示例中,访问控制模块290允许来自授权用户的添加特定公钥的请求,以允许其他用户对数据库执行查询。类似地,在其他示例中,访问控制模块290允许来自授权用户的从访问控制模块290中删除公钥的请求,从而防止用户进一步执行对应公钥私钥对320所属于的查询。
在一些示例中,公钥私钥对320可以在各组用户之间共享,使得一组中的每个用户具有公钥私钥对320中的私钥,他们可以使用该私钥来授权他们的对数据库执行查询的请求。例如,可以在数据库的创建期间将单个公钥供应给访问控制模块,并且然后供应与一组用户共享的私钥,以允许这些用户访问数据库。然而,在其他示例中,每个用户330可以具有其自己的公钥私钥对320,由此该对320中的私钥被用户330保持为机密。
当然,应当理解,访问控制模块是数据库系统200的可选组件,并且根本不需要存在,或者可以由替代机制提供,诸如例如使用VPN或许可设备的白名单,以防止未授权用户访问存储器飞地108。
在可选操作445,方法400确定是否需要针对数据库系统200中的非敏感数据运行查询。如果是,则方法400进行到可选操作450。否则,方法400进行到可选操作455。应当理解,在一些示例中,数据库系统200可能不支持将非敏感数据存储在存储器飞地108外部。在这种情况下,该步骤可以从方法400中省略,并且方法400简单地进行到可选操作455。
在可选操作450,该方法创建与在数据库系统200上的飞地108外部运行的进程的连接,并且经由该连接发送针对非敏感数据来执行查询的请求。该请求可以由数据库系统200接收,数据库系统200可以利用第二查询引擎270、第二事务管理器275和第二存储管理器280来处理和响应于请求,这对于数据库系统而言是正常的。由于第二查询引擎、事务管理器和存储管理器在存储器飞地外部被执行,因此它们无法访问敏感数据,这需要访问在步骤410、415、420、425、430、435和440中阐述的操作。
在可选操作455,方法400确定是否需要对数据库系统200执行管理功能。如果是,则方法400进行到可选操作460。否则,方法400进行到可选操作470。应当理解,在一些示例中,如操作455和460中阐述的,用于对数据库系统200执行管理功能的方法400可以与在步骤410、415、420、425、430、435和440中阐述的访问敏感数据的方法以隔离的方式分开执行。在这种情况下,该步骤可以从方法400中省略,并且方法400可以简单地进行到可选操作470。
在可选操作460,方法400创建与在飞地108外部运行的进程的连接。在一些示例中,该进程与在操作450中被连接以便发送针对非敏感数据来执行查询的请求的进程相同,该进程充当通往数据库系统200的非敏感(或至少不太敏感)组件的网关。但是,在其他示例中,这是与在操作450中连接的进程不同的进程。方法400经由该连接发送对数据库系统200执行管理功能的请求。
在可选操作470,方法400确定用户330是否希望继续与数据库系统200交互,在这种情况下,方法400重新迭代到操作410,或者方法400确定用户330是否已经完成与数据库系统200的交互,在这种情况下,方法400结束(或终止)。再次,应当理解,在其他示例中,可以省略可选操作470,使得方法400简单地结束。
图5是可以对计算设备(或主计算机系统)100进行操作的另一示例性数据库系统200的示意图。除了以上关于图2-4描述的组件,图5所示的示例性数据库系统200还包括事务记录器510、第一安全计数器520、恢复模块525。另外,图5所示的示例性数据库系统200包括日志截断模块535、第二安全计数器545,第三安全计数器550和第四安全计数器555、以及事务管理器530。但是,应当理解(如下所述),这些附加组件是可选的,并且在其他示例中可以省略或替换为替代组件。数据库系统200被配置为使得数据库系统200的至少一部分被配置为在存储器飞地108内执行(尽管可以改为使用其他形式的可信执行环境)。在图5所示的示例中,数据库系统被配置为使得第一安全计数器、第二安全计数器、第三安全计数器和第四安全计数器以及恢复模块525和事务管理器230在存储器飞地108内部执行。应当理解,在其他示例中,更多或更少数目的组件或不同的组件正在存储器飞地108内部执行。通常,在大多数示例中,如上面关于图2-4所讨论的,在存储器飞地108内部执行的组件允许数据库系统200保证其正在对其进行操作的数据的机密性和/或完整性。在一些示例中,第一安全计数器、第二安全计数器、第三安全计数器和第四安全计数器没有存储在同一存储器飞地中,例如,第一安全计数器、第二安全计数器、第三安全计数器和第四安全计数器中的每个可以在其自己的单独的存储器飞地中执行。
事务记录器510被配置为将事务日志条目565写入被存储在存储器飞地108外部的事务日志260中。因此,事务日志260包含多个事务日志条目565。在一个示例中,由事务记录器510写入的每个新的事务日志条目565被附加到事务日志的末尾。可选地,在诸如图2所示的一些示例中,事务日志条目565包括在事务日志条目565被写入事务日志565中时第三安全计数器和/或第四安全计数器的值的指示。
由于事务日志260在存储器飞地(或可信执行环境)外部,因此就机密性和/或完整性而言,事务日志260不受存储器飞地108的机制的保护。因此,在一些示例中,如果日志的机密性很重要,则可以使用安全存储的加密密钥来对事务日志条目进行加密。加密密钥可以被存储,例如密封在飞地108内。同时,安全计数器520、545、550和555以及存储在每个事务日志条目中的第三计数器值和第四计数器值的指示570和575在各种示例中可以用于提供关于从事务日志560读取的日志条目565的完整性的保证。
在图5所示的示例中,事务记录器510被在飞地108内部执行的事务管理器230指示将条目565写入日志中。
如以上关于图2讨论的,事务管理器230管理数据库系统200对事务的处理。事务是将要原子地执行的用于将数据存储在数据库中的一组操作。也就是说,将集合中的所有操作都应用于数据库,或者都不应用。事务管理器230管理应用于数据库的每个事务的操作以确保将每个事务中的所有操作都应用于数据库,或者在无法将一个或多个操作应用于数据库的情况下回滚已经应用于数据库的任何操作。一旦事务中的操作已经被应用于数据库,则事务管理器230向请求将事务应用于数据库的实体提供关于事务已经作为提交回调过程的一部分而成功地完成(或提交给数据库)的确认。表示事务的日志条目的存储被认为是在事务的处理中执行的操作的一部分。这是因为,如果需要从事务日志260中恢复数据库系统200,则直到事务已经被记录在事务日志260中,事务管理器230才能保证数据将可用。因此,为了防止丢失数据,事务管理器230(或管理数据库系统的事务处理的其他组件)不会向请求执行事务的实体提供关于已经将事务提交给数据库的确认,直到事务记录器510确认该事务的事务日志条目565已经写入事务日志560中。这是因为,一旦实体接收到关于已经提交事务的确认,则在了解到该数据现在已经安全地存储在数据库中时,该实体可以(并且经常会)丢弃包含在事务中的数据的副本。由于这种操作方式,事务日志260可以包含日志条目565,该日志条目565表示已经提交给数据库的事务(即,在事务管理器230已经向请求实体提供了关于事务已经被提交给数据库的确认的情况下)、以及尚未提交给数据库的事务(即,在事务管理器230尚未向请求实体提供关于事务已经被提交给数据库的确认)。具有写入事务日志260中的日志条目565但是尚未被认为已经提交给数据库的这些事务可以被称为未提交或隐藏事务。由于请求实体可以尝试重新提交任何未提交事务(即,在尚未向请求实体提供关于已经提交事务的确认的情况下的事务),因此在一些示例中(如下文中更详细地讨论),数据库系统200提供了一种用于防止在从事务日志260中恢复时将这样的隐藏事务恢复到数据库系统200中的机制。
第一安全计数器520由数据库系统200用来维持表示其对应事务已经提交给数据库的已经写入事务日志260中的事务日志条目565的数目的计数。也就是说,关于其对应事务已经提交给数据库的确认已经被提供给请求实体的事务日志260中的事务日志条目565的数目。下面将进一步描述第一安全计数器520的使用。
当事务日志变得太大时,某些数据库系统可以将日志中的多个条目一起组合成数据库系统的快照。这样的快照完全表示数据库在特定时间点的状态。然后,数据库系统可以从事务日志中截断(或删除)已经组合成快照的日志条目,因为不再需要它们来恢复数据库。相反,可以通过使用最新快照作为起点并且从事务日志中重放其余事务日志条目来恢复数据库。当然,如果需要,数据库系统仍然可以将截断的事务日志条目的副本保留在事务日志外部(例如,可能允许审核/审查已经发生的事务)。
日志截断模块535通过生成数据库系统200在特定时间点的快照540来截断事务日志260。快照540有效地组合了在获取快照540的特定时间点之前发生的所有事务日志条目565。在一些示例中,可以产生两种类型的快照:数据快照,其表示自前一快照以来已经插入或更新的行;以及增量快照,其表示自前一快照以来已经删除的行。在这样的示例中,最新快照540被认为包括已经获取的并且包括最新快照的所有先前的数据快照和增量快照。然后,可以通过使用最新快照540和在获取快照540之后发生的事务的任何事务日志条目565来恢复数据库系统200。这表示,可以从事务日志560中删除(或截断)在获取快照540的时间点之前发生的事务日志条目565,而不会影响恢复数据库系统200的能力。日志截断模块535进行操作以确保快照540中仅包括与已经提交给数据库的事务有关的事务日志条目565。因此,当截断日志260(并且生成快照540)时,日志截断模块535在事务日志260中标识特定点,在该点之前的所有日志条目565都与已经提交的事务有关。在一些示例中,日志截断模块535在日志内标识最新时间点,在该时间点之前的所有日志条目565都与已经提交的事务有关。通过排除与尚未提交的事务有关的日志条目565,日志截断模块535可以确保快照的完整性,即使数据库在日志条目565已经写入日志260中的所有事务已经提交之前变为脱机。
在数据库系统包括日志截断模块535的示例中(即,在支持事务日志260的截断的数据库中),存在将被截断的日志条目重新插入事务日志260中的可能性,从而有效地导致这些事务在从事务日志260恢复数据库系统200时发生两次(一次是由于该事务对所生成的快照的影响,而一次是在事务日志条目565在快照上重放时)。因此,在示例中,提供了一种用于防止这种情况发生的技术,如下面更详细地讨论的。
另外,在恢复数据库时,必须确保使用最新快照540来恢复数据库系统200。否则,在恢复之后的数据库状态将不正确。在产生数据快照和增量快照的示例中,这包括检查是否使用了所有先前获取的数据快照和增量快照,直到并且包括最新快照。为了确保提供最新快照,数据库系统200为每个数据和增量文件维持加密哈希。当块被添加到文件时,哈希将被更新。一旦对检查点文件的所有写入完成,则哈希与文件名一起保存在系统表中。数据库系统200通过将它们的内容的哈希与根文件中的哈希进行比较来检查在恢复期间读取的所有检查点文件对的完整性。接下来,数据库系统200使用基于Ariadne的状态连续性协议(有关这个协议的更多细节,参见2016年的Austin,TX:USENIX Association的第875-892页的第25届USENIX安全研讨会(USENIX Security 16)中的R.Strackx和F.Piessens的“Ariadne:A Minimal Approach to State Continuity”)来在根文件内保存和恢复系统表,同时保证完整性、新鲜性和活跃性。
第二安全计数器545由数据库系统200用来维持表示已经被日志截断模块535截断的事务日志条目565的数目的计数。通过组合由第一安全计数器520和第二安全计数器545提供的信息,使得数据库系统能够确定事务日志条目(对于已经提交的事务)应当如何存在于事务日志中。具体地,第一计数器与第二安全计数器520之间的差表示应当在事务日志260中的已经提交的事务日志条目565的数目。当然,在数据库系统200的其他示例中省略了第二安全计数器545。由第二安全计数器545执行的功能将在下面进一步描述。
第三安全计数器550由数据库系统200用来表示已经写入事务日志260中的事务日志条目565的数目。换言之,第三安全计数器550表示已经写入事务日志中的事务日志条目565的总数而不管相关联的事务是否已经提交给数据库。当然,在数据库系统200的其他示例中省略了第三安全计数器550。由第三安全计数器550执行的功能将在下面进一步描述。
第四安全计数器555(其可以被称为时期计数器)被配置为至少在第三安全计数器550在恢复时的值大于第一安全计数器520在恢复时的值时由恢复模块525在数据库系统200的恢复期间递增。当第三安全计数器550的值大于第一安全计数器520的值时,这表明事务日志260中可能存在隐藏(即,未提交)事务。在一些示例中,当数据库恢复时,如下面进一步讨论的,可以忽略事务日志260中包括的任何隐藏事务。这就带来了以下可能性:被忽略的隐藏事务可能被重新插入事务日志中并且被包括在数据库的将来恢复中(当第一安全计数器的值递增到大于先前忽略的隐藏事务中包含的第三安全计数器值的指示570的程度时),从而影响数据库系统200的完整性。在一些示例中,这通过以下方式来防止:使用第四安全计数器555并且在每个事务日志条目中包括在这些日志条目565被写入事务日志中时第四安全计数器555的值的指示570。任何先前被忽略的事务将指示小于其当前值的第四安全计数器555的值,从而允许在数据库系统200的未来恢复中检测到并且忽略它们。当然,在数据库系统200的其他示例中省略了第四安全计数器555。由第四安全计数器555执行的功能将在下面进一步描述。
安全计数器(即,第一安全计数器520以及第二安全计数器545、第三安全计数器550和第四安全计数器555(如果存在的话))在它们以如下这种方式存储的意义上都是安全的:该方式使得它们的值在数据库系统200在其上操作的主计算机系统100的重启之间是持久性的。从系统的恶意用户难以篡改的意义上来说,安全计数器也是安全的。
在一些示例中,安全计数器是单调计数器。也就是说,它们仅允许计数器递增,而不允许其递减。这为攻击者尝试改变日志提供了附加障碍,因为安全计数器不提供允许递减计数的任何功能(如果要从日志中删除日志条目565而不进行检测,则需要这样做)。通常,对将附加的新的日志条目565插入事务日志中的关注较少,因为现有机制(诸如使用安全存储的私钥来对日志条目565进行加密或对日志条目565的哈希进行签名)可以针对这样的攻击提供良好的保护级别。
在安全计数器不是单调的情况下,可以相对于其他安全计数来存储不同安全计数的表示。也就是说,代替维持绝对事务数目作为第三安全计数,可以通过将第一安全计数的值与明确地跟踪在事务日志260中也可能具有日志条目的隐藏(即,未提交)事务的数目的计数器相加来隐式地提供第三安全计数。在这样的示例中使用非单调计数器允许递减以及递增计数,以使得能够使用该方法。作为该方法的另一示例,可以通过为已经提交的事务维持日志条目565的数目的显式计数来隐式地提供第二安全计数,其中这些日志条目尚未被截断。在该示例中,通过从第一安全计数240的值中减去该显式计数的值来隐式地提供第二安全计数。
在一些示例中,可以由在其中执行数据库的部分的可信执行环境的特征来提供安全计数器。作为示例,可以使用在管理引擎中可用的磨损受限的NVRAM来实现单调计数器。但是,在替代示例中,由分布式单调计数器服务来提供安全计数器,现在将在下面结合图6对其进行详细描述。与使用可信执行环境的特征相比,分布式单调计数器服务可能更灵活且更高效,因为使用这样的特征实现的单调计数器的访问速度可能很慢。
图6是数据库系统200的示例可以与之通信以维持和检索安全计数520、545、550和555的示例性分布式单调计数器服务(MCS)600的示意图。分布式单调计数器服务(MCS)600包括分布在一个以上的故障域620中的两个或更多个重复实例610。
故障域由故障可能影响计算服务的供应的范围来定义。换言之,在单个故障域620内操作的所有服务可能会由于提供这些服务的硬件内的单个故障而变得不可用。然而,不能通过提供这些服务的硬件中的单个故障来使在一个以上的故障域620上操作的服务不可用。在一些示例中,故障域还可以包含在特定地理区域内的可能受到该地理区域内的单个事件(诸如地震或火灾)的影响的所有计算服务。在这样的示例中,分布式单调计数器服务600的重复实例610在一个以上的故障域620上的分布可能需要在操作重复实例610的计算机系统100之间的某种形式的地理分离(但是,在其他示例中,并非如此)。通过在多个故障域620之间分布单调计数器服务600,单调计数器服务的可靠性可以非常高,并且通常情况下,实例610分布在其上的故障域620的数目越多则越好。
每个单调计数器服务重复实例610为每个安全计数器存储它们自己的计数版本。然后,实例610使用两个或更多个或所有重复实例610之间的共识(或符合)协议来确定每个安全计数器的当前值。在一些示例中,基于存储特定值的大多数重复实例610来达成共识。在一些示例中,如果特定数目或比例的重复实例610存储特定值,则可以达成共识。在这样的示例中,不必针对由所有重复实例610存储的值来检查是否已经符合一定数目的重复实例610。实际上,在一些重复实例610变得不可用的情况下(例如,由于它们在其中操作的故障域610中的故障),可以基于仍然可用的这些重复实例610来达成共识。
使用单调计数器服务600来存储(或提供)安全计数器还可以提高计数器的完整性。这是因为,试图改变安全计数以允许他们篡改事务日志260中的条目565的攻击者必须先访问多个单调计数器服务实例610,然后才能影响从服务600提供的计数器的值,从而大大增加了所需要的工作量。这是由于以下事实:单调计数器服务600基于多个重复实例610或服务600之间的共识来确定来自计数器的当前值,这表示简单地改变实例之一中存储的安全计数器值不会影响由单调计数器服务600报告的该计数器的值。
在一些示例中,数据库系统200是多线程的。也就是说,它包括可以并行处理多个事务的多个线程(其可以称为事务处理线程)。在这些示例中,为每个线程维持单独的第一计数器520以及单独的第二计数器545和第三计数器550(在存在的情况下)(或者在概念上,第一计数器、第二计数器和第三计数器可以完成与每个线程相关联的单独的计数)。每个事务处理线程可以引起事务日志条目565被写入事务日志260中,因为它们独立地处理不同的事务。在这些示例中,被写入事务日志260中的事务日志条目565每个包括关于哪个事务处理线程导致写入该事务日志条目565(即,哪个事务处理线程处理了与该事务日志条目565相关联的事务)的指示。然后,可以使用该线程的相应计数器来恢复每个线程的事务。
图7是用于将事务日志条目565写入事务日志260中的示例性方法700的流程图。
方法700在可选操作710开始,其中方法700递增由第三安全计数器550维持的第三安全计数的值。该计数器表示已经写入事务日志260中的事务日志条目565的数目(而无论这些日志条目表示的事务是否已经提交给数据库)。通过首先递增计数器,第三安全计数始终反映应当从事务日志中可检索的日志条目565的最大数目。在某些情况下,例如,如果在将事务日志条目565实际写入事务日志260中之前重启主计算机系统100,则可以可检索较少的日志条目。在其他示例中,不需要在方法700中作为第一操作来递增第三安全计数,尽管这可能会导致第三安全计数器550不能反映应当从事务日志260中可检索的日志条目565的最大数目的可能性。当然,在数据库系统不包括第三安全计数器550的示例中,可以省略该操作,在这种情况下,方法700直接进行到操作720。
在操作720,方法700将事务日志条目565写入事务日志260中。在图7所示的示例性方法700中,事务日志条目565包括第三安全计数器550的当前值的指示570。但是,在其他示例中,在数据库系统不包括第三安全计数器550的情况下,事务日志不包括该指示570。在其他示例中,在数据库系统维持上述第四安全计数器555的情况下,事务日志条目565还包括第四安全计数器555的当前值的指示。在又一些示例中,在数据库系统200包括多个事务处理线程的情况下,在操作720写入的事务日志条目565还包括关于哪个事务处理线程导致将日志条目写入事务日志260中的指示。在一些示例中,将事务日志条目565写入事务日志260中可以包括使用安全存储的加密密钥来对日志条目565进行加密。在一个示例中,在每个事务日志条目中包括第三安全计数器和/或第四安全计数器的指示的情况下,可以使用加密认证来将这些安全计数器作为日志条目565的认证数据的一部分包括在日志条目565中。在将事务日志条目565写入事务日志260中之后,该方法前进到操作730。
在操作730,方法700等待来自事务日志260的确认(这可以涉及等待来自底层存储抽象层和/或硬件的确认)以确认事务日志条目已经写入事务日志260中。换言之,方法700等待直到安全地存储事务使得在这一点之后,可以保证由事务日志条目565表示的事务将被包括在使用事务日志260执行的数据库的任何恢复中。一旦接收到关于事务日志条目565已经写入事务日志260中的确认,则该方法前进到操作740。
在操作740,方法700递增由第一安全计数器520提供的第一安全计数。该操作在作为事务提交回调过程的一部分而向请求执行事务的实体通知事务已经提交之前来执行。因此,第一安全计数被维持为已经提交给数据库的事务的已经写入事务日志中的事务日志条目565的数目的表示。在递增第一安全计数(并且完成事务提交回调过程以向请求实体通知事务已经提交)之后,方法700进行到可选操作750。
在可选操作750,方法700确定是否还有其他事务日志条目565需要写入事务日志260中,在这种情况下,方法700再次返回到可选操作710。否则,方法700结束。在一些示例中,省略了可选操作750,使得方法700简单地结束。
图8是示出第一安全计数520、第二安全计数545和第三安全计数550与事务日志260内的事务条目570之间的示例性关系的示意图。在该图示中,事务日志260包括被标记为T1至T21的21个事务日志条目565。
在该示例中,被标记为T1至T9的前9个事务日志条目565已经被截断并且组合成快照540。因此,当使用图8所示的示例性事务日志260来恢复数据库系统200时,将提供被标记为T10到T21的12个事务日志条目(因为这些事务日志条目尚未从事务日志中被截断),并且数据库系统将需要与这些事务日志条目565相结合使用快照540来恢复数据库系统200。
继续该示例,在其余的非截断日志条目中,被标记为T10至T15的6个日志条目与已经提交给数据库的事务有关,而被标记为T15至T20的其余6个非截断日志条目与尚未提交给数据库的隐藏事务有关。
因此,在该示例中,第一安全计数520的值为15,因为15个事务日志条目565已经写入事务日志260中,其中的9个随后已经被截断为快照540,而其中的6个则尚未被截断。
在维持第二安全计数545的这些示例中,在该示例中的第二安全计数的值为9,因为事务日志条目565中被标记为T1至T9的9个已经被截断为快照540。因此,通过从第一安全计数520的值中减去第二安全计数545的值,可以获取与已经提交给数据库系统200的事务有关的非截断日志条目的总数。
在维持第三安全计数550的这些示例中,在该示例中的第三安全计数的值为21,因为总共21个日志条目565已经写入事务日志260中。通过从第三安全计数550的值中减去第一安全计数520的值,可以获取与隐藏(或未提交)事务有关的条目565。
在事务日志条目565包括在事务日志条目565被写入时第三安全计数器值550的指示570的示例中,在该示例中,日志条目T1至T21可以分别包括值1至21的指示。因此,可以通过找到指示小于或等于第二安全计数545的值的第三计数器的值的日志条目来标识被截断的日志条目(在第二安全计数被维持的情况下)。类似地,可以通过找到指示大于或等于第二安全计数545的当前值(即,大于9)并且小于或等于第一安全计数的值(即,小于或等于15)的第三计数器的值的日志条目来标识与已经提交给数据库系统200的事务有关的非截断日志条目。而且,可以通过找到指示大于第一安全计数520的值(并且小于或等于第三安全计数550的值)的第三计数器的值的日志条目来标识与隐藏事务相关的非截断日志条目。
安全计数器与事务日志条目565之间的这些关系由数据库系统200用来验证用于恢复数据库系统200的事务日志条目的完整性,并且以能够保留其完整性的方式来恢复数据库系统200,现在将结合图9进行讨论。
图9是用于使用事务日志260来恢复数据库系统200的示例性方法900的流程图。
在操作905,方法900从事务日志260接收事务日志条目565。例如,在图8中提供的图示中,将接收被标记为T10至T21的事务日志条目565。在一些示例中,所接收的事务日志条目可以包括在事务日志条目565被写入时第三安全计数器550的值的相应指示570(在数据库系统200维持第三安全计数器550的情况下)、在事务日志条目565被写入时第四安全计数器555的值的相应指示575(在数据库系统200维持第四安全计数器555的情况下)、和/或处理日志条目565所涉及的事务的事务处理线程的指示(在数据库系统200包括多个事务处理线程的情况下)。在接收到事务日志条目565之后,方法900进行到可选操作910。
在可选操作910,方法900接收最新(或当前)快照540。在一些示例中,最新快照540包括已经获取的并且包括最新快照的所有先前的数据快照和增量快照。例如,在图8中提供的图示中,将接收表示在与被标记为T1至T9的日志条目565相关联的事务已经提交之后数据库系统的状态的快照540。一旦已经接收到最新快照540,则方法900进行到操作915。当然,在一些示例中,可以省略可选操作910,在这种情况下,该方法直接进行到操作915。
在操作915,方法900接收第一安全计数520的当前值。在一些示例中,该值可以从分布式单调计数器服务600来接收。例如,在图8中提供的图示中,可以接收为15的值作为第一安全计数520的当前值。然后,方法900进行到可选操作920。
在可选操作920,方法900接收第二安全计数545的当前值。再次,在一些示例中,该值可以从分布式单调计数器服务600来接收。例如,在图8中提供的图示中,可以接收为9的值作为第二安全计数545的当前值。方法900然后进行到可选操作925。在数据库系统200不维持第二安全计数545的示例中,可以省略该操作,在这种情况下,方法900直接进行到操作925。
在操作925,方法900接收第三安全计数550的当前值。再次,在一些示例中,该值可以从分布式单调计数器服务600来接收。例如,在图8中提供的图示中,可以接收为21的值作为第三安全计数550的当前值。然后,方法900进行到可选操作930。在数据库系统200不维持第三安全计数550的示例中,可以省略该操作,在这种情况下,方法900直接进行到操作930。
在操作930,方法900接收第四安全计数555的当前值。再次,在一些示例中,该值可以从分布式单调计数器服务600来接收。然后,该方法进行到操作935。在数据库系统200不维持第四安全计数255的示例中,可以省略该操作,在这种情况下,方法900直接进行到操作935。
虽然在图9中将安全计数的当前值的检索表示为4个单独的操作,但是应当理解,在其他示例中,可以在单个操作中检索安全计数的值。例如,可以向分布式单调计数器服务600发出一次检索所有安全计数的单个请求。同样,在其他示例中,可以改变检索安全计数的顺序。
在操作935,方法900基于已经接收的安全计数来验证事务日志260的完整性。在一些示例中,操作935简单地通过确定已经接收到正确数目的事务日志条目565来验证事务日志260。
在仅维持第一安全计数520(并且不支持快照)的示例中,这可以通过检查已经接收的事务日志条目的数目是否至少等于(如果不大于)第一安全计数520的值来确定。在图8所示的示例中,如果已经接收到至少15个事务日志条目,则这样的示例将验证事务日志的完整性。
在维持第二安全计数545(并且支持快照)的示例中,这可以通过检查已经接收的日志条目的数目是否至少等于(如果不大于)从第一安全计数的值中减去第二安全计数545的值来确定。在图8所示的示例中,如果至少接收到6个事务日志条目,则这样的示例将验证事务日志的完整性。
在维持第三安全计数545的示例中,这可以通过检查已经接收的日志条目的数目不超过第三安全计数545的值(或者在第二安全计数也被维持的情况下,从第三安全计数550的值中减去第二安全计数545的值)来确定。在图8所示的示例中(其支持快照并且维持第二安全计数),如果所接收的事务日志条目的数目不超过12个,则这样的示例将验证事务日志的完整性。
在事务日志条目565包括在事务日志条目565被写入时第三安全计数器值550的指示570的示例中,这可以通过检查这些指示的值不小于或等于第二安全计数的值或者大于第三安全计数550的值来确定。其他这样的示例另外地或者替代地检查指示570的第三安全计数器值550形成完整序列(即,所指示的值的序列中没有间隙,间隙将指示缺少事务日志条目565)。在图8所示的示例中,如果每个事务日志条目565中指示570的第三安全计数器值550不包括小于或等于9或者大于21的任何指示,并且所接收的指示形成完整序列(即,所有值10、11、12、13、14、15、16、17、18、19、20和21由相应事务日志条目指示),则这样的示例将验证事务日志260的完整性。
在维持第四安全计数555并且日志条目565包括在日志条目565被写入时第四安全计数555的值的指示575的示例中,这可以通过检查这些指示的值不小于(或等于)第四安全计数555的当前值来确定。
如果所接收的事务日志条目565的完整性得到验证,则方法900进行到操作940。否则,由于事务日志条目565的完整性受到损害,方法900终止而不恢复数据库。在其他示例中,方法900可以向用户提供关于事务日志条目565的完整性已经受到损害的警告。在另外的示例中,方法900可以允许用户忽略这样的警告并且无论如何都恢复数据库。
在操作940,方法900基于所接收的事务日志条目565以及在接收到快照540的情况下基于所接收的快照540来恢复数据库。
在一些示例中,恢复基于第一安全计数520的所接收的值。在一些这样的示例中,通过重放事务日志条目545直到等于第一安全计数520的数目的日志条目已经被重放来恢复数据库。
在其他示例中,在维持第二安全计数545的情况下,还基于第二安全计数545的值来进行恢复。在一些这样的示例中,通过重放事务日志条目直到等于从第一安全计数520中减去第二安全计数545的数目的日志条目已经被重放来恢复数据库。
在其他示例中,在每个事务日志条目565中包括相应第三安全计数550的指示570的情况下,恢复还基于每个事务日志条目565中包含的指示570。在一些这样的示例中,数据库的恢复忽略(或排除)隐藏事务的任何事务日志条目565,即,其中第三安全计数550的指示570大于第一安全计数520的当前值的事务日志条目565。在其他这样的示例中,数据库的恢复忽略(或排除)已经被截断的事务日志条目,即,其中第三安全计数550的指示570小于第二安全计数545的当前值。
在其他示例中,在数据库系统200维持第四安全计数器555并且事务日志条目565每个包括在事务日志条目被写入时第四安全计数555的值的指示575的情况下,恢复还基于第四安全计数器555的当前值和每个事务日志条目565中包含的指示570。在这样的示例中,数据库的恢复忽略(或排除)具有小于第四安全计数555的当前值的指示575的第四安全计数555值的任何事务日志条目565。
在可选操作945,方法900确定是否有任何接收的事务日志条目与隐藏(即,未提交)事务有关。这是通过将第三安全计数550的值与第一安全计数520的值进行比较来确定的。如果第三安全计数550大于第一安全计数520,则表明与隐藏事务有关的日志条目可能存在于所接收的事务日志条目565中。如果确定所接收的事务日志条目565可以包括与隐藏事务有关的事务日志条目565,则该方法进行到可选操作950。当然,在一些示例中,在数据库系统200没有维持第四安全计数555的情况下,可以省略操作945和950,在这种情况下,方法900简单地终止。
在可选操作950,方法900获取整个事务日志260的新快照。这确保了与已经提交给数据库的事务有关的所有日志条目565被包括在最新快照540中。如果已经创建快照,则方法900进行到可选操作955。
在可选操作955,方法900递增第四安全计数555。递增第四安全计数用于使所有先前写入的事务日志条目565无效,包括在数据库的恢复期间可能已经存在的任何隐藏事务。这防止了任何隐藏事务被恶意重用,因为在数据库系统200维持第四安全计数的示例中,每个事务日志条目565包括在条目565被写入日志中时第四安全计数555的值的指示575。因此,数据库系统200可以忽略指示小于第四安全计数555的当前值的值的所有事务。
作为本文中描述的其他示例的替代或补充,示例包括以下各项的任何组合:
一种数据库系统,包括操作系统、查询引擎、事务管理器和实现数据库管理功能的组件,其中所述查询引擎和所述事务管理器被配置为与所述操作系统和所述实现数据库管理功能的组件分开地在主计算机系统的一个或多个存储器飞地内被执行。
上述数据库系统,其中所述查询引擎包括查询解析器、查询优化器和执行引擎。
上述数据库系统,其中所述查询引擎包括执行引擎和一个或多个预编译查询。
上述数据库系统,其中所述实现数据库管理功能的组件包括以下中的一项或多项或全部:用于获取所述数据库系统的备份的组件;用于对服务器问题进行故障排除的组件;以及用于存储选项的配置的组件。
上述数据库系统,还包括存储器中存储引擎,所述存储器中存储引擎被配置为在所述存储器飞地内被执行并且从以存储器中方式被存储在所述存储器飞地内的一个或多个表和/或索引读取数据和/或向所述一个或多个表和/或索引写入数据。
上述数据库系统,其中所述存储器中存储引擎被配置为通过将对所述一个或多个表和/或索引执行的事务写入被存储在所述存储器飞地外部的日志来持久化所述事务。
上述数据库系统,还包括第二查询引擎、第二事务管理器和第二存储引擎,所述第二查询引擎、所述第二事务管理器和所述第二存储引擎被配置为在所述存储器飞地外部被执行,其中对由所述存储器中存储引擎存储的数据的查询由所述查询引擎处理并且对由所述第二存储引擎存储的数据的查询由所述第二存储引擎处理。
上述数据库系统,还包括访问控制模块,所述访问控制模块被配置为在所述存储器飞地内被执行并且:存储属于被授权访问所述数据库系统的用户的相应公钥私钥对中的一个或多个公钥;以及至少部分地基于所述一个或多个公钥私钥对来确定发出执行预编译查询的请求的用户是否被授权使用认证方案来访问所述数据库系统;响应于确定发出所述请求的所述用户未被授权访问所述数据库系统而拒绝执行所述预编译查询的所述请求。
上述数据库系统,其中所述访问控制模块存储在被授权访问所述数据库系统的所有用户之间共享的公钥私钥对中的单个公钥。
上述数据库系统,其中所述访问控制模块还被配置为将所述预编译查询中的每个预编译查询与属于被授权执行所述预编译查询的用户的公钥私钥对中的相应的一个或多个公钥相关联,其中确定发出所述请求的所述用户是否被授权访问所述数据库系统包括至少部分地基于与所述预编译查询相关联的所述一个或多个公钥来确定发出所述请求的所述用户是否被授权执行所述预编译查询。
上述数据库系统,其中所述访问控制模块还被配置为接收要添加到所存储的公钥中或从所存储的公钥中删除的公钥的指示,并且相应地从所存储的公钥中添加或删除所指示的公钥。
上述数据库系统,其中所述数据库系统还被配置为:响应于所述存储器飞地被创建而生成唯一标识符;向在所述存储器飞地外部的密钥管理服务提供所述唯一标识符的表示;在与客户端的任何通信中提供所述唯一标识符的表示。
上述数据库系统,其中所述唯一标识符的所述表示通过用所述密钥管理服务的公钥(380)对所述唯一标识符进行加密来生成。
一种数据库系统,包括:操作系统;存储器中存储引擎;查询引擎,包括执行引擎和一个或多个预编译查询;事务管理器;访问控制模块;以及实现数据库管理功能的组件,其中所述存储器中存储引擎、所述查询引擎、所述事务管理器和所述访问控制模块被配置为与所述操作系统和所述实现数据库管理功能的组件分开地在主计算机系统的存储器飞地内被执行,所述存储器中存储引擎被配置为从以存储器中方式被存储在所述存储器飞地内的一个或多个表和/或索引读取数据和/或向所述一个或多个表和/或索引写入数据并且通过将对所述一个或多个表和/或索引执行的事务写入被存储在所述存储器飞地外部的日志来持久化所述事务,并且所述访问控制模块被配置为:存储属于被授权访问所述数据库系统的用户(330)的相应公钥私钥对(320)中的一个或多个公钥(310);以及至少部分地基于所述一个或多个公钥来确定发出执行预编译查询(228)的请求(340)的用户(330)是否被授权使用认证方案来访问所述数据库系统;响应于确定发出所述请求的所述用户未被授权访问所述数据库系统而拒绝执行所述预编译查询的所述请求。
一种用于与数据库系统交互的计算机实现的方法,所述方法包括:创建与所述数据库系统上的存储器飞地的安全连接;以及向所述存储器飞地请求飞地报价;使用所述飞地报价验证在所述存储器飞地中运行的进程包括所述数据库系统的查询引擎和事务管理器,但是不包括所述数据库系统的操作系统或实现所述数据库系统的数据库管理功能的组件;以及响应于验证在所述存储器飞地中运行的所述进程包括所述数据库系统的查询引擎和事务管理器,但是不包括所述数据库系统的操作系统或实现所述数据库系统的数据库管理功能的组件,经由所述安全连接向所述数据库系统发送执行查询的请求。
上述方法,其中所述查询引擎包括一个或多个预编译查询,并且经由所述安全连接向所述数据库系统发送执行查询的请求包括发送包括要被执行的所述预编译查询的指示的请求。
上述方法,其中使用所述飞地报价而被执行的所述验证还包括验证在所述存储器飞地中运行的所述进程包括存储器中存储引擎,所述存储器中存储引擎被配置为在所述存储器飞地内被执行并且从以存储器中方式被存储在所述存储器飞地内的一个或多个表和/或索引读取数据和/或向所述一个或多个表和/或索引写入数据。
上述方法,其中所述方法还包括:创建与在所述数据库系统上的所述存储器飞地外部执行的进程的第二连接,并且经由所述第二连接发送执行一个或多个管理功能的请求。
上述方法,其中所述方法还包括:创建与在所述数据库系统上的所述存储器飞地外部执行的进程的第二连接,并且经由所述第二连接发送执行第二查询的请求。
上述方法,其中所述方法还包括:从所述存储器飞地接收所述存储器飞地的唯一标识符的表示;与密钥管理服务通信以至少部分地基于所述存储器飞地的所述唯一标识符的所述表示来确定所述存储器飞地是否是已经这对所述数据库系统而被创建的所述存储器飞地的最新实例。
一种数据库系统(诸如上述数据库系统)被配置为使得所述数据库系统的至少一部分被配置为在可信执行环境内执行,所述数据库系统包括:事务记录器,被配置为将事务日志条目写入被存储在所述可信执行环境外部的事务日志中,所述事务日志条目中的每个事务日志条目表示由所述数据库系统处理的事务;第一安全计数器,被配置为维持已经提交给所述数据库的事务的已经写入所述事务日志中的事务日志条目的数目的表示;以及恢复模块,被配置为至少部分地基于从所述事务日志中检索到的事务日志条目和所述第一安全计数器的当前值来恢复所述数据库系统。
上述数据库系统还包括:日志截断模块,被配置为通过生成表示所述数据库系统在特定时间点的状态的快照并且截断在所述时间点之前发生的事务的所有事务日志条目来截断所述事务日志;以及第二安全计数器,被配置为维持已经由所述日志截断模块截断的事务日志条目的数目的表示,其中所述恢复模块还被配置为另外基于所述数据库系统的最新快照和所述第二安全计数器的当前值来恢复所述数据库系统。
上述数据库系统还包括被配置为维持已经写入所述事务日志中的事务日志条目的数目的表示的第三安全计数器,其中:由所述事务记录器写入所述事务日志中的每个事务日志条目包括在所述事务日志条目被写入时所述第三安全计数器的值的相应指示;并且所述恢复模块还被配置为另外基于最新快照和由所述事务日志条目中的每个事务日志条目指示的所述第三安全计数器的相应值来恢复所述数据库系统。
上述数据库系统还包括:多个事务处理线程,其写入所述事务日志中的所述事务日志条目中的每个事务日志条目包括处理由所述事务日志条目表示的所述事务的所述事务处理线程的相应指示,其中每个单独的事务处理线程与单独的相应的第一安全计数器、第二安全计数器和第三安全计数器相关联,并且所述恢复模块还配置为另外基于每个事务日志条目中的所述事务处理线程的所述指示以及每个事务处理线程的相应的第一安全计数器、第二安全计数器和第三安全计数器来恢复所述数据库系统。
上述数据库系统还包括被配置为至少在所述第三安全计数器在恢复时的值大于所述第一计数器在所述恢复时的值时由所述恢复模块在所述数据库系统的恢复期间递增的第四安全计数器,其中:由所述事务记录器写入所述事务日志中的每个事务日志条目包括在所述事务日志条目被写入时所述第四安全计数器的值的相应指示;并且所述恢复模块还被配置为另外基于所述第四安全计数器的当前值和由所述事务日志条目中的每个事务日志条目指示的所述第四安全计数器的相应值来恢复所述数据库系统。
上述数据库系统,其中所述恢复模块还被配置为在所述数据库系统的恢复期间忽略以下中的一项或多项或全部:包括小于或等于所述第二安全计数器的当前值的所述第三安全计数器的值的指示的事务日志条目;包括大于所述第一安全计数器的当前值的所述第三安全计数器的值的指示的事务日志条目;包括小于所述第四安全计数器的当前值的所述第四安全计数器的值的指示的事务日志条目。
上述数据库系统,其中所述恢复模块还被配置为通过确定由所述事务日志条目中的每个事务日志条目指示的所述第三安全计数器的值形成完整序列来验证所接收的事务日志条目的完整性被保留。
上述数据库系统,其中所述恢复模块还被配置为通过以下方式来验证所所接收的事务的完整性被保留:确定所接收的事务日志条目的数目不小于小于所述第二计数器的当前值的所述第一安全计数器的当前值;以及确定所接收的事务日志条目的数目不大于小于所述第二计数器的当前值的所述第三安全计数器的当前值。
上述数据库系统,其中所述数据库系统被配置为使用安全存储的加密密钥来加密所述事务日志条目中的每个事务日志条目。
上述数据库系统,其中所述安全计数器是单调计数器。
上述数据库系统,其中所述单调计数器由分布式单调计数器服务提供,所述分布式单调计数器服务包括两个或更多个重复实例,所述两个或更多个重复实例分布在一个以上的故障域中,其中所述分布式单调计数器服务被配置为使用两个或更多个或所有所述重复实例之间的共识协议来确定每个安全计数的当前值。
一种用于将事务日志条目写入数据库系统的事务日志中的计算机实现的方法,其中所述数据库系统的至少一部分被配置为在可信执行环境内执行并且所述事务日志存储在所述可信执行环境外部,所述方法包括:维持第一安全计数,所述第一安全计数表示已经提交给所述数据库的事务的已经写入所述事务日志中的事务日志条目的数目;以及将事务日志条目写入所述事务日志中。
上述方法还包括:维持表示已经写入所述事务日志中的事务日志条目的数目的第三安全计数,其写入所述事务日志中的所述事务日志条目包括在写入所述事务日志条目时所述第三安全计数的值的指示。
上述方法,其中所述数据库系统包括多个事务处理线程,并且其写入所述事务日志中的所述事务日志条目还包括处理由所述事务日志条目表示的所述事务的所述事务处理线程的指示。
上述方法,其中所述数据库系统维持第四安全计数,所述第四安全计数表示所述数据库已经被恢复并且已经检测到与未提交的事务有关的事务日志条目的次数,并且其写入所述目事务日志中的所述事务日志条还包括在所述事务日志条目被写入时所述第四安全计数的值的指示。
上述方法还包括使用安全存储的加密密钥来对写入所述事务日志中的所述事务日志条目进行加密。
一种用于恢复数据库系统的计算机实现的方法,其中所述数据库系统的至少一部分被配置为在可信执行环境内执行,所述方法包括:接收从存储在所述可信执行环境外部的事务日志中检索到的一个或多个事务日志条目,所述一个或多个事务日志条目中的每个事务日志条目表示由所述数据库系统处理的事务;以及接收由所述数据库系统维持的第一安全计数的当前值,所述第一安全计数表示已经提交给所述数据库的事务的已经写入所述事务日志中的事务日志条目的数目;通过确定已经接收到正确数目的事务日志条目,至少部分地基于所述第一安全计数的当前值来验证所述事务日志的完整性;以及响应于验证所接收的事务日志条目的完整性,使用所接收的事务日志条目和所述第一安全计数的当前值来恢复所述数据库。
上述用于恢复数据库系统的方法,其中所述数据库系统被配置为通过生成表示所述数据库系统在特定时间点的状态的快照并且截断在所述时间点之前发生的事务的所有事务日志条目来截断所述事务日志,所述方法还包括:接收所述数据库系统的最新快照;以及接收由所述数据库系统维持的第二安全计数的当前值,所述第二安全计数表示已经截断的事务日志条目的数目,其中:通过确定已经接收到正确数目的事务日志条目来验证所述事务日志条目的完整性还基于所述第二安全计数的当前值;并且恢复所述数据库包括将由所接收的事务日志条目表示的所述事务应用于由所述数据库系统的所述最新快照表示的数据库状态。
上述用于恢复数据库系统的方法还包括:接收由所述数据库系统维持的第三安全计数的当前值,所述第三安全计数表示已经写入所述事务日志中的事务日志条目的数目,其中所述事务日志条目中的每个事务日志条目包括在所述事务日志条目被写入时所述第三安全计数的值的相应指示;其中:通过确定已经接收到正确数目的事务日志条目来验证所述事务日志条目的完整性还基于所述第三安全计数的当前值;验证所述事务日志条目的完整性还包括确定在每个所接收的事务日志条目中指示的所述第三安全计数的值形成完整序列;并且使用所接收的事务日志条目来恢复所述数据库包括忽略包括大于所述第一安全计数器的当前值和/或小于所述第二安全计数器的当前值的所述第三安全计数的指示的任何事务日志条目。
上述用于恢复数据库系统的方法还包括:接收由所述数据库系统维持的第四安全计数的当前值,所述第四安全计数表示所述数据库已经被恢复并且已经检测到与未提交的事务有关的事务日志条目的次数,其中所述事务日志条目中的每个事务日志条目包括在所述事务日志条目被写入时所述第三安全计数值的相应指示;其中:验证所述事务日志条目的完整性还包括确定在每个所接收的事务日志条目形式中指示的所述第四安全计数的值不小于所述第四安全计数的当前值;和/或使用所接收的事务日志条目来恢复所述数据库包括忽略包括大于所述第四安全计数的当前值的所述第四安全计数的指示的任何事务日志条目。
术语“计算机”或“基于计算的设备”在本文中用于指代具有处理能力以使其执行指令的任何设备。本领域技术人员将意识到,这样的处理能力被并入很多不同的设备中,并且因此术语“计算机”和“基于计算的设备”分别包括个人计算机(PC)、服务器、移动电话(包括智能电话)、平板计算机、机顶盒、媒体播放器、游戏机、个人数字助理、可穿戴计算机和很多其他设备。
在一些示例中,本文中描述的方法通过有形存储介质上的机器可读形式的软件来执行,例如,包括计算机程序代码装置的计算机程序的形式,该计算机程序代码装置被适配为:当该程序在计算机上运行时并且在该计算机程序可以体现在计算机可读介质上的情况下,执行本文中描述的一种或多种方法的所有操作。该软件适合于在并行处理器或串行处理器上执行使得方法操作可以以任何合适的顺序或同时执行。
这承认软件是有价值的可单独交易的商品。它旨在涵盖在“虚拟”或标准硬件上运行或控制的用于执行期望功能的软件。它还旨在涵盖“描述”或定义硬件的配置的用于执行期望功能的软件,诸如HDL(硬件描述语言)软件,该硬件用于设计硅芯片或用于配置通用可编程芯片。
本领域技术人员将认识到,用于存储程序指令的存储设备可选地分布在整个网络上。例如,远程计算机能够存储被描述为软件的过程的示例。本地或终端计算机能够访问远程计算机并且下载部分或全部软件以运行该程序。替代地,本地计算机可以根据需要下载软件,或者在本地终端处执行一些软件指令,而在远程计算机(或计算机网络)处执行一些软件指令。本领域技术人员还将认识到,通过利用本领域技术人员已经知的常规技术,全部或部分软件指令可以由专用电路(诸如数字信号处理器(DSP)、可编程逻辑阵列等)执行。
如本领域技术人员将很清楚的,可以在不丧失所寻求的效果的情况下扩展或改变本文中给出的任何范围或设备值。
尽管已经用特定于结构特征和/或方法动作的语言描述了主题,但是应当理解,所附权利要求书中定义的主题不必限于上述特定特征或动作。而是,上述特定特征和动作被公开作为实现权利要求的示例形式。
应当理解,上述益处和优点可以涉及一个实施例或者可以涉及若干实施例。实施例不限于解决任何或所有所述问题的实施例,也不限于具有任何或所有所述益处和优点的实施例。还应当理解,对“一个”项目的引用是指这些项目中的一个或多个。
本文中描述的方法的操作可以以任何合适的顺序执行,或者在适当的情况下同时执行。另外,在不脱离本文中描述的主题的范围的情况下,可以从任何方法中删除单独的框。上述任何示例的各方面可以与所描述的任何其他示例的各方面组合以形成另外的示例,而不会失去所寻求的效果。
术语“包括”在本文中用来表示包括所标识的方法框或元素,但是这样的框或元素不包括排他性列表,并且方法或装置可以包含附加框或元素。
应当理解,以上描述仅作为示例给出,并且本领域技术人员可以做出各种修改。上面的说明书、示例和数据提供了对示例性实施例的结构和使用的完整描述。尽管上面已经以某种程度的特殊性或者参考一个或多个单独的实施例描述了各种实施例,但是本领域技术人员可以在不脱离本说明书的范围的情况下对所公开的实施例进行多种改变。

Claims (20)

1.一种数据库系统,用于在具有存储器的主计算机系统上操作,所述数据库系统包括:
执行以使所述数据库系统能够在所述存储器中存储数据的操作系统;
查询引擎;
事务记录器;
恢复模块;以及
执行以实现数据库管理功能的组件,其中所述查询引擎和所述恢复模块与所述操作系统和执行以实现数据库管理功能的所述组件分开地在所述主计算机系统的一个或多个存储器飞地内执行,其中所述事务记录器执行以向事务日志写入事务日志条目,所述事务日志被存储在所述存储器飞地外部,每个事务日志条目表示由所述数据库系统处理的事务,其中安全计数器跟踪如下的事务日志条目的数目,该事务日志条目已经针对已提交的事务被写入所述事务日志,并且其中所述恢复模块执行以:使用所述安全计数器来验证正确数目的事务日志条目已经从所述事务日志被接收。
2.根据权利要求1所述的数据库系统,还包括存储器中存储引擎,所述存储器中存储引擎在所述存储器飞地内执行以:从以存储器中方式被存储在所述存储器飞地内的一个或多个表和/或索引读取数据,和/或向所述一个或多个表和/或索引写入数据。
3.根据权利要求1所述的数据库系统,其中所述查询引擎包括执行引擎和一个或多个预编译查询。
4.根据权利要求3所述的数据库系统,还包括访问控制模块,所述访问控制模块在所述存储器飞地内执行以:
存储属于被授权访问所述数据库系统的用户的相应公钥私钥对中的一个或多个公钥;
至少部分地基于所述一个或多个公钥私钥对,来确定发出执行预编译查询的请求的用户是否被授权使用认证方案来访问所述数据库系统;以及
响应于确定发出所述请求的所述用户未被授权访问所述数据库系统,而拒绝执行所述预编译查询的所述请求。
5.根据权利要求1所述的数据库系统,其中所述数据库系统还执行以:
响应于所述存储器飞地中的存储器飞地被创建而生成唯一标识符;
向在被创建的所述存储器飞地外部的密钥管理服务提供所述唯一标识符的表示;以及
在与客户端的任何通信中提供所述唯一标识符的表示。
6.根据权利要求1所述的数据库系统,其中所述安全计数器是第一安全计数器,并且第二安全计数器跟踪已经被截断的事务日志条目的数目,所述恢复模块执行以还基于所述第二安全计数器来验证所述正确数目的事务日志条目已经被接收。
7.根据权利要求1所述的数据库系统,其中所述安全计数器是第一安全计数器,并且第三安全计数器跟踪已经被写入所述事务日志的事务日志条目的数目,所述恢复模块执行以还基于所述第三安全计数器来验证所述正确数目的事务日志条目已经被接收。
8.根据权利要求1所述的数据库系统,其中所述安全计数器是第一安全计数器,第二安全计数器跟踪已经被截断的事务日志条目的数目,并且第三安全计数器跟踪已经被写入所述事务日志的事务日志条目的数目,所述恢复模块执行以使用接收的所述事务日志条目恢复数据库,包括忽略包括如下指示的任何事务日志条目:所述第三安全计数器的值是大于所述第一安全计数器的值或小于所述第二安全计数器的值中的至少一种。
9.根据权利要求1所述的数据库系统,其中所述安全计数器是第一安全计数器,并且第三安全计数器跟踪已经被写入所述事务日志的事务日志条目的数目,所述恢复模块执行以确定在接收的所述事务日志条目中的每个事务日志条目中被指示的所述第三安全计数器的值是否形成完整序列。
10.一种数据库系统,用于在具有存储器的主计算机系统上操作,所述数据库系统包括:
执行以使所述数据库系统能够在所述存储器中存储数据的操作系统;
事务记录器;
恢复模块;以及
执行以实现数据库管理功能的组件,其中所述恢复模块与所述操作系统和执行以实现数据库管理功能的所述组件分开地在所述主计算机系统的存储器飞地内执行,其中所述事务记录器被配置为向事务日志写入事务日志条目,所述事务日志被存储在所述存储器飞地外部,每个事务日志条目表示由所述数据库系统处理的事务,其中安全计数器跟踪如下的事务日志条目的数目,该事务日志条目已经针对已提交的事务被写入所述事务日志,并且其中所述恢复模块执行以:使用所述安全计数器来验证正确数目的事务日志条目已经从所述事务日志被接收。
11.根据权利要求10所述的数据库系统,其中所述安全计数器是第一安全计数器,并且第二安全计数器跟踪已经被截断的事务日志条目的数目,所述恢复模块执行以:还基于所述第二安全计数器来验证所述正确数目的事务日志条目已经被接收。
12.根据权利要求10所述的数据库系统,其中所述安全计数器是第一安全计数器,并且第三安全计数器跟踪已经被写入所述事务日志的事务日志条目的数目,所述恢复模块执行以还基于所述第三安全计数器来验证所述正确数目的事务日志条目已经被接收。
13.根据权利要求10所述的数据库系统,其中所述安全计数器是第一安全计数器,第二安全计数器跟踪已经被截断的事务日志条目的数目,并且第三安全计数器跟踪已经被写入所述事务日志的事务日志条目的数目,所述恢复模块执行以使用接收的所述事务日志条目恢复数据库,包括忽略包括如下指示的任何事务日志条目:所述第三安全计数器的值是大于所述第一安全计数器的值或小于所述第二安全计数器的值中的至少一种。
14.根据权利要求10所述的数据库系统,其中所述安全计数器是第一安全计数器,并且第三安全计数器跟踪已经被写入所述事务日志的事务日志条目的数目,所述恢复模块执行以确定在接收的所述事务日志条目中的每个事务日志条目中被指示的所述第三安全计数器的值是否形成完整序列。
15.一种用于与数据库系统交互的计算机实现的方法,所述方法包括:
创建与所述数据库系统上的存储器飞地的安全连接;以及
向所述存储器飞地请求飞地报价;
使用所述飞地报价验证在所述存储器飞地中运行的进程包括所述数据库系统的查询引擎和事务管理器,但是不包括所述数据库系统的操作系统或执行以实现针对所述数据库系统的数据库管理功能的组件;
响应于验证在所述存储器飞地中运行的所述进程包括所述数据库系统的查询引擎和事务管理器,但是不包括所述数据库系统的操作系统或执行以实现针对所述数据库系统的数据库管理功能的组件,经由所述安全连接向所述数据库系统发送执行查询的请求;
向事务日志写入事务日志条目,所述事务日志被存储在所述存储器飞地外部,每个事务日志条目表示由所述数据库系统处理的事务;
使用安全计数器跟踪如下的事务日志条目的数目,该事务日志条目已经针对已提交的事务被写入所述事务日志;以及
使用所述安全计数器来验证正确数目的事务日志条目已经从所述事务日志被接收。
16.根据权利要求15所述的方法,其中所述方法还包括:
从所述存储器飞地接收针对所述存储器飞地的唯一标识符的表示;以及
与密钥管理服务通信以至少部分地基于针对所述存储器飞地的所述唯一标识符的所述表示来确定所述存储器飞地是否是已经针对所述数据库系统而被创建的所述存储器飞地的最新实例。
17.根据权利要求15所述的方法,其中所述安全计数器是第一安全计数器,所述方法还包括使用第二安全计数器跟踪已经被截断的事务日志条目的数目,其中验证所述正确数目的事务日志条目已经被接收还基于所述第二安全计数器。
18.根据权利要求15所述的方法,其中所述安全计数器是第一安全计数器,所述方法还包括使用第三安全计数器跟踪已经被写入所述事务日志的事务日志条目的数目,其中验证所述正确数目的事务日志条目已经被接收还基于所述第三安全计数器。
19.根据权利要求15所述的方法,其中所述安全计数器是第一安全计数器,所述方法还包括:
使用第二安全计数器跟踪已经被截断的事务日志条目的数目;
使用第三安全计数器跟踪已经被写入所述事务日志的事务日志条目的数目;以及
使用接收的所述事务日志条目恢复数据库,包括忽略包括如下指示的任何事务日志条目:所述第三安全计数器的值是大于所述第一安全计数器的值或小于所述第二安全计数器的值中的至少一种。
20.根据权利要求15所述的方法,其中所述安全计数器是第一安全计数器,所述方法还包括:
使用第三安全计数器跟踪已经被写入所述事务日志的事务日志条目的数目;以及
确定在接收的所述事务日志条目中的每个事务日志条目中被指示的所述第三安全计数器的值是否形成完整序列。
CN201980011015.9A 2018-02-01 2019-01-25 数据库系统 Active CN111670436B (zh)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
GB1801676.6 2018-02-01
GBGB1801676.6A GB201801676D0 (en) 2018-02-01 2018-02-01 Database system
US15/955,682 US11016949B2 (en) 2018-02-01 2018-04-17 Database system
US15/955,682 2018-04-17
PCT/US2019/015046 WO2019152260A1 (en) 2018-02-01 2019-01-25 Database system

Publications (2)

Publication Number Publication Date
CN111670436A CN111670436A (zh) 2020-09-15
CN111670436B true CN111670436B (zh) 2024-03-26

Family

ID=61730973

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201980011015.9A Active CN111670436B (zh) 2018-02-01 2019-01-25 数据库系统

Country Status (5)

Country Link
US (1) US11016949B2 (zh)
EP (1) EP3746911A1 (zh)
CN (1) CN111670436B (zh)
GB (1) GB201801676D0 (zh)
WO (1) WO2019152260A1 (zh)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP3762846B1 (en) * 2018-04-11 2023-06-07 Google LLC Mutually distrusting enclaves
US10810092B2 (en) * 2018-04-23 2020-10-20 Sap Se Checkpoints for document store
US11372571B2 (en) * 2018-05-07 2022-06-28 Sap Se System and methods for providing a memory slice data structure for use with diverse memory and storage media
US11218461B2 (en) * 2018-06-29 2022-01-04 Salesforce.Com, Inc. Authenticating computing system requests with an unknown destination across tenants of a multi-tenant system
US11048816B2 (en) * 2019-04-02 2021-06-29 Sap Se Secure database utilizing dictionary encoding
US20210200858A1 (en) * 2019-12-28 2021-07-01 Intel Corporation Executing code in protected memory containers by trust domains
US11580110B2 (en) * 2019-12-31 2023-02-14 Huawei Cloud Computing Technologies Co., Ltd. Methods and apparatuses for generating redo records for cloud-based database
US11200335B2 (en) * 2020-03-05 2021-12-14 Sap Se Secure in-memory database in container
US11836244B2 (en) * 2021-02-04 2023-12-05 Nec Corporation Clone application detection mechanism for securing trusted execution environments against a malicious operating system

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101587491A (zh) * 2008-04-15 2009-11-25 Sap股份公司 使用运行时可重配置硬件的混合数据库系统
CN102436490A (zh) * 2010-10-28 2012-05-02 微软公司 多功能存储器内数据库恢复
US9584517B1 (en) * 2014-09-03 2017-02-28 Amazon Technologies, Inc. Transforms within secure execution environments

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080222111A1 (en) * 2007-03-07 2008-09-11 Oracle International Corporation Database system with dynamic database caching
US9904793B2 (en) * 2015-03-23 2018-02-27 Intel Corporation Systems, methods, and apparatus to provide private information retrieval
US9716710B2 (en) 2015-06-26 2017-07-25 Intel Corporation Technologies for virtualized access to security services provided by a converged manageability and security engine
US9678687B2 (en) 2015-09-25 2017-06-13 Mcafee, Inc. User mode heap swapping
US10754703B2 (en) 2015-12-22 2020-08-25 Mcafee, Llc Trusted computing resource meter
US10396991B2 (en) 2016-06-30 2019-08-27 Microsoft Technology Licensing, Llc Controlling verification of key-value stores
US20180096143A1 (en) * 2016-09-30 2018-04-05 Li Xiaoning Secure change log for drive analysis
US10116451B2 (en) * 2016-11-11 2018-10-30 Intel Corporation File backups using a trusted storage region
US11663205B2 (en) * 2017-05-04 2023-05-30 Salesforce, Inc. Technologies for asynchronous querying
US20190034617A1 (en) * 2017-07-31 2019-01-31 Intel Corporation Flexible container attestation
US10554634B2 (en) * 2017-08-18 2020-02-04 Intel Corporation Techniques for shared private data objects in a trusted execution environment

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101587491A (zh) * 2008-04-15 2009-11-25 Sap股份公司 使用运行时可重配置硬件的混合数据库系统
CN102436490A (zh) * 2010-10-28 2012-05-02 微软公司 多功能存储器内数据库恢复
US9584517B1 (en) * 2014-09-03 2017-02-28 Amazon Technologies, Inc. Transforms within secure execution environments

Also Published As

Publication number Publication date
WO2019152260A1 (en) 2019-08-08
CN111670436A (zh) 2020-09-15
US20190236168A1 (en) 2019-08-01
US11016949B2 (en) 2021-05-25
EP3746911A1 (en) 2020-12-09
GB201801676D0 (en) 2018-03-21

Similar Documents

Publication Publication Date Title
CN111670436B (zh) 数据库系统
US11966385B2 (en) Database transaction log writing and integrity checking
US11849045B2 (en) Controlling verification of key-value stores
US11860822B2 (en) Immutable ledger with efficient and secure data destruction, system and method
US11526487B2 (en) Database world state integrity validation
US11017113B2 (en) Database management of transaction records using secure processing enclaves
US20180219687A1 (en) Secure sharing
US7904732B2 (en) Encrypting and decrypting database records
Samaraweera et al. Security and privacy implications on database systems in big data era: A survey
US8458451B2 (en) Database outsourcing with access privacy
JP2021518705A (ja) ブロックチェーン台帳のためのランタイム自己修正
US20200117730A1 (en) Database management
Williams et al. The Blind Stone Tablet: Outsourcing Durability to Untrusted Parties.
US11941139B2 (en) Application-specific access privileges in a file system
US20210319094A1 (en) Detection of a rewind attack against a secure enclave
Brandenburger Securing Data Integrity from Cloud Storage to Blockchains

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant