安全代码执行的制作方法

文档序号:29051138发布日期:2022-02-26 00:12阅读:107来源:国知局
安全代码执行的制作方法
安全代码执行
1.相关申请的交叉引用
2.本技术要求2020年6月2日提交的美国临时专利申请第63/033,651号的优先权,其全部内容通过引用结合于此。
技术领域
3.本公开的实施例一般涉及基于网络的数据库系统或云数据平台,更具体地,涉及以安全的方式促进用户定义函数的访问和使用。
4.背景
5.基于云的数据仓库和其他数据库系统或数据平台有时支持用户定义函数,使这些系统能够执行无法通过内置的系统定义函数实现的操作。然而,为了降低安全风险,需要安全机制来确保在这样的系统上运行的用户代码保持隔离。
6.附图简述
7.从下面给出的详细描述和本公开的各种实施例的附图中,将更全面地理解本公开。
8.图1示出根据本公开一些实施例的示例计算环境,其包括与云存储平台通信的基于网络的数据仓库系统。
9.图2是示出根据本公开一些实施例的计算服务管理器的组件的框图。
10.图3是示出根据本公开一些实施例的执行平台的组件的框图。
11.图4是根据本公开的一些实施例的计算环境,其概念性地示出了由运行在执行平台的给定执行节点上的进程执行用户定义函数(udf)的示例软件架构。
12.图5是根据本公开的一些实施例的流程图,示出了在执行平台的给定执行节点上运行的进程执行用于在安全计算环境中执行用户定义函数(udf)的方法时数据库系统的操作。
13.图6是示出根据本公开的一些实施例,在执行用于确定来自用户定义函数(udf)的操作被限制在执行平台的给定执行节点的安全计算环境中的方法时,数据库系统的操作的流程图。
14.图7示出根据本公开一些实施例的以计算机系统的形式机器的示意图表示,用于使机器执行本文所讨论方法中的任何一个或更多个的指令集合可以在该计算机系统内执行。
15.详细描述
16.现在将详细参考用于实现本发明主题的具体示例实施例。这些具体实施例的示例在附图中示出,并且具体细节在以下描述中阐述,以便提供对主题的透彻理解。应当理解,这些示例并不旨在将权利要求的范围限制于所示的实施例。相反,它们旨在覆盖可能包含在本公开范围内的替代、修改和等同物。
17.在计算机安全中,沙箱(sandbox)(例如,沙箱环境)是一种用于分离运行程序的安全机制,通常是为了减轻系统故障或软件漏洞的传播。沙箱可用于执行未经测试或不可信
的程序或代码(可能来自未经验证或不可信的第三方、供应商、用户或网站),而不会有损害主机或操作系统的风险。沙箱可以为来宾程序(guset program)运行提供一组严格控制的资源,例如存储装置和存储器暂存空间。网络访问,检查主机系统或从输入设备读取的能力可能被禁止或限制。
18.数据库系统中沙箱环境的现有方法可能无法在给定用户定义函数(udf)中的代码执行期间充分提供安全机制。因此,这种方法使数据库系统更容易受到系统完整性的破坏。此外,恶意行为者执行任意代码会导致此类数据库系统使用的存储器和数据受到损害。在一个示例中,恶意代码可能能够通过不正确或配置不充分的沙箱环境来成功规避安全措施,沙箱环境可能仅提供单层安全性。在另一个示例中,这样的数据库系统可以不完全利用沙箱环境,而是利用依赖于(单一的)特定系统组件(例如,安全管理器)来实施的安全策略(例如,配置文件或一组自组织规则)。
19.本公开的各方面解决了通过利用基于沙箱(例如,沙箱环境)的安全机制来为执行用户代码提供安全性的上述和其他不足。更具体地,这里描述的实施例可以有利地实现用于在(例如,由这里进一步描述的基于网络的数据库系统提供的)多租户系统中执行用户定义函数(udf)的多层沙箱环境。如本文所述,udf包括由用户提供的任意代码,其在一些示例中执行计算操作或调用与数据库查询相关的(例如,基于代码的)函数。
20.图1示出了根据本公开的一些实施例的示例计算环境100,其包括基于网络的数据仓库系统102的示例形式的数据库系统。为了避免用不必要的细节模糊本发明主题,图1中省略了与传达对本发明主题的理解不密切相关的各种功能组件。然而,本领域技术人员将容易认识到,各种附加功能组件可以被包括作为计算环境100的一部分,以促进本文没有具体描述的附加功能。在其他实施例中,计算环境可以包括另一种类型的基于网络的数据库系统或云数据平台。
21.如图所示,计算环境100包括与云存储平台104(例如,microsoft azure blob或google cloud storage)和云凭证存储提供商106通信的基于网络的数据仓库系统102。基于网络的数据仓库系统102是基于网络的系统,用于报告和分析来自包括云存储平台104内的一个或更多个存储位置的一个或更多个不同源的集成数据。云存储平台104包括多个计算机器,并向基于网络的数据仓库系统102按需提供计算机系统资源,如数据存储和计算能力。
22.基于网络的数据仓库系统102包括计算服务管理器108、执行平台110和一个或更多个元数据数据库112。基于网络的数据仓库系统102托管并向多个客户端账户提供数据报告和分析服务。
23.计算服务管理器108协调和管理基于网络的数据仓库系统102的操作。计算服务管理器108还执行查询优化和编译,以及管理提供计算资源的计算服务的集群(也称为“虚拟仓库”)。计算服务管理器108可以支持任意数量的客户端账户,如提供数据存储和检索请求的终端用户、管理本文描述的系统和方法的系统管理员以及与计算服务管理器108交互的其他组件/设备。
24.计算服务管理器108还与客户端设备114通信。客户端设备114对应于由基于网络的数据仓库系统102支持的多个客户端账户之一的用户。用户可以利用客户端设备114向计
算服务管理器108提交数据存储、检索和分析请求。
25.计算服务管理器108还耦合到一个或更多个元数据数据库112,元数据数据库112存储与基于网络的数据仓库系统102及其用户相关联的各种函数和方面相关的元数据。例如,元数据数据库112可以包括存储在远程数据存储系统中的数据以及可从本地高速缓存获得的数据的概要。另外,元数据数据库112可以包括关于数据如何在远程数据存储系统(例如,云存储平台104)和本地高速缓存中组织的信息。由元数据数据库112存储的信息允许系统和服务确定是否需要在不从存储设备加载或访问实际数据的情况下访问一段数据。
26.作为另一个示例,元数据数据库112可以存储一个或更多个凭证对象115。通常,凭证对象115指示要从远程凭证储存器中检索的一个或更多个安全凭证。例如,凭证存储提供商106维护多个远程凭证储存器118-1至118-n。远程凭证储存器118-1至118-n中的每一个可以与用户账户相关联,并且可以用于存储与用户账户相关联的安全凭证。凭证对象115可以指示要由计算服务管理器108从远程凭证储存器118-1至118-n之一检索的一个或更多个安全凭证(例如,用于访问由存储平台104存储的数据)。
27.计算服务管理器108还耦合到执行平台110,执行平台110提供执行各种数据存储和数据检索任务的多个计算资源。执行平台110耦合到存储平台104的云存储平台104。存储平台104包括多个数据存储设备120-1至120-n。在一些实施例中,数据存储设备120-1至120-n是位于一个或更多个地理位置的基于云的存储设备。例如,数据存储设备120-1至120-n可以是公共云基础设施或私有云基础设施的一部分。数据存储设备120-1至120-n可以包括硬盘驱动(hdd)、固态驱动(ssd)、存储集群、亚马孙(amazon)s3tm存储系统或任何其它数据存储技术。另外,云存储平台104可以包括分布式文件系统(诸如,hadoop分布式文件系统(hdfs))、对象存储系统等。
28.执行平台110包括多个计算节点。计算节点上的进程集合执行由计算服务管理器108编译的查询计划。进程集合可以包括:执行查询计划的第一进程;使用最近最少使用(least recently used,lru)策略来监视和删除缓存文件,并实现内存不足(oom)错误缓解进程的第二进程;从进程日志和状态提取健康信息以发送回计算服务管理器108的第三进程;在系统引导(boot)之后建立与计算服务管理器108的通信的第四进程;以及第五进程,该第五进程处理与由计算服务管理器108提供的给定作业的计算集群的所有通信,并将信息传送回计算服务管理器108和执行平台110的其他计算节点。
29.在一些实施例中,计算环境100的元件之间的通信链路经由一个或更多个数据通信网络来实现。这些数据通信网络可以利用任何通信协议和任何类型的通信介质。在一些实施例中,数据通信网络是彼此耦合的两个或更多个数据通信网络(或子网络)的组合。在替代实施例中,使用任何类型的通信介质和任何通信协议来实现这些通信链路。
30.计算服务管理器108、元数据数据库112、执行平台110和存储平台104在图1中示为单个的分立组件。然而,计算服务管理器108、元数据数据库112、执行平台110和存储平台104中的每一个都可以被实现为分布式系统(例如,分布在多个地理位置处的多个系统/平台上)。另外,计算服务管理器108、元数据数据库112、执行平台110和存储平台104中的每一个可以根据所接收请求的变化和基于网络的数据仓库系统102的变化的需求而(彼此独立地)使其规模放大或缩小。因此,在所描述的实施例中,基于网络的数据仓库系统102是动态的,并且支持频繁变化以满足当前的数据处理需求。
31.在典型操作期间,基于网络的数据仓库系统102处理由计算服务管理器108确定的多个作业。这些作业由计算服务管理器108调度和管理,以确定何时以及如何执行该作业。例如,计算服务管理器108可以将作业划分为多个离散任务,并且可以确定需要什么数据来执行多个离散任务中的每个离散任务。计算服务管理器108可以将多个离散任务中的每个离散任务分配给执行平台110的一个或更多个节点以处理任务。计算服务管理器108可以确定需要哪些数据来处理任务,并且进一步确定执行平台110内的哪些节点最适合于处理该任务。一些节点可能已经高速缓存了处理任务所需的数据,因此是用于处理任务的不错的候选者。存储在元数据数据库112中的元数据帮助计算服务管理器108确定执行平台110中的哪些节点已经高速缓存了处理该任务所需的至少一部分数据。执行平台110中的一个或更多个节点使用由节点高速缓存的数据以及必要时从云存储平台104检索到的数据来处理任务。期望从执行平台110内的高速缓存中检索尽可能多的数据,因为检索速度通常比从云存储平台104中检索数据快得多。
32.如图1所示,计算环境100将执行平台110与存储平台104分开。在这种布置中,执行平台110中的处理资源和高速缓存资源独立于云存储平台104中的数据存储设备120-1至120-n进行操作。因此,计算资源和高速缓存资源不限于具体的数据存储设备120-1至120-n。相反,所有计算资源和所有高速缓存资源可以从云存储平台104中的任何数据存储资源检索数据,以及将数据存储到其中。
33.图2是示出根据本公开一些实施例的计算服务管理器108的组件的框图。如图2所示,计算服务管理器108包括耦合到访问元数据数据库206的访问管理器202和凭证管理系统204,访问元数据数据库206是元数据数据库112的示例。访问管理器202处理针对本文描述的系统的认证和授权任务。凭证管理系统204便于使用远程存储的凭证(例如,存储在远程凭证储存器118-1至118-n之一中的凭证)来访问外部资源,例如远程存储设备中的数据资源。如本文所用,远程存储设备也可以被称为“永久存储设备”或“共享存储设备”。例如,凭证管理系统204可以(例如,在访问元数据数据库206中)创建和维护远程凭证存储定义和凭证对象。远程凭证存储定义标识远程凭证储存器(例如,远程凭证储存器118-1至118-n中的一个或更多个),并且包括从远程凭证储存器访问安全凭证的访问信息。凭证对象使用非敏感信息(例如,文本字符串)来标识一个或更多个安全凭证,这些信息将从远程凭证储存器中检索以用于访问外部资源。当在运行时接收到调用外部资源的请求时,凭证管理系统204和访问管理器202使用存储在访问元数据数据库206中的信息(例如,凭证对象和凭证存储定义)来从远程凭证储存器中检索用于访问外部资源的安全凭证。
34.请求处理服务208管理接收到的数据存储请求和数据检索请求(例如,将对数据库数据执行的作业)。例如,请求处理服务208可以确定用于处理接收到的查询(例如,数据存储请求或数据检索请求)的数据。数据可以存储在执行平台110内的高速缓存中,或者存储在存储平台104中的数据存储设备中。
35.管理控制台服务210支持管理员和其他系统管理员对各种系统和进程的访问。另外,管理控制台服务210可以接收执行作业并监视系统上的工作负荷的请求。
36.计算服务管理器108还包括作业编译器212、作业优化器214和作业执行器216。作业编译器212将作业解析为多个离散任务,并为多个离散任务中的每个离散任务生成执行代码。作业优化器214基于需要处理的数据来确定执行多个离散任务的最佳方法。作业优化
器214还处理各种数据修剪操作和其他数据优化技术,以提高执行作业的速度和效率。作业执行器216执行从队列接收的或由计算服务管理器108确定的作业的执行代码。
37.作业调度器和协调器218将接收到的作业发送到适当的服务或系统,以进行编译、优化并分派到执行平台110。例如,作业可以进行优先级排序然后按优先级顺序进行处理。在实施例中,作业调度器和协调器218确定由计算服务管理器108调度的内部作业与其他“外部”作业(诸如可以由数据库中的其他系统调度但可以利用执行平台110中的相同处理资源的用户查询)的优先级。在一些实施例中,作业调度器和协调器218识别或分配执行平台110中的特定节点以处理特定任务。虚拟仓库管理器220管理在执行平台110中实现的多个虚拟仓库的操作。例如,虚拟仓库管理器220可以生成用于执行接收到的查询的查询计划。
38.另外,计算服务管理器108包括配置和元数据管理器222,其管理与存储在远程数据存储设备和本地缓冲器(例如,执行平台110中的缓冲器)中的数据相关的信息。配置和元数据管理器222使用元数据来确定需要访问哪些数据文件来检索用于处理特定任务或作业的数据。监视器和工作负载分析器224监管由计算服务管理器108执行的进程,并管理任务(例如,工作负载)在执行平台110中的执行节点和虚拟仓库之间的分配。监视器和工作负载分析器224还根据需要,基于整个基于网络的数据仓库系统102中不断变化的工作负载来重新分配任务,并且还可以基于也可以由执行平台110处理的用户(例如,“外部”)查询工作负载来重新分配任务。配置和元数据管理器222以及监视器和工作负荷分析器224耦合到数据存储设备226。图2中的数据存储设备226表示基于网络的数据仓库系统102中的任何数据存储设备。例如,数据存储设备226可以表示执行平台110中的缓冲器、存储平台104中的存储设备或任何其他存储设备。
39.如本文实施例中所述,计算服务管理器108验证来自执行平台(例如,执行平台110)的所有通信,以验证该通信的内容和上下文与已知分配给执行平台的任务一致。例如,执行查询a的执行平台的实例不应被允许请求访问与查询a无关的数据源d(例如,数据存储设备226)。类似地,给定的执行节点(例如,执行节点302-1)可能需要与另一个执行节点(例如,执行节点302-2)通信,并且应该被禁止与第三执行节点(例如,执行节点312-1)通信,并且可以(例如,在日志或其他位置中)记录任何这样的非法通信。此外,存储在给定执行节点上的信息仅限于与当前查询相关的数据,任何其他数据都不可用,在密钥不可用的情况下,通过销毁或加密来实现。
40.图3是示出根据本公开一些实施例的执行平台110的组件的框图。如图3所示,执行平台110包括多个虚拟仓库,其包括虚拟仓库1、虚拟仓库2和虚拟仓库n。每个虚拟仓库都包括多个执行节点,每个执行节点都包括一个数据高速缓存和一个处理器。虚拟仓库可以通过使用多个执行节点并行执行多个任务。如本文所讨论的,执行平台110可以基于系统和用户的当前处理需求实时添加新的虚拟仓库和删除现有的虚拟仓库。这种灵活性允许执行平台110在需要时快速部署大量计算资源,而不必在不再需要它们时继续为那些计算资源付出代价。所有虚拟仓库都可以访问任何数据存储设备(例如,云存储平台104中的任何存储设备)中的数据。
41.尽管图3中所示的每个虚拟仓库包括三个执行节点,但是特定的虚拟仓库可以包括任意数量的执行节点。此外,虚拟仓库中执行节点的数量是动态的,使得在存在额外需求
时创建新的执行节点,并在不再需要现有执行节点时将其删除。
42.每个虚拟仓库能够访问图1中所示的数据存储设备120-1至120-n中的任何一个。因此,虚拟仓库不必被分配给特定的数据存储设备120-1至120-n,而是可以从云存储平台104内的数据存储设备120-1至120-n中的任何一个访问数据。类似地,图3中所示的每个执行节点可以从数据存储设备120-1至120-n中的任何一个访问数据。在一些实施例中,特定的虚拟仓库或特定的执行节点可以被临时分配给具体的数据存储设备,但是该虚拟仓库或执行节点稍后可以从任何其他数据存储设备访问数据。
43.在图3的示例中,虚拟仓库1包括三个执行节点302-1、302-2和302-n。执行节点302-1包括高速缓存304-1和处理器306-1。执行节点302-2包括高速缓存304-2和处理器306-2。执行节点302-n包括高速缓存304-n和处理器306-n。每个执行节点302-1、302-2和302-n与处理一个或更多个数据存储和/或数据检索任务相关联。例如,虚拟仓库可以处理与内部服务(诸如,聚类服务、实例化视图刷新服务、文件压缩服务、存储程序服务或文件升级服务)相关联的数据存储和数据检索任务。在其他实现中,特定虚拟仓库可以处理与特定数据存储系统或特定类别的数据相关联的数据存储和数据检索任务。
44.类似于上面讨论的虚拟仓库1,虚拟仓库2包括三个执行节点312-1、312-2和312-n。执行节点312-1包括高速缓存314-1和处理器316-1。执行节点312-2包括高速缓存314-2和处理器316-2。执行节点312-n包括高速缓存314-n和处理器316-n。另外,虚拟仓库3包括三个执行节点322-1、322-2和322-n。执行节点322-1包括高速缓存324-1和处理器326-1。执行节点322-2包括高速缓存324-2和处理器326-2。执行节点322-n包括高速缓存324-n和处理器326-n。
45.在一些实施例中,图3所示的执行节点相对于由执行节点高速缓存的数据是无状态的。例如,这些执行节点不存储或以其他方式维护关于执行节点或由特定执行节点高速缓存的数据的状态信息。因此,在执行节点发生故障的情况下,可以用另一个节点透明地替换发生故障的节点。由于没有与发生故障的执行节点相关联的状态信息,因此新的(替换)执行节点可以轻松替换发生故障的节点,而无需考虑重新创建特定状态。
46.尽管图3中所示的执行节点包括一个数据高速缓存和一个处理器,但是替代实施例可以包括包含任意数量的处理器和任意数量的高速缓存的执行节点。另外,高速缓存的大小在不同执行节点之间可能有所不同。图3中所示的高速缓存在本地执行节点中存储从云存储平台104中的一个或更多个数据存储设备检索到的数据。因此,高速缓存减小或消除了在从远程存储系统中不断检索数据的平台中出现的瓶颈问题。本文描述的系统和方法不是从远程存储设备重复访问数据,而是从执行节点中的高速缓存访问数据,这明显更快并且避免了上面讨论的瓶颈问题。在一些实施例中,使用提供对高速缓存的数据的快速访问的高速存储器设备来实现高速缓存。每个高速缓存可以存储来自云存储平台104中的任何存储设备的数据。
47.此外,高速缓存资源和计算资源可以在不同的执行节点之间变化。例如,一个执行节点可包含大量的计算资源和最少的高速缓存资源,从而使该执行节点可用于需要大量计算资源的任务。另一个执行节点可包含大量的高速缓存资源和最少的计算资源,从而使该执行节点可用于需要高速缓存大量数据的任务。又一个执行节点可包含提供更快的输入-输出操作的高速缓存资源,这对于需要快速扫描大量数据的任务很有用。在一些实施例中,
基于执行节点将要执行的预期任务,在创建执行节点时确定与特定执行节点相关联的高速缓存资源和计算资源。
48.另外,与特定执行节点相关联的高速缓存资源和计算资源可以基于由执行节点执行的改变的任务而随时间改变。例如,如果执行节点执行的任务变得更加处理器密集,则可以为执行节点分配更多的处理资源。类似地,如果执行节点执行的任务需要更大的高速缓存容量,则可以为执行节点分配更多的高速缓存资源。
49.尽管虚拟仓库1、2和n与同一执行平台110相关联,但是可以使用在多个地理位置处的多个计算系统来实现虚拟仓库。例如,虚拟仓库1可以由第一地理位置处的计算系统来实现,而虚拟仓库2和n由第二地理位置处的另一计算系统来实现。在一些实施例中,这些不同的计算系统是由一个或更多个不同的实体维护的基于云的计算系统。
50.另外,每个虚拟仓库在图3中被示为具有多个执行节点。可以使用位于多个地理位置处的多个计算系统来实现与每个虚拟仓库相关联的多个执行节点。例如,虚拟仓库1的实例在一个地理位置处的一个计算平台上实现执行节点302-1和302-2,并且在另一个地理位置处的不同计算平台上实现执行节点302-n。选择特定的计算系统以实现执行节点可以取决于各种因素,诸如特定的执行节点所需的资源水平(例如,处理资源要求和高速缓存要求)、特定计算系统处可用的资源、地理位置内或地理位置之间的网络的通信能力以及哪些计算系统已在虚拟仓库中实现其他执行节点。
51.执行平台110也是容错的。例如,如果一个虚拟仓库发生故障,那么该虚拟仓库将很快被位于不同地理位置处的不同虚拟仓库替换。
52.特定执行平台110可以包括任意数量的虚拟仓库。另外,特定执行平台中虚拟仓库的数量是动态的,使得在需要附加的处理和/或高速缓存资源时创建新的虚拟仓库。类似地,当不再需要与虚拟仓库关联的资源时,可以删除现有的虚拟仓库。
53.在一些实施例中,虚拟仓库可以在云存储平台104中的相同数据上操作,但是每个虚拟仓库具有其自己的具有独立处理和高速缓存资源的执行节点。此配置允许对不同虚拟仓库上的请求进行独立处理,并且请求之间不会相互干扰。这种独立的处理与动态添加和移除虚拟仓库的能力相结合,支持为新用户添加新的处理能力,而不会影响现有用户观察到的性能。
54.图4是根据本公开的一些实施例的计算环境400,其概念性地示出了由运行在执行平台110的给定执行节点上的进程执行用户定义函数(udf)的示例软件架构。
55.如图所示,来自执行平台110的执行节点302-1包括执行节点进程410,在一个实施例中,执行节点进程410在处理器306-1上运行,并且还可以利用来自高速缓存304-1(或另一个存储器设备或存储装置)的存储器。如本文所述,“进程”或“计算进程”可以指由执行节点或执行平台的一个或更多个线程执行的计算机程序的实例。
56.如前所述,计算服务管理器108验证来自执行平台110的所有通信,以验证该通信的内容和上下文与已知分配给执行平台110的任务一致。例如,执行查询a的执行平台110不被允许请求访问与查询a无关的特定数据源(例如,数据存储设备226或云存储平台104中的任何一个存储设备)。在一个示例中,执行节点302-1可能需要与第二执行节点(例如,执行节点302-2)通信,但是这里描述的安全机制可以不允许与第三执行节点(例如,执行节点312-1)通信。此外,可以(例如,在日志444或其他位置)记录任何这样的非法通信。此外,存
储在给定执行节点上的信息被限制为与当前查询相关的数据,并且在密钥不可用的情况下,通过销毁或加密,任何其他数据是不能使用的。
57.在图4的示例中,执行节点进程410正在执行udf客户端412。在一个实施例中,udf客户端412被实现为支持用诸如java等特定编程语言编写的udf。在一个实施例中,udf客户端412以与用户代码430不同的编程语言(例如,c或c++)实现,这可以通过使用不同的代码库(例如,没有相同或更少潜在安全漏洞的代码库)来进一步提高计算环境400的安全性。
58.用户代码430可以作为包被提供,例如以jar(java归档)文件的形式,其包括一个或更多个udf的代码。在一个实施例中,服务器实现代码432是jar文件,其启动负责从执行节点进程410接收请求、分配工作线程来执行用户代码、返回结果以及其他类型的服务器任务的服务器。
59.在一个实现中,来自udf(例如,基于java的udf)的操作可以由在沙箱进程420内执行的用户代码运行时(user code runtime)424来执行(下面进一步描述)。在一个实施例中,用户代码运行时424被实现为虚拟机,例如java虚拟机(jvm)。由于用户代码运行时424有利地在相对于执行节点进程410的单独进程中执行,因此操纵执行节点进程410的风险较低。除了其他类型的信息或消息之外,执行操作的结果可以存储在日志444中以供查看和检索。在一个实施例中,日志444可以本地存储在执行节点302-1的存储器中,或者存储在诸如存储平台104的单独位置。此外,可以利用进一步提供了数据传输的认证和加密的高性能协议(例如,没有数据的串行化(serialization)或去串行化,没有存储器副本;对记录批次进行操作,而不必访问单独的列、记录或单元格;利用有效的远程过程调用技术和用于数据传输的网络协议)进行数据传输(例如,分布式数据集),来将这样的结果从用户代码运行时424返回给udf客户端412。在一个实施例中,udf客户端412使用支持用户代码运行时424之间的柱状数据(columnar data)的网络传输的数据传送机制(反之亦然),具有上述优点。
60.在一个示例中,安全管理器422可以通过抛出异常(例如,如果操作不被允许)来阻止来自给定udf的操作的完成,或者如果操作被允许则返回(例如,什么也不做)。在一个实现中,安全管理器422被实现为java安全管理器对象,其允许应用实现诸如安全管理器策略442的安全策略,并且使得应用能够在执行可能不安全或敏感的操作之前,确定该操作是什么以及是否正在允许该操作被执行的安全上下文中尝试该操作。安全管理器策略442可以被实现为具有用户代码运行时424被授予的权限的文件。因此,应用(例如,由用户代码运行时424执行的udf)可以至少部分地基于安全策略来允许或不允许该操作。
61.在一个实施例中,沙箱进程420是执行节点进程410的子进程(或单独的进程)。在一个实施例中,子进程(sub-process)是指给定父进程(例如,在该示例中,执行节点进程410)的子进程(child process)。在一个示例中,沙箱进程420是通过使用诸如名称空间和安全计算模式的安全机制(例如,对正在执行的进程及其所有后代使用系统调用过滤器,从而减少对给定操作系统的内核的攻击面)来限制不可信应用的运行环境来降低安全漏洞风险的程序。此外,在一个示例中,与执行节点进程410相比,沙箱进程420是轻量级进程,并且被优化(例如,紧密耦合到给定操作系统内核的安全机制)以在沙箱环境中以安全的方式处理数据库查询。
62.在一个实施例中,沙箱进程420可以利用虚拟网络连接来与主题系统内的其他组件通信。可以针对主题系统的其他组件为虚拟网络连接配置一组特定的规则。例如,可以为
特定udf配置虚拟网络连接的这种规则,以限制由udf执行的操作可访问的位置(例如,互联网上的特定站点或udf可以通信的组件)。因此,在这个示例中,udf可以被拒绝访问互联网上的特定网络位置或站点。
63.沙箱进程420可以被理解为为沙箱内的进程(或多个进程)提供受约束的计算环境,其中这些受约束的进程可以被控制和限制以限制对某些计算资源的访问。
64.安全机制的示例可以包括名称空间的实现,其中在沙箱环境中执行的每个相应的进程组可以访问另一个进程组(其可以访问前一个进程组不可访问的不同的资源组)不可访问的相应的计算资源(例如,进程id、主机名、用户id、文件名、与网络访问和进程间通信相关联的名称)、其他容器实现等。通过使沙箱进程420作为执行节点进程410的子进程来执行,在一些实施例中,与可以单独利用虚拟机解决方案的其他技术相比,处理给定数据库查询的等待时间可以被显著减少(例如,在一些情况下,等待时间减少为10分之一)。
65.如进一步所示,沙箱进程420可以利用沙箱策略440来实施给定的安全策略。沙箱策略440可以是具有与沙箱进程420的配置相关的信息以及关于访问和利用系统资源的限制(如果有的话)和权限的细节的文件。示例限制可以包括对网络访问或文件系统访问的限制(例如,重新映射文件系统以将文件放置在可能不可访问的不同位置,其他文件可以安装在不同位置,等等)。沙箱进程420限制用户代码运行时424的存储器和处理器(例如cpu)的使用,确保同一执行节点上的其他操作可以执行而不会耗尽资源。
66.如上所述,沙箱进程420是执行节点进程410的子进程(或独立进程),这实际上意味着沙箱进程420驻留在与执行节点进程410不同的独立存储器空间中。在与沙箱进程420相关的安全漏洞(例如,来自给定udf的错误或恶意代码)发生时,如果任意存储器被恶意行为者访问,则由执行节点进程存储的数据或信息受到保护。
67.尽管图4的以上讨论描述了使用java(例如,面向对象编程语言)实现的组件,但是应当理解,计算环境400支持其他编程语言(例如,解释编程语言)。在一个实施例中,支持python在计算环境400中实现和执行udf。在该示例中,用户代码运行时424可以用python解释器代替,用于在沙箱进程420内执行来自udf(例如,用python编写的)的操作。
68.图5是根据本公开的一些实施例的流程图,示出了在执行平台110的给定执行节点上运行的进程执行用于在安全计算环境中执行用户定义函数(udf)的方法时数据库系统的操作。方法500可以体现为由一个或更多个硬件组件(例如,一个或更多个处理器)执行的计算机可读指令,使得方法500的操作可以由基于网络的数据仓库系统102的组件(例如执行平台110的组件)来执行。相应地,方法500在下面通过参考其示例来描述。然而,应当理解,方法500可以部署在各种其他硬件配置上,并且不旨在限于部署在基于网络的数据仓库系统102内。
69.在操作502,执行节点302-1在第一计算进程(例如,执行节点进程410)中接收用户定义函数(例如,用户代码430),用户定义函数包括与要执行的至少一个操作相关的代码。例如,用户定义函数包括要执行的操作的代码。
70.在操作504,执行节点302-1将至少部分基于至少一个操作的请求发送到第二计算进程(例如,沙箱进程420)来执行,第二计算进程不同于第一计算进程并且包括用于执行该至少一个操作的沙箱,第一计算进程和第二计算进程在执行平台(例如执行平台110)的相同执行节点上执行。可选地,第一计算进程和第二计算进程可以在执行平台的不同执行节
点中执行,因为可以理解,这里描述的实施例不一定限制进程在同一执行节点上执行。在一个实施例中,udf客户端(例如,udf客户端412)可以将请求直接发送到在第二计算进程(例如,沙箱进程420)中执行的虚拟机(例如,用户代码运行时424)。
71.在操作506,执行节点302-1通过第二计算进程接收请求。在一个示例中,第二计算进程可以将请求转发给虚拟机(例如,用户代码运行时424)进行处理。在一个实施例中,该请求从在第一计算进程(例如,执行节点进程410)中执行的udf客户端直接发送到虚拟机。
72.在操作508,执行节点302-1至少使用安全策略(例如,安全管理器策略442)来确定是否允许执行至少一个操作。在一个实施例中,安全管理器422使用安全策略,可以确定该操作是否被允许。替代地或联合地,第二进程(例如,沙箱进程420,使用沙箱策略(例如,沙箱策略440))可以确定该操作是否被允许。在一个实现中,执行/运行该操作,并且随后执行节点302-1确定该操作根据安全策略和/或沙箱策略是否被允许。在给定策略不允许至少一部分操作的示例中,执行节点302-1可以停止或中止正在进行的操作的完成,或者如果操作已经完成,则执行步骤以恢复操作。以这种方式,沙箱进程420可以基于安全管理器策略442和沙箱策略440来提供多层安全性。
73.在操作510,执行节点302-1响应于该至少一个操作被允许,在第二计算进程中执行该操作。或者,如前所述,如果基于安全策略确定操作不被允许,则可以返回异常(例如,错误通知或以编程方式确定的错误消息等)。
74.在操作512,执行节点302-1通过第二计算进程向第一计算进程(例如,执行节点进程410)发送至少一个操作的结果。在一个实施例中,在沙箱进程(例如,对应于沙箱进程420的第二计算进程)中执行的虚拟机(例如,用户代码运行时424)可以将操作结果直接返回给第一计算进程(例如,执行节点进程410)中的udf客户端。该结果然后由第一计算进程接收(例如,用于附加处理)。
75.图6是示出根据本公开的一些实施例,在执行用于确定来自用户定义函数(udf)的操作被限制在执行平台110的给定执行节点的安全计算环境中的方法时,数据库系统的操作的流程图。方法600可以体现为由一个或更多个硬件组件(例如,一个或更多个处理器)执行的计算机可读指令,使得方法600的操作可以由基于网络的数据仓库系统102的组件(例如执行平台110的组件)来执行。相应地,方法600在下面通过参考其示例来描述。然而,应当理解,方法600可以部署在各种其他硬件配置上,并且不旨在限于部署在基于网络的数据仓库系统102内。
76.在操作602,沙箱进程420从客户端(例如,udf客户端412)接收请求,以执行与数据库查询相关的至少一个操作,例如执行与运行给定udf相关的操作的函数调用。在一个实施例中,用户代码运行时424最初可能已经直接接收到执行该操作的请求,然后该请求被发送到沙箱进程以确定根据沙箱策略440是否允许该操作。
77.在一个示例中,即使当安全管理器422执行初始安全检查时基于安全管理器策略442允许该操作,也可以理解,沙箱进程提供了另一层安全机制(例如,当使用沙箱策略440中定义的安全配置时)。如前所述,如先前在图4中讨论的主题系统有利地利用这种多层方法来实现沙箱进程420的整体安全特征,从而也向执行节点进程在执行节点302-1上执行的存储器空间提供安全益处和保护。
78.在操作604,沙箱进程420至少使用沙箱策略440来确定所请求的操作被限制。如前
所述,沙箱策略440可以包括对udf可访问的网络位置(或文件)的限制。
79.在操作606,沙箱进程420向客户端(例如,udf客户端412)提供所请求的至少一个操作被限制的指示。在一个示例中,该指示是发送给客户端的通知的形式,该通知指示根据沙箱策略440,所请求的操作不被允许。以这种方式,通知客户端由于沙箱策略440中的限制而没有执行操作。
80.根据示例实施例,图7以计算机系统的形式示出了机器700的示意图表示,用于使机器700执行本文所讨论方法中的任何一个或更多个的指令集合可以在该计算机系统内执行。具体地,图7以计算机系统的示例形式示出了机器700的示意图表示,用于使机器700执行本文所讨论方法中的任何一个或更多个的指令716(例如,软件、程序、应用、小程序、小应用(app)或其他可执行代码)在该计算机系统内执行。例如,指令716可以使机器700执行方法500和方法600的任何一个或更多个操作。作为另一个示例,指令716可以使机器700实现至少在图4中示出的数据流的部分。以这种方式,指令716将通用的、未编程的机器转换成特定的机器700(例如,计算服务管理器108或执行平台110中的节点),该特定的机器700被特别配置成以这里描述的方式执行所描述和示出的功能中的任何一个。
81.在替代实施例中,机器700作为独立的设备操作或者可以耦合(例如,联网)到其它机器。在联网部署中,机器700可以在服务器-客户端网络环境中作为服务器机器或客户端机器来操作,或者作为对等(或分布式)网络环境中的对等机器来操作。机器700可以包括但不限于服务器计算机、客户端计算机、个人计算机(pc)、平板计算机、膝上型计算机、上网本(netbook)、智能电话、移动设备、网络路由器、网络交换机、网络桥接器或能够顺序地或以其它方式执行指令716的任何机器,指令716指定由机器700采取的动作(action)。此外,虽然仅示出了单个机器700,但术语“机器”还应被理解为包括单独或联合地执行指令716以实施本文所讨论方法中的任何一个或更多个的机器700的集合。
82.机器700包括处理器710、存储器730和输入/输出(i/o)组件750,它们被配置成例如经由总线702彼此通信。在示例实施例中,处理器710(例如,中央处理单元(cpu)、精简指令集计算(risc)处理器、复杂指令集计算(cisc)处理器、图形处理单元(gpu)、数字信号处理器(dsp)、专用集成电路(asic)、射频集成电路(rfic)、另一处理器或其任何合适的组合)可以包括例如可以执行指令716的处理器712和处理器714。术语“处理器”旨在包括多核处理器710,多核处理器710可以包括可以同时执行指令716的两个或更多个独立处理器(有时称为“核”)。尽管图7示出了多个处理器710,但是机器700可以包括具有单核的单个处理器、具有多核的单个处理器(例如,多核处理器)、具有单核的多个处理器、具有多核的多个处理器或者它们的任意组合。
83.存储器730可以包括主存储器732、静态存储器734和存储单元736,它们都可以由处理器710例如经由总线702访问。主存储器732、静态存储器734和存储单元736存储指令716,指令716体现本文描述的方法或功能中任何一种或更多种。在由机器700执行期间,指令716也可以全部或部分地驻留在主存储器732内、静态存储器734内、存储单元736的机器存储介质738内、至少一个处理器710内(例如,在处理器的高速缓冲存储器内)或其任何合适的组合内。
84.i/o组件750包括用于接收输入、提供输出、产生输出、传输信息、交换信息、捕获测量值等的组件。包含在特定机器700中的具体的i/o组件750将取决于机器的类型。例如,诸
如移动电话的便携式机器将可能包括触摸输入设备或其他这样的输入机制,而无头服务器机器可能不包括这样的触摸输入设备。将认识到的是,i/o组件750可以包括图7中未示出的许多其他组件。i/o组件750根据功能进行分组仅仅是为了简化下面的讨论,并且该分组决不是限制性的。在各种示例实施例中,i/o组件750可以包括输出组件752和输入组件754。输出组件752可以包括视觉组件(例如,诸如等离子体显示面板(pdp)、发光二极管(led)显示器、液晶显示器(lcd)、投影仪或阴极射线管(crt)的显示器)、声学组件(例如,扬声器)、其他信号发生器等。输入组件754可以包括字母数字输入组件(例如,键盘、被配置成接收字母数字输入的触摸屏、光电键盘或其他字母数字输入组件)、基于点的输入组件(例如,鼠标、触控板、轨迹球、操纵杆、运动传感器或另一指向仪器)、触觉输入组件(例如,物理按钮、提供触摸或触摸手势的位置和/或力的触摸屏或其他触觉输入组件)、音频输入组件(例如,麦克风)等。
85.通信可以使用多种技术来实现。i/o组件750可以包括通信组件764,通信组件764可操作来分别经由耦合782和耦合772将机器700耦合到网络780或设备770。例如,通信组件764可以包括网络接口组件或与网络780接口的另一合适的设备。在进一步的示例中,通信组件764可以包括有线通信组件、无线通信组件、蜂窝通信组件和经由其他模态提供通信的其他通信组件。设备770可以是另一台机器或多种外围设备中的任一种(例如,经由通用串行总线(usb)耦合的外围设备)。例如,如上所述,机器700可以对应于计算服务管理器108或执行平台110中的任何一个,并且设备770可以包括客户端设备114或这里描述为与基于网络的数据仓库系统102或云存储平台104通信的任何其他计算设备。
86.可执行指令和机器存储介质
87.各种存储器(例如,730、732、734和/或处理器710和/或存储单元736的存储器)可以存储指令716和数据结构(例如,软件)的一个或更多个集合,这些指令716和数据结构体现本文所描述方法或功能中的任何一种或更多种或被本文所描述方法或功能中的任何一种或更多种所利用。当由处理器710执行时,这些指令716促使各种操作来实现所公开的实施例。
88.如本文所使用的,术语“机器存储介质”、“设备存储介质”和“计算机存储介质”意思相同,并且可以在本公开中互换使用。这些术语指的是存储可执行指令和/或数据的单个或更多个存储设备和/或介质(例如,集中式或分布式数据库和/或相关联的高速缓存和服务器)。相应地,这些术语应当被认为包括但不限于包括处理器内部或外部的存储器的固态存储器以及光和磁介质。机器存储介质、计算机存储介质和/或设备存储介质的具体示例包括非易失性存储器,非易失性存储器包括例如半导体存储器设备,诸如可擦除可编程只读存储器(eprom)、电可擦除可编程只读存储器(eeprom)、现场可编程门阵列(fpga)和闪存设备;磁盘,如内部硬盘和可移除磁盘;磁光盘;以及cd-rom和dvd-rom光盘。术语“机器存储介质”、“计算机存储介质”和“设备存储介质”具体排除了载波、调制数据信号和其他这样的介质(其中的至少一些包含在下面讨论的术语“信号介质”中)。
89.传输介质
90.在各种示例实施例中,网络780的一个或更多个部分可以是自组织网络(ad hoc network)、内联网、外联网、虚拟专用网络(vpn)、局域网(lan)、无线lan(wlan)、广域网(wan)、无线wan(wwan)、城域网(man)、互联网、互联网的一部分、公共交换电话网络(pstn)
的一部分、普通老式电话服务(pots)网络、蜂窝电话网络、无线网络、网络、另一种类型的网络、或两种或更多种这样的网络的组合。例如,网络780或网络780的一部分可以包括无线或蜂窝网络,并且耦合782可以是码分多址(cdma)连接、全球移动通信系统(gsm)连接或另一种类型的蜂窝或无线耦合。在该示例中,耦合782可以实现多种类型的数据传输技术中的任何一种,如单载波无线电传输技术(1xrtt)、演进数据优化(evdo)技术、通用分组无线电服务(gprs)技术、增强型数据速率gsm演进(edge)技术、包括3g、第四代无线(4g)网络、通用移动电信系统(umts)、高速分组接入(hspa)、微波接入全球互操作性(wimax)、长期演进(lte)标准的第三代合作伙伴计划(3gpp)、由各种标准设置组织定义的其他技术、其他长程协议、或其他数据传输技术。
91.指令716可以使用传输介质经由网络接口设备(例如,包括在通信组件764中的网络接口组件)并利用多种众所周知的传输协议(例如,超文本传输协议(http))中的任何一种在网络780上传输或接收。类似地,指令716可以使用传输介质经由耦合772(例如,对等耦合)传输或接收到设备770。术语“传输介质”和“信号介质”意思相同,在本公开中可以互换使用。术语“传输介质”和“信号介质”应被理解为包括能够存储、编码或携带由机器700执行的指令716的任何无形介质,并且包括数字或模拟通信信号或便于这种软件的通信的其他无形介质。因此,术语“传输介质”和“信号介质”应被理解为包括任何形式的调制数据信号、载波等。术语“调制数据信号”意指这样的信号:其具有以对信号中的信息进行编码的这样的方式设置或更改的其特性中的一个或更多个特性。
92.计算机可读介质
93.术语“机器可读介质”、“计算机可读介质”和“设备可读介质”意思相同,并且在本公开中可以互换使用。这些术语被定义为包括机器存储介质和传输介质。因此,这些术语包括存储设备/介质和载波/调制数据信号。
94.本文所述的示例方法的各种操作可以至少部分地由(例如,通过软件)临时配置或永久地配置为执行相关操作的一个或更多个处理器来执行。类似地,本文描述的方法可以至少部分地是处理器实现的。例如,方法500的至少一些操作可以由一个或更多个处理器执行。某些操作的执行可以分布在一个或更多个处理器中,不仅驻留在单个机器内,而且部署在多个机器上。在一些示例实施例中,一个或更多个处理器可以位于单个位置(例如,在家庭环境、办公室环境或服务器场内)中,而在其他实施例中,处理器可以分布在多个位置上。
95.实施例的示例
96.下面是这里描述的实施例的一些示例的列表。
97.示例1是一种系统,包括:至少一个硬件处理器;以及存储器,该存储器存储使该至少一个硬件处理器执行包括以下项的操作的指令:在第一计算进程中接收用户定义函数,该用户定义函数包括与要执行的至少一个操作相关的代码;将至少部分基于该至少一个操作的请求发送到第二计算进程来执行;由第二计算进程接收请求;使用至少一个安全策略来确定是否允许执行该至少一个操作;在第二计算进程中,执行该至少一个操作;以及由第二计算进程向第一计算进程发送该至少一个操作的结果。
98.在示例2中,示例1的主题,其中第二计算进程可选地不同于第一计算进程,第二计算进程包括用于在沙箱环境中执行至少一个操作的沙箱进程。
99.在示例3中,示例1和2中任一个的主题,其中可选地,第一计算进程和第二计算进
程在执行平台的相同执行节点上执行。
100.在示例4中,示例1-3中任一个的主题,其中可选地,至少一个操作基于数据库查询。
101.在示例5中,示例1-4中任一个的主题,其中第一计算进程可选地在不同于第二计算进程的存储器空间中执行。
102.在示例6中,示例1-5中任一个的主题,其中第一计算进程可选地包括执行客户端的执行节点进程,客户端与第二计算进程通信,并且向第二计算进程提交执行数据库查询的至少一个请求。
103.在示例7中,示例1-6中任一个的主题,其中第二计算进程可选地执行安全管理器,安全管理器至少部分地基于安全策略来确定对在由第二计算进程提供的沙箱环境内执行的操作的限制。
104.在示例8中,示例1-7中任一个的主题,其中最优地,在第二计算进程中执行至少一个操作发生在沙箱环境中。
105.在示例9中,示例1-8中任一个的主题,其中可选地,通过第二计算进程发送至少一个操作的结果利用了支持柱状数据的网络传输的数据传送机制。
106.在示例10中,示例1-9中任一个的主题,其中可选地,柱状数据在没有存储器复制或串行化的情况下被传输。
107.示例11是一种方法,包括:在第一计算进程中接收用户定义函数,该用户定义函数包括与要执行的至少一个操作相关的代码;将至少部分基于该至少一个操作的请求发送到第二计算进程来执行;由第二计算进程接收请求;使用至少一个安全策略来确定是否允许执行该至少一个操作;在第二计算进程中,执行该至少一个操作;以及由第二计算进程向第一计算进程发送该至少一个操作的结果。
108.在示例12中,示例11的主题,其中第二计算进程可选地不同于第一计算进程,第二计算进程包括用于在沙箱环境中执行至少一个操作的沙箱进程。
109.在示例13中,示例11和12中任一个的主题,其中可选地,第一计算进程和第二计算进程在执行平台的相同执行节点上执行。
110.在示例14中,示例11-13中任一个的主题,其中可选地,至少一个操作基于数据库查询。
111.在示例15中,示例11-14中任一个的主题,其中第一计算进程可选地在不同于第二计算进程的存储器空间中执行。
112.在示例16中,示例11-15中任一个的主题,其中第一计算进程可选地包括执行客户端的执行节点进程,客户端与第二计算进程通信并且向第二计算进程提交执行数据库查询的至少一个请求。
113.在示例17中,示例11-16中任一个的主题,其中第二计算进程可选地执行安全管理器,安全管理器至少部分地基于安全策略来确定对在由第二计算进程提供的沙箱环境内执行的操作的限制。
114.在示例18中,示例11-17中任一个的主题,其中最优地,在第二计算进程中执行至少一个操作发生在沙箱环境中。
115.在示例19中,示例11-18中任一个的主题,其中可选地,通过第二计算进程发送至
少一个操作的结果利用了支持柱状数据的网络传输的数据传送机制。
116.在示例20中,示例11-19中任一个的主题,其中可选地,柱状数据在没有存储器复制或串行化的情况下被传输。
117.在示例21中,是包括指令的计算机存储介质,当由机器的一个或更多个处理器执行时,该指令将机器配置成执行包括以下项的操作:在第一计算进程中接收用户定义函数,该用户定义函数包括与要执行的至少一个操作相关的代码;将至少部分基于该至少一个操作的请求发送到第二计算进程来执行,该第二计算进程不同于第一计算进程,并且包括用于执行该至少一个操作的沙箱,第一计算进程和第二计算进程在执行平台的相同执行节点上执行;由第二计算进程接收请求;使用至少一个安全策略来确定是否允许执行该至少一个操作;在第二计算进程中,执行该至少一个操作;以及由第二计算进程向第一计算进程发送该至少一个操作的结果。
118.在示例22中,示例21的主题,其中第二计算进程可选地不同于第一计算进程,第二计算进程包括用于在沙箱环境中执行至少一个操作的沙箱进程。
119.在示例23中,示例21和22中任一个的主题,其中可选地,第一计算进程和第二计算进程在执行平台的相同执行节点上执行。
120.在示例24中,示例21-23中任一个的主题,其中可选地,至少一个操作基于数据库查询。
121.在示例25中,示例21-24中任一个的主题,其中第一计算进程可选地在不同于第二计算进程的存储器空间中执行。
122.在示例26中,示例21-25中任一个的主题,其中第一计算进程可选地包括执行客户端的执行节点进程,客户端与第二计算进程通信,并且向第二计算进程提交执行数据库查询的至少一个请求。
123.在示例27中,示例21-26中任一个的主题,其中第二计算进程可选地执行安全管理器,安全管理器至少部分地基于安全策略来确定对在由第二计算进程提供的沙箱环境内执行的操作的限制。
124.在示例28中,示例21-27中任一个的主题,其中最优地,在第二计算进程中执行至少一个操作发生在沙箱环境中。
125.在示例29中,示例21-28中任一个的主题,其中可选地,通过第二计算进程发送至少一个操作的结果利用了支持柱状数据的网络传输的数据传送机制。
126.在实施例30中,实施例21-29中任一个的主题,其中可选地,柱状数据在没有存储器复制或串行化的情况下被传输。
127.结论
128.尽管参考具体的示例实施例描述了本公开的实施例,但显然地,在不背离本发明主题的更广泛范围的情况下,可以对这些实施例做出各种修改和变化。相应地,说明书和附图被认为是说明性的而不是限制性的。形成其一部分的附图通过说明方式并且不以限制方式显示了其中可以实施主题的具体实施例。所示出的实施例以充分细节描述,以便使本领域那些技术人员能够实施本文披露的教导。可以使用其他实施例和从其中衍生的实施例,使得可以作出结构性或逻辑性替换和变化而不偏离本公开的范围。因此不以限制性意义理解这一详细说明,并且各种实施例的范围仅由所附权利要求连同授权的此类权利要求的完
整范围的等同物限定。
129.发明主题的此类实施例可以在本文中单独地和/或共同地由术语“发明”提到,该术语仅出于便利目的并且不意在自愿将本技术的范围限于任何单一发明或发明构思,如果实际上披露的多于一种的话。因此,虽然已经在此说明和描述了特定实施例,但是应当理解,可以用经计算以实现相同目的的任何布置替换用于所示的具体实施例。本公开旨在覆盖各种实施例的任何和所有修改或变型。在阅读以上描述后,本领域的技术人员将明白以上实施例的组合以及本文未具体描述的其他实施例。
130.在本文档中,术语“一个(a)”或“一个(an)”,如专利文档中常见的那样,用于包括一个或多于一个,与“至少一个”或“一个或更多个”的任何其他实例或用法无关。在本文档中,术语“或”用于指非排他性的或,因此“a或b”包括“a但不包括b”、“b但不包括a”和“a和b”,除非另有说明。在所附权利要求中,术语“包括(including)”和“其中(in which)”被用作相应术语“包含(comprising)”和“其中(wherein)”的纯英语等效词。此外,在所附权利要求中,术语“包括”和“包含”是开放式的;也就是说,包括除了权利要求中这样的术语之后列出的那些元素之外的元素的系统、设备、物品或过程仍然被认为落入该权利要求的范围内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1