CN111602131A - 多租户数据库***中的安全数据共享 - Google Patents
多租户数据库***中的安全数据共享 Download PDFInfo
- Publication number
- CN111602131A CN111602131A CN201980007744.7A CN201980007744A CN111602131A CN 111602131 A CN111602131 A CN 111602131A CN 201980007744 A CN201980007744 A CN 201980007744A CN 111602131 A CN111602131 A CN 111602131A
- Authority
- CN
- China
- Prior art keywords
- account
- shared object
- user
- data
- defined function
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 claims abstract description 159
- 230000008569 process Effects 0.000 claims description 65
- 230000014509 gene expression Effects 0.000 claims description 57
- 238000003860 storage Methods 0.000 claims description 51
- 238000012545 processing Methods 0.000 claims description 30
- 230000004044 response Effects 0.000 abstract description 14
- 230000006870 function Effects 0.000 description 122
- 238000013475 authorization Methods 0.000 description 49
- 238000010586 diagram Methods 0.000 description 33
- 238000005457 optimization Methods 0.000 description 16
- 230000009466 transformation Effects 0.000 description 11
- 230000002776 aggregation Effects 0.000 description 9
- 238000004220 aggregation Methods 0.000 description 9
- 238000000844 transformation Methods 0.000 description 6
- 230000002688 persistence Effects 0.000 description 5
- 238000000926 separation method Methods 0.000 description 5
- 230000008901 benefit Effects 0.000 description 4
- 238000013500 data storage Methods 0.000 description 4
- 238000005192 partition Methods 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 238000001914 filtration Methods 0.000 description 3
- 230000008676 import Effects 0.000 description 3
- 230000007246 mechanism Effects 0.000 description 3
- 230000004048 modification Effects 0.000 description 3
- 238000012986 modification Methods 0.000 description 3
- 238000003491 array Methods 0.000 description 2
- 230000004888 barrier function Effects 0.000 description 2
- 230000009286 beneficial effect Effects 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000007704 transition Effects 0.000 description 2
- 230000002411 adverse Effects 0.000 description 1
- 238000001444 catalytic combustion detection Methods 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000009826 distribution Methods 0.000 description 1
- 238000011156 evaluation Methods 0.000 description 1
- 238000010348 incorporation Methods 0.000 description 1
- 230000010354 integration Effects 0.000 description 1
- 238000011835 investigation Methods 0.000 description 1
- 238000007726 management method Methods 0.000 description 1
- 239000000463 material Substances 0.000 description 1
- 230000002085 persistent effect Effects 0.000 description 1
- 230000001902 propagating effect Effects 0.000 description 1
- 230000003362 replicative effect Effects 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 239000007787 solid Substances 0.000 description 1
- 239000004557 technical material Substances 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000013519 translation Methods 0.000 description 1
- 230000014616 translation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting 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/6227—Protecting 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/604—Tools and structures for managing or administering access control systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/62—Protecting access to data via a platform, e.g. using keys or access control rules
- G06F21/6218—Protecting 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2141—Access rights, e.g. capability lists, access control lists, access tables, access matrices
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Software Systems (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Data Mining & Analysis (AREA)
- Computational Linguistics (AREA)
- Automation & Control Theory (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Storage Device Security (AREA)
Abstract
公开了用于在多租户数据库***中实现零拷贝数据共享的安全视图的***、方法和设备。一种方法包括在包含共享角色的第一帐户中生成共享对象。该方法包括关联共享对象的视图特权,使得共享对象的底层细节包括安全的用户自定义函数定义。该方法包括向第二帐户授予对第一帐户中的共享角色或共享对象的跨帐户访问权限。该方法包括从第二帐户接收访问第一帐户的数据或服务的请求,并基于第一帐户的数据或服务向第二帐户提供响应。该方法使得包括安全的用户自定义函数定义的共享对象的底层细节对第二帐户是隐藏的并且对第一帐户是可见的。
Description
相关申请的交叉引用
本申请根据35U.S.C.§119(e)要求于2019年1月7日提交的第16/241,463号美国专利申请的权益,该专利申请是2018年8月6日提交的标题为“Secure Data Sharing In AMulti-Tenant Database System”的共同未决美国专利申请序列第16/055,824号的一部分的继续,该第16/055,824号美国专利申请通过引用以其整体(包括但不限于下文中具体出现的那些部分)并入本文,通过引用的并入使用以下异议(exception)进行:如果上述引用的申请的任何部分与本申请不一致,本申请取代上述引用的申请。
技术领域
本公开涉及数据库,且更特别地,涉及用于多租户数据库***中的零拷贝数据共享的安全视图(secure view)。
背景
数据库广泛用于计算应用中的数据存储和访问。数据库可以包括一个或更多个表,该一个或更多个表包含或引用可以使用查询来读取、修改、或删除的数据。数据库可用于存储和/或访问个人信息或其他敏感信息。可以通过加密和/或以加密形式存储数据来提供对数据库数据的安全存储和访问,以防止未经授权的访问。在某些情况下,可能期望数据共享以让其他方针对数据集合执行查询。
在数据库***中,视图通常被用作安全机制,通过这种机制,帐户可以限制对表中具体字段的访问以隐藏信息。视图允许查询的结果被访问,就像它是一个表一样。任何返回有效结果的查询表达式都可以用于创建视图,包括选择表中的列、选择表列中具体范围的数据以及连接(join)两个或更多个表中的数据。视图可用于简化查询和/或隐藏数据。
附图简述
参考以下附图描述了本公开的非限制性和非穷尽的实现方式,其中,除非另有说明,在所有各个视图中类似的参考数字指代类似的或相似的部分。考虑下面的描述和附图,本公开的优点将变得更好理解,附图中:
图1是示出根据一个实施例的多租户数据库中的帐户的示意性框图;
图2是示出根据一个实施例的用于提供和访问数据库服务的***的示意图;
图3是示出根据一个实施例的存储装置与计算资源相分离的多租户数据库的示意图;
图4是示出根据一个实施例的对象层次结构的示意性框图;
图5是示出根据一个实施例的基于角色的访问的示意图;
图6是示出根据一个实施例的角色之间的使用授权的示意图;
图7是示出根据一个实施例的共享对象的示意图;
图8是示出根据一个实施例的跨帐户授权的示意图;
图9是示出根据一个实施例的共享部件中的部件的示意性框图;
图10是示出根据一个实施例的用于在帐户之间共享数据库数据时使用安全视图的方法的示意性流程图;
图11是示出根据一个实施例的利用安全的用户自定义函数的查询计划的过程流程的示意性框图;
图12是示出根据一个实施例的利用安全的用户自定义函数的查询计划的过程流程的示意性框图;
图13是示出根据一个实施例的利用安全的用户自定义函数的查询计划的过程流程的示意性框图;
图14是示出根据一个实施例的利用安全的用户自定义函数的查询计划的过程流程的示意性框图;
图15是示出根据一个实施例的利用安全的用户自定义函数的查询计划的过程流程的示意性框图;
图16是示出根据一个实施例的利用安全的用户自定义函数的查询计划的过程流程的示意性框图;
图17是示出根据一个实施例的利用安全的用户自定义函数的查询计划的过程流程的示意性框图;
图18是示出根据一个实施例的利用安全的用户自定义函数的查询计划的过程流程的示意性框图;
图19是示出根据一个实施例的出现在查询配置文件中的查询的过程流程的示意性框图;
图20是描绘与本文所公开的一个或更多个实施例相一致的示例计算设备或***的框图;以及
图21是示出根据一个实施例的用于在多租户数据库***中的零拷贝数据共享中实现用户自定义函数的安全视图的示例方法的示意性流程图。
详细描述
在数据库***中,视图通常被用作安全机制,通过这种机制,帐户可以限制对表中具体字段的访问以隐藏信息。视图的实现以及如何处理视图的实现可能会导致信息泄漏。例如,在查询优化期间,某些过滤器可能会被推动跨过视图定义,更靠近输入表,并且如果在evaluate安全谓词(secure predicates)之前evaluate了用户指定的过滤器,则信息可能会泄露给用户。
用户自定义函数(UDF)是可以由程序、数据库或其他环境的用户提供的函数。UDF可以被构建到数据库或环境中。在关系数据库管理***中,UDF可以通过添加可以在例如结构化查询语言(SQL)语句中evaluate的函数来提供用于扩展数据库服务器的功能的机制。SQL标准可以在标量UDF和表UDF之间进行区分。标量UDF可以只返回单个值,而表UDF可以返回包含零行或更多行的关系表,其中每行可以有一列或更多列。一旦创建,UDF可以在SQL语句的表达式中使用。
每个用户自定义函数都包括属性和特性。标量函数使用返回子句(returnsclause)返回单个数据值(即,不是一个表)。在实施例中,标量函数可以利用除用户自定义数据类型之外的所有标量数据类型。表值化(table-valued)函数可以返回单个选择语句的结果,而且多语句表值化函数可以返回一个表。
在实施例中,用户自定义函数具有安全的用户自定义函数定义。在这样的实施例中,UDF可以由第一帐户创建并与一个或更多个二级帐户共享。第一帐户可以向一个或更多个二级帐户授予使用特权(usage privileges),使得二级帐户可以例如利用UDF的功能,而无需查看构成UDF的任何过程逻辑。
在实施例中,视图允许查询的结果被访问,就像它是一个表一样。任何返回有效结果的查询表达式都可以用于创建视图,包括选择表中的列、选择表列中具体范围的数据以及连接两个或更多个表中的数据。视图可用于简化查询和/或隐藏数据。此外,视图可以具有查询性能优势。申请人认识到,当视图在查询中被引用时,查询和视图可以一起被处理,使得与单独evaluate视图相比,可以更有效地evaluate视图。
关于安全视图,一些视图优化需要访问视图的基表(base table)中的底层数据。对底层数据的访问可能允许通过例如用户自定义函数(UDF)或其他编程方法暴露对视图的用户隐藏的数据。本申请中公开的安全视图不利用这种优化,并且确保用户不能访问底层数据。根据一个实施例,用于创建标准视图(也可以称为视图定义或文本)的查询表达式可以对用户可见。在这样的实施例中,出于安全或隐私原因,用户可能不希望暴露视图的底层表或内部结构细节。利用本申请中公开的安全视图,视图定义和细节仅对授权用户(即,被授予拥有该视图的角色的用户)可见。
当视图被专门指定用于数据隐私或用于限制对不应该暴露于底层表的所有帐户的数据的访问时,它可以被定义为安全视图。例如,当帐户只能访问数据的子集时,数据可能会在不安全的视图中暴露。信息可能被泄露的示例场景包括以下情形。数据库表包括整个公司的员工数据,视图被定义用于暴露单个部门的员工数据。例如,属于该单个部门的主管的帐户被授权访问视图,但不能访问底层表。在这样的实施例中,用户可以通过在视图上查询来获得对来自其他部门的数据的洞察。如果查询中的过滤器在“员工”字段和“部门”字段之间的连接之前被evaluate,则用户可以推断出整个公司中的任何人是否满足某个指标(例如,工资超过x金额等)。这种技术可用于查询基表内的任何数据。携带调用之间的状态的用户自定义函数可以以类似的方式被用来泄漏对基表数据的甚至更复杂的查询的结果。
安全视图允许数据库客户端帐户向其他用户暴露受限的数据集,而不能向那些其他用户暴露底层的、不受限制的数据。与视图类似,用户自定义函数(UDF)允许客户端帐户向其他用户暴露受限的数据,由于参量(argument)处理和过程语言支持,UDF还具有附加的功能。安全UDF可以提供与安全视图相同的安全保证。
在实施例中,当与常规视图相比,安全视图提供了若干个安全保证。在实施例中,安全视图不向视图的非所有者暴露视图定义。这影响访问数据字典的各种操作。在实施例中,安全视图不暴露关于视图的任何底层数据的信息,包括视图所处理的数据量、视图所访问的表等等。这影响关于查询中扫描的字节数和分区数所显示的统计信息,以及查询配置文件中针对引用安全视图的查询显示的内容。在实施例中,安全视图不暴露来自视图所访问的表中被视图过滤掉的数据。在这样的实施例中,与非安全视图相关联的客户端帐户可以访问将通过利用查询优化而被过滤掉的数据,该查询优化可以导致用户表达式在安全表达式(例如,过滤器和连接)之前被evaluate。在这样的实施例中,为了实现这一要求,可以限制可应用于包含安全视图的查询的查询优化集合,以保证在过滤视图之前不evaluate可能泄漏数据的用户表达式。
申请人认识到防止类似的信息泄露可以是有益的。申请人在本文中提出了通过引入针对安全视图的语法和支持来防止信息泄漏的方法、***和设备。这种针对安全视图的语法和支持可以防止视图内部的任何基表数据被泄露给用户帐户,并且还可以通过在现有视图上设置“安全”标志来扩展对改动现有视图的支持。安全标志可以指示先前不安全的视图现在被标记为安全视图。随着安全视图的引入,用户可以明确地推理视图定义的安全性,并向其他帐户暴露该安全级别,因此用户可以实现视图的特定使用情形(use-case)。
多租户数据库或多租户数据仓库一次支持多个不同的客户帐户。作为示例,图1是示出支持许多不同的客户帐户A1、A2、A3、An等的多租户数据库或数据仓库的示意性框图。客户帐户可以由多个安全控制分开,该多个安全控制包括要连接的不同的统一资源定位符(URL)、不同的访问凭据、不同的数据存储位置(诸如Amazon Web服务S3 bucket(AmazonWeb Services S3 buckets))、和不同的帐户级加密密钥。因此,每个客户可能仅被允许查看、读取、和/或写入客户自己的数据。通过设计,客户可能无法看到、读取、或写入另一个客户的数据。在某些情况下,客户帐户的严格分离是多租户数据仓库或数据库***的基干。
在一些情况下,允许跨帐户数据共享可能是所期望的。然而,目前没有多租户数据库***允许不同的客户帐户之间以即时、零拷贝、易于控制的方式来共享数据。现有的在线数据仓库(诸如Amazon )不支持没有物理数据拷贝的数据共享。由于单独数据库安装的物理分布,本地部署的(on-premise)数据库***(诸如Oracle数据库服务器(Oracle Database )或微软SQL服务器(Microsoft SQL ))根据定义不支持在线数据共享。
基于前述内容,本文公开了用于多租户在线数据库***的***、方法、和设备。一些实施例允许实现安全视图用于不同客户帐户之间的零拷贝数据共享,并且可以使得无需拷贝数据就可以立即访问数据。一些实施例使用细粒度控制提供对数据的访问,以保持所期望数据的分离,同时允许对客户希望共享的数据的访问。
根据一个实施例,计算机实现的方法包括在包含共享角色的第一帐户中生成共享对象。该方法包括将一个或更多个视图的使用特权与共享对象关联,使得共享对象的底层细节包括安全的用户自定义函数定义。该方法包括向第二帐户授予对第一帐户中的共享角色或共享对象的跨帐户访问权限。该方法还包括从第二帐户接收访问第一帐户的数据或服务的请求,并基于第一帐户的数据或服务向第二帐户提供响应。该方法使得包括安全的用户自定义函数定义的共享对象的底层细节对第二帐户隐藏,并且对第一帐户可见。
根据一个实施例,多租户数据库***包括跨帐户权限部件、别名部件、访问部件、和安全视图部件。跨帐户权限部件被配置为确定共享者帐户已经向目标帐户授权对一个或更多个共享资源的跨帐户访问权限。别名部件被配置为在目标帐户中创建与共享者帐户中的一个或更多个共享资源中的共享资源相对应的别名对象。访问部件被配置为允许目标帐户使用指向别名对象的请求来访问共享资源。安全视图部件被配置为定义共享对象的安全视图、共享对象的数据字段、数据库对象的数据字段、等等。
根据另一个实施例,一种用于提供对多租户数据库中共享数据的访问的方法包括确定第一帐户已经向第二帐户授权对第一帐户的数据库对象的访问。该方法包括实现第一帐户的数据库对象的特权,使得数据库对象的数据字段包括安全的用户自定义函数定义。该方法包括从第二帐户接收对访问对应于第一帐户的数据对象的请求。该方法包括使用对应于第一帐户的虚拟仓库来处理该请求。虚拟仓库包括被配置为访问在存储层中的对应于第一帐户的数据以生成对该请求的响应的一个或更多个计算节点的集合。该方法使得包括安全的用户自定义函数定义的数据库对象的数据字段对第二帐户是隐藏的,并且对第一帐户是可见的。
根据实施例,对于包含安全视图的查询,***不暴露扫描的数据量(按照字节或分区而言)或总的数据量。这可以保护信息不被只能访问数据的子集的帐户访问。但是,帐户仍然可以基于查询的性能特性对底层数据的数量进行估计观察。例如,运行两倍长的查询可能会处理两倍的数据。虽然这种观察充其量是近似的,但在一些情况下,即使是这种级别的信息被暴露也是不期望的。在这种情况下,本公开的***、方法和设备被配置为按照每个用户/角色来具体化(materialize)数据,而不是向帐户暴露关于基础数据的视图。在窗口小部件(widgets)表包括关于多个不同窗口小部件的数据的情况下,可以为有权访问窗口小部件表的子集的每个角色创建一个表,并且该表将仅包含该角色可访问的窗口小部件的子集,并且该角色将仅被授权访问它的表。这种实现可以提供高度安全的视图,并且在某些情况下可以是有益的。
本文公开的实施例提供了用于在共享者帐户和数据库***中的一个或更多个其他帐户之间共享“共享对象”或“数据库对象”的***、方法和设备。在一个实现中,共享对象或数据库对象可以包括由客户端帐户的用户(在一个实现中,由共享者帐户的用户)定义的过程逻辑。共享对象可以在标量和表值化用户自定义函数(UDF)中得到支持,并且可以通过任何合适的语言来定义。在实现中,共享对象的过程逻辑可以由一个或更多个其他帐户使用,但不允许该一个或更多个其他帐户查看定义该过程逻辑的底层代码。共享对象或数据库对象还可以包括数据库数据,诸如存储在数据库的表中的数据。共享对象或数据库对象可以包括关于数据库数据的元数据,诸如数据库的表或微分区的最小值/最大值、数据库数据的底层结构或架构细节、等等。共享对象可以包括可以接收对共享对象的元素的跨帐户访问权限的所有其他帐户的列表。该列表可以指示,例如,第二帐户可以使用共享对象的过程逻辑,但无法看到定义该过程逻辑的任何底层代码。该列表还可以指示,例如,第三帐户可以使用一个或更多个表的数据库数据,但无法看到关于该数据库数据的任何结构信息或元数据。该列表可以指示对共享对象的元素的使用特权的任何组合,包括二级帐户是否可以看到数据库数据或过程逻辑的元数据或结构信息。
本文公开的实施例可以在标量和表值化用户自定义函数(UDF)中得到支持。可以使用各种语言(包括SQL和Javascript)用于标量和表值化UDF中的每一个。
在实施例中,标量SQL UDF包括SQL表达式,该表达式包括可以用在函数调用中出现的参量替换的参数。该表达式可以包括查询表达式(即,子查询),并且在实施例中,查询表达式必须保证返回单个行和单个列。在编译时,函数调用被替换为SQL表达式,并且表达式中的参数被替换为调用的参量。结果可以是简单的SQL表达式或子查询(可以是相关的或不相关的)。在实施例中,因为标量SQL UDF可以包括任意SQL表达式,所以安全UDF可以被配置为(1)不向视图的非所有者暴露视图定义,以及(2)不暴露关于视图的任何底层数据的信息。
在实施例中,表值化SQL UDF类似于其中查询可以包括参数的视图。因此,表值化UDF可以作为相关表出现,并且在查询编译期间可以被解相关(decorrelated)。在实施例中,因为表值化SQL UDF可以包括任意SQL表达式,所以安全UDF可以被配置为(1)不向视图的非所有者暴露视图定义,(2)不暴露关于视图的任何底层数据的信息,以及(3)不暴露来自视图所访问的表中被视图过滤掉的数据。
在实施例中,标量Javascript UDF被转换成内置函数,该内置函数为被处理的到达行evaluate一段Javascript代码,并将来自那些行的参量传递到函数内。在实施例中,因为Javascript UDF不能访问数据库表,所以UDF可以被配置为(1)不暴露关于视图的任何底层数据的信息,以及(2)不暴露来自视图所访问的表中被视图过滤掉的数据。
在实施例中,表值化Javascript UDF被处理,使得行被分组在一起,并且Javascript代码按照通过将表达式从行传递到函数内来进行处理的每个组和行进行evaluate。在实施例中,因为Javascript UDF不能访问数据库表,所以UDF可以被配置为(1)不暴露关于视图的任何底层数据的信息,以及(2)不暴露来自视图所访问的表中被视图过滤掉的数据。
本文公开的实施例提供了可用于在在线数据库和/或在线数据仓库中在不同的客户帐户之间共享数据的技术。在一个实施例中,使用跨帐户角色授权来实现数据共享,该跨帐户角色授权允许一个客户帐户中的用户在不需要拷贝数据的情况下以受控的且即时的方式访问另一个客户帐户中的数据。例如,共享的数据可以保留在共享帐户内,同时允许外部帐户在其权限(例如,读、写等)内对该帐户执行查询或其他处理。
本文公开的实施例可以用于多种多样的应用。在一个实施例中,数据库所有者可以与新客户帐户共享样本数据集以用于教程和/或推广。在一个实施例中,演示数据集可以从一个帐户与演示帐户共享以用于向潜在客户演示数据仓库或其他服务。在一个实施例中,由数据库提供者或主机收集的使用数据可以容易地与客户帐户共享。在一个实施例中,公开可用的数据集可以从中心帐户与客户帐户共享,使得客户帐户不必自己摄取数据。在一个实施例中,客户可以与其他客户共享数据,以便更容易地访问共享资源,而不需要进行物理拷贝或传输数据。在一个实施例中,客户可以容易地与管理员共享数据以用于支持问题的调查。根据一个实施例,客户或其他帐户持有人/所有者可以在市场上列出关于他们的数据的信息以供购买/订购。例如,一些实施例提供了在多租户数据库或数据仓库的客户帐户之间买卖数据集的市场。
下面提供了与本公开的实施例相一致的***和方法的详细描述。虽然描述了几个实施例,但是应当理解的是,本公开不限于任何一个实施例,而是包括许多替代方案、修改方案、和等同方案。此外,尽管为了提供对本文公开的实施例的透彻理解在以下描述中阐述了许多具体细节,但是一些实施例可以在没有这些细节中的一些或全部的情况下被实施。此外,为了清楚的目的,没有详细地描述相关领域中已知的某种技术材料,以避免不必要地模糊本公开。
现在参考附图,图1是示出支持许多不同的客户帐户A1、A2、A3、An等的多租户数据库或数据仓库的示意性框图。客户帐户可以由多个安全控制分开,该多个安全控制包括要连接的不同的统一资源定位符(URL)、不同的访问凭据、不同的数据存储位置(诸如AmazonWeb服务S3 bucket)、和不同的帐户级加密密钥。因此,每个客户可能仅被允许看到、读取、和/或写入客户自己的数据。通过设计,客户可能无法看到、读取、或写入另一个客户的数据。在某些情况下,客户帐户的严格分离是多租户数据仓库或数据库***的基干。
图2是用于提供和访问数据库数据或服务的***200的示意图。***200包括数据库***202、一个或更多个服务器204、和客户端计算***206。数据库***202、一个或更多个服务器204、和/或客户端计算***206可以通过网络208(诸如因特网)与彼此通信。例如,一个或更多个服务器204、和/或客户端计算***206可以通过网络208访问数据库***202来查询数据库和/或从数据库接收数据。来自数据库的数据可以由一个或更多个服务器204或客户端计算***206用于任何类型的计算应用。在一个实施例中,数据库***202是为多个不同帐户托管数据的多租户数据库***。
数据库***202包括共享部件210和存储装置212。存储装置212可以包括用于存储数据的存储介质。例如,存储装置212可以包括用于存储数据库表、模式、加密密钥、数据文件、或任何其他数据的一个或更多个存储设备。共享部件210可以包括硬件和/或软件,用于实现数据或服务的跨帐户共享和/或用于将视图特权与数据或者服务关联。例如,共享部件210可以处理从远程设备接收到的访问共享的数据或共享数据的查询/指令。可以从服务器204或客户端计算***206接收查询/指令。在一个实施例中,共享部件210被配置成允许在帐户之间共享数据,而无需在共享帐户之外创建表、数据或类似物的复制副本。例如,共享部件可以允许被分配给共享帐户的计算机资源执行由外部帐户提供的任何查询或指令。
一个实施例中,共享部件210从客户端计算***206接收共享对象的底层细节应该与安全的用户自定义函数定义相关联的指示。客户端可以使用CREATE VIEW中的SECURE关键字定义安全视图,并且客户端可以使用ALTER VIEW命令设置或取消设置视图上的SECURE属性。在实施例中,共享部件210被配置为执行每个客户端命令来定义安全视图,并且在替代实施例中,共享部件210被配置为基于例如从客户端计算***206接收的先前设置来自动定义安全视图。为了将视图特权与共享对象的底层细节关联,共享部件210改动解析器以支持视图名称之前的“安全”关键字和新的改动视图规则。视图被有效地存储为表,并且改变涉及改动表数据持久性对象(DPO)并且添加“安全”标志以指示该视图是安全视图(附加于现在包含“安全”标签的视图文本)。
在实施例中,共享部件210确保对不是视图(或底层数据)的所有者的用户或客户端帐户隐藏安全的用户自定义函数定义。共享部件210可以通过改变命令的输出,使得结果将像往常一样被返回给视图的所有者,但是不会将安全的用户自定义函数定义返回给有权访问该视图的非所有者,来确保安全的用户自定义函数定义被隐藏。
在一个实施例中,数据库***100的存储装置和计算资源可以在逻辑上和/或物理上分离。在一个实施例中,存储装置是所有帐户之间的公共共享的资源。计算资源可以按照帐户独立地设置为虚拟仓库。在一个实施例中,虚拟仓库是访问存储层中的数据并计算查询结果的计算节点集合。将计算节点或资源与存储装置分离允许独立地扩展每一层。存储和计算的分离还允许不同帐户独立地处理共享的数据,且一个帐户中的计算不会影响其他帐户中的计算。也就是说,在至少一些实施例中,当对共享的数据运行查询时,计算资源之间不存在争用。
图3是示出存储装置与计算资源的分离的多租户数据库300的示意性框图。例如,多租户数据库300可以是托管多个不同帐户(A1、A2、A3、至An)的数据仓库。在图3中,帐户A1有三个运行中的虚拟仓库,帐户A2有一个运行中的虚拟仓库,以及帐户A3没有运行中的虚拟仓库。在一个实施例中,所有这些虚拟仓库都有权访问与虚拟仓库的计算节点分离的存储层。在一个实施例中,虚拟仓库可以基于帐户的当前工作负荷而被动态地供应或移除。
在一个实施例中,数据库***300使用帐户中的对象层次结构。例如,每个客户帐户可以包含对象层次结构。对象层次结构通常植根于(rooted in)数据库中。例如,数据库可以包含模式,而模式又可以包含诸如表、视图、序列、文件格式、和函数的对象。这些对象中的每一个都有一个特殊用途:表存储关系数据或半结构化数据;视图定义存储的数据上的逻辑抽象;序列提供产生不断增加的数字的方式;文件格式定义解析摄取的数据文件的方法;以及函数保持用户自定义执行过程。在本文公开的实施例中,视图可以与安全的用户自定义函数定义相关联,使得与视图相关联的底层数据对有权访问该视图的非所有者帐户隐藏。
图4是示出客户帐户内的对象层次结构的示意性框图。具体而言,帐户可以包括数据库中可以引用的对象的层次结构。例如,客户帐户A1包含两个数据库对象D1和D2。数据库对象D1包含模式对象S1,模式对象S1又包含表对象T1和视图对象V1。数据库对象D2包含模式对象S2,模式对象S2包含函数对象F2、序列对象Q2、和表对象T2。客户帐户A2包含数据库对象D3,数据库对象D3含有模式对象S3和表对象T3。对象层次结构可以控制如何访问或引用对象、数据、函数、或者帐户或数据库***的其他信息或服务。
在一个实施例中,数据库***实现基于角色的访问控制以管理对客户帐户中对象的访问。通常,基于角色的访问控制由两个基本要素构成:角色和授权。在一个实施例中,角色是客户帐户中分配给用户的特殊对象。角色和数据库对象之间的授权定义了角色对这些对象拥有的特权内容。例如,对数据库具有使用授权的角色在执行命令“显示数据库”时可以“看到”该数据库;对表具有选择授权的角色可以从该表中读取但不能写入该表。角色需要具有对表的修改授权才能写入该表。
图5是示出对客户帐户中的对象的基于角色的访问的示意性框图。客户帐户A1包含角色R1,角色R1具有对在对象层次结构中的所有对象的授权。假设这些授权是在R1和D1、D2、S1、S2之间的使用授权,以及在R1和T1、V1、F2、Q2、T2之间的选择授权,则拥有已激活的角色R1的用户在帐户A1内可以看到所有对象且可以从所有的表、视图、和序列中读取数据,并且可以执行函数F2。客户帐户A2包含角色R3,角色R3具有对在对象层次结构中的所有对象的授权。假设这些授权是在R3和D3、S3之间的使用授权,以及在R3和T3之间的选择授权,则拥有已激活的角色R3的用户在帐户A2内可以看到所有对象并从所有的表、视图、和序列中读取数据。
图6示出了角色之间的使用授权。利用基于角色的访问控制,也可能将一个角色的使用授权给另一个角色。对另一个角色具有使用授权的角色“继承”该另一个角色的所有访问特权。例如,角色R2中具有对角色R1的使用授权。拥有已激活的角色R2的用户(例如具有相对应的授权细节)可以看到和读取所有对象,因为角色R2继承了角色R1的所有授权。
根据一个实施例,使用授权是在不同帐户之间被授予的。共享数据的帐户在本文可以被称为“共享者帐户”,并且数据与其共享的帐户在本文可以被称为“目标帐户”。在一个实施例中,本文公开的实施例允许数据的即时、零拷贝、容易控制的跨帐户共享,其可以实现安全的用户自定义函数定义,使得目标帐户无法查看视图的底层细节或视图定义。在一个实施例中,为了与另一个帐户共享数据,共享者帐户可以生成共享对象。在共享对象内,可以创建角色,并且共享者帐户的用户可以指示该角色和/或将在该角色下被授予权限的外部(或目标帐户)可以获得访问权限或授权。视图特权可以与共享对象的底层细节(诸如,例如共享对象的底层数据库表的数据字段、数据库表内的大量数据和/或底层数据库表的结构元素)相关联。视图特权可以指示安全的用户自定义函数定义,该函数定义指示目标帐户无权访问共享对象的底层细节。目标帐户然后可以能够识别目标帐户已被授予权限或访问的其他帐户中的共享对象或角色。在一个实施例中,共享者帐户中的共享对象可以使用别名对象和跨帐户角色授权而被导入到目标帐户中。在一个实施例中,这样的共享对象可以作为安全视图被导入到目标帐户中,使得共享对象的一个或更多个底层细节对目标帐户隐藏。
在一个实施例中,数据共享由拥有要被共享的数据的帐户发起。例如,共享者帐户创建一种新类型的对象,即共享对象。共享对象具有用于在共享者帐户内标识的唯一名称。例如,该名称在帐户内可能需要是唯一的,但跨帐户不必是唯一的。共享对象可以通过在共享者帐户中借助其名称引用它们来进行创建、修改、和删除。
在一个实施例中,每个共享对象包含单个角色。在该角色和对象之间的授权定义了共享哪些对象以及这些对象共享哪些特权。角色和授权可以类似于在基于角色的访问控制的实现中的任何其他角色和授权***。通过修改共享对象中附加到角色的授权集,可以(通过向角色添加授权)共享更多的对象,可以(通过撤销角色的授权)共享更少的对象,或者可以(通过更改授权类型,例如以允许对先前只读的共享表对象进行写访问)以不同的特权来共享对象。
在一个实施例中,共享对象还包含对其他客户帐户的引用的列表。只有共享对象中特定的这些帐户可以被允许查找该共享对象、访问该共享对象、和/或从该共享对象中导入。通过修改其他客户帐户的引用列表,共享对象可以被更多的帐户访问或被限制为被更少的帐户访问。
在一个实施例中,安全视图处理通过解析树的变换来实现,例如,视图合并和谓词变换。规范的实现将对查询块进行注释,使得查询块被指定为来自安全视图。在这种情况下,查询块无法与外部查询块(例如,经由视图合并)或者表达式(例如,经由过滤器下推)组合。
在一个实施例中,通过在优化期间(例如,在过滤器上拉和过滤器下推期间)重写查询计划树来实现安全视图处理。查询计划树重写被实现,使得不源自安全视图的表达式不能被下推到视图边界下方。这可以通过生成一种新类型的投影操作符(例如,安全投影操作符(secure-projection operator))来实现,该操作符的行为与标准投影相同,但由于它不是标准投影,所以不能匹配任何重写规则先决条件。因此,相关的重写不适用。在视图查询块被指定为来自或不来自安全的用户自定义函数定义之后,可以实现识别要生成什么类型的投影,即标准投影还是安全投影。
在一个实施例中,实现了对安全视图的优化,以减轻历史上与安全视图的使用相关联的潜在性能损失。通过将某些变换认为是“安全的(safe)”(其中,变换不代表潜在的担忧)来实现这种优化。在这种实例中,安全性意味着被变换的操作不会有任何副作用,这些副作用典型地是指执行以下操作的用户自定义函数:来自SQL的不能容易地被识别为不安全的操作,或者潜在地无法揭示有关导致失败的数据值的信息的操作,例如,当除以0时。因此,优化包括用表达式的安全性属性对其进行注释,然后启用如果这些变换被认为是安全的则允许表达式被推过安全视图边界的变换。如果已知表达式不会产生错误并且不包含用户自定义函数,则该表达式被认为是安全的。表达式是否产生错误使用框架来确定,该框架被配置为根据表达式的类型及其输入的属性(即,输入是否产生错误)来确定表达式是否可能在运行时产生错误。在某些实现中,确保表达式不包含用户自定义函数可能很重要,因为即使用户自定义函数从不产生错误,它也可能从应该从用户结果中过滤掉的行捕获状态,并在没有被过滤掉的行中泄漏该状态。
在实施例中,进一步的优化包括优化安全视图,就好像它是非安全视图一样。如果当前角色有权访问在共享对象内引用的所有底层细节(例如,底层表、底层数据字段、底层数据库结构、底层视图等),则可以实现这一点。
此外,在数据共享中安全视图的使用可以通过允许过滤器经由安全投影上拉来优化。过滤器上拉可以对子查询重写有用,还可以对传递性谓词生成有用,在传递性谓词生成中,过滤器经由连接上拉,并且当经由连接下推时,过滤器潜在地可能被推到连接的两侧。过滤器上拉可以通过在经由安全投影上拉时复制过滤器来实现,使得原始谓词保持在安全投影下方,以确保所有与安全相关的过滤发生在视图外部的任何表达式evaluate之前。谓词的上拉副本可用于上拉相关的优化。
此外,在安全投影下方使用外部连接到内部连接的转换可以用于优化数据共享中安全视图的使用。外部连接到内部连接的转换包括紧接在连接上方出现的过滤器谓词,其中该过滤器谓词从外部连接的空扩展侧过滤出空值(null)。如果安全视图包括外部连接,并且用户过滤器过滤掉空值,那么如果过滤器不是一个可安全推送的过滤器,它可能不会被一直推到连接。优化还包括传播这样的事实,即可以在不经由安全投影移动过滤器的情况下滤除空值。
图7是示出共享对象SH1的示意性框图。客户帐户A1包含共享对象SH1。共享对象SH1在客户帐户A1中具有唯一的名称“SH1”。共享对象SH1包含具有对数据库D2、模式S2、和表T2的授权的角色R4。数据库D2和模式S2上的授权可以是使用授权,而表T2上的授权可以是选择授权。在这种情况下,数据库D2中的模式S2中的表T2将被共享为只读。共享对象SH1包含对其他客户帐户(包括帐户A2)的引用列表。
创建共享对象后,共享对象可以通过共享对象中列出的目标帐户被导入或引用。例如,从共享者帐户导入共享对象可以从其他客户帐户导入。目标帐户可以运行列出所有可用于导入的共享对象的命令。只有当共享对象是用包含目标帐户的引用创建的,目标帐户才可以列出共享对象并随后导入它。在一个实施例中,对另一个帐户中的共享对象的引用总是通过帐户名称限定。例如,目标帐户A2将以示例限定名“A1.SH1”引用共享者帐户A1中的共享SH1。
在一个实施例中,过程或导入共享对象可以包括:在目标帐户中创建别名对象;将别名对象与对象层次结构中共享者帐户中最顶层的共享对象相链接;将目标帐户使用特权中的角色授权给别名对象;以及将目标帐户角色使用特权授权给共享对象中所包含的角色。
在一个实施例中,导入共享对象或数据的目标帐户创建别名对象。别名对象类似于客户帐户中的普通对象。别名对象具有用其进行标识的自己唯一的名称。别名对象可以被链接到被共享的每个对象层次结构中的最顶层对象。如果多个对象层次结构被共享,则多个别名对象可以在目标帐户中被创建。每当别名对象被使用(例如,读取该别名对象、写入该别名对象)时,别名对象在内部被其所链接的共享者帐户中的普通对象所替换。这样,别名对象仅仅是普通对象的代理对象,而不是复制的对象。因此,当读取或写入别名对象时,这些操作会影响别名链接到的原始对象。与普通对象相似,当别名对象被创建时,别名对象被授予用户的已激活的角色。
除别名对象外,还会创建目标帐户中的角色和共享对象中包含的角色之间的授权。这是跨客户帐户从一个角色到另一个角色的使用授权。基于角色的访问控制现在允许目标帐户中的用户访问共享者帐户中的对象。
图8是示出不同帐户之间的逻辑授权和链接的示意性框图。在帐户A2中创建数据库别名对象D5。数据库别名D5经由链接L1引用数据库D2。角色R3在数据库D5上有一个使用授权G1。角色R3具有对客户帐户A1中的角色R4的第二使用授权G2。授权G2是帐户A1和A2之间的跨帐户授权。在一个实施例中,基于角色的访问控制允许拥有已激活的角色R3的帐户A2中的用户访问帐户A1中的数据。例如,如果帐户A2中的用户想要读取表T2中的数据,基于角色的访问控制允许这样做,因为角色R3具有角色R4的使用授权,而角色R4又具有表T2的选择授权。举例来说,拥有已激活的角色R3的用户可以通过运行指向“D5.S2.T2”的查询或选择来访问T2。
使用对象别名和从目标帐户中的角色到共享者帐户中的角色的跨帐户授权,允许目标帐户中的用户访问共享者帐户中的信息。以这种方式,数据库***可以以即时、零拷贝、易于控制的方式实现不同的客户帐户之间的数据共享。共享可以是即时的,因为别名对象和跨帐户授权可以在毫秒内被创建。共享可以是零拷贝的,因为在该过程中没有数据必须要复制。例如,可以直接对共享者帐户中的共享对象进行所有查询、或选择,而无需在目标帐户中创建副本。共享也易于控制,因为其利用了基于角色的访问控制的易用(easy-to-use)技术。另外,在具有分离的存储和计算的实施例中,当对共享的数据执行查询时,计算资源之间没有争用。因此,不同客户帐户中的不同虚拟仓库可以独立地处理共享的数据。例如,第一帐户的第一虚拟仓库可以使用共享者帐户共享的数据来处理数据库查询或语句,第二帐户的第二虚拟仓库或者共享者帐户可以使用共享者帐户的共享的数据来处理数据库查询或语句。
图9是共享部件210的示意性框图。共享部件210包括跨帐户权限部件902、别名部件904、请求部件906、访问部件908、处理部件910和安全视图部件912。部件902-912仅作为示例被给出,并且可能不都被包括在所有实施例中。例如,部件902-912中的每一个可以被包括在单独的设备或***中或者可以被实现为单独的设备或***的一部分。
跨帐户权限部件902被配置为创建和管理帐户之间的权限或授权。跨帐户权限部件902可以在共享者帐户中生成共享对象。例如,共享者帐户的用户可以提供指示一个或更多个资源应该与另一个帐户共享的输入。在一个实施例中,用户可以选择创建新共享对象的选项,以便资源可以与外部帐户共享。响应于用户输入,跨帐户权限部件902可以在共享者帐户中创建共享对象。共享对象可以包括可以向其授予对与外部帐户共享的资源的访问权限的角色。外部帐户可以包括客户帐户或与共享者帐户分离的其他帐户。例如,外部帐户可以是被托管在多租户数据库***上的另一个帐户。
在创建时,共享对象可以被授予对共享者帐户内的一个或更多个资源的权限。资源可以包括共享者帐户的数据库、模式、表、序列、或函数。例如,共享对象可以包含被授予读取、选择、查询、或修改诸如数据库的数据存储对象的权限的角色(即共享角色)。共享对象或共享对象中的共享角色可以类似于使用基于角色的访问控制将权限授予其他角色的方式来被授予权限。用户可以能够访问帐户并对共享角色授予权限,以便共享角色能够访问旨在与外部帐户共享的资源。在一个实施例中,共享对象可以包括共享角色对其具有权限的对象列表和访问级别。
共享对象对于特定的外部帐户也可以是可用的或可以被链接到特定的外部帐户。例如,共享对象可以存储对共享者帐户中的共享角色或共享对象具有权限的帐户的列表。拥有共享者帐户的用户可以在帐户列表中添加或移除帐户。例如,用户可以修改该列表来控制哪些帐户可以访问经由共享对象被共享的对象。共享对象中列出的或标识的外部帐户可以利用被授权给共享对象的共享角色的访问权限来被给予对资源的访问。在一个实施例中,特定帐户可以执行搜索以识别已经与该特定帐户共享的共享对象或共享者帐户。目标帐户或特定帐户的用户可以查看可用的共享对象的列表。
别名部件904被配置为生成由单独帐户共享的数据或数据对象的别名。例如,别名对象可以在目标帐户中创建对应于共享者帐户共享的共享资源的别名对象。在一个实施例中,响应于目标帐户接受共享资源或试图第一次访问共享资源而创建别名对象。别名对象可以充当共享者帐户共享的最高对象层次结构的数据对象的别名(例如,参见图8,其中D5是D2的别名)。别名部件904还可以生成别名对象和共享对象之间的链接(例如,参见图8,其中L1是D5和D2之间的链接)。链接可以以原始或“真实”对象的标识符或名称的形式被创建和/或存储。例如,图8中的链接L1可以包括存储在别名对象D5中的D2的标识符,该标识符包括唯一的全***名称,例如“A1.D2”。
别名部件904还可以授予目标帐户(共享者帐户与之具有共享数据或资源的帐户)中的角色对别名对象的访问权限(例如,参见图8的G1)。另外,别名部件904还可以向目标帐户中的角色授予共享者帐户的共享对象中的共享角色(例如,参见图8的G2)。利用创建的别名对象、别名对象和共享者帐户中的对象之间的链接、以及对目标帐户中的角色的授权,目标帐户可以自由运行查询、语句、或“查看”共享者帐户中的共享数据或资源。
请求部件906被配置成从帐户接收访问不同帐户中的共享资源的请求。该请求可以包括用于访问资源的数据库查询、选择语句、或类似操作。在一个实施例中,该请求包括指向请求帐户的别名对象的请求。请求部件906可以识别别名对象所链接的资源,诸如共享者帐户中的数据库或表。请求部件906可以基于别名对象的标识符来识别所链接的对象。
访问部件908被配置为确定帐户是否有权访问不同帐户的共享资源。例如,如果第一帐户请求访问不同的第二帐户的资源,则访问部件908可以确定第二帐户对第一帐户是否已经授权访问。访问部件908可以通过确定共享对象是否标识请求帐户来确定请求帐户是否具有访问权限。例如,访问部件908可以检查请求帐户是否存在于由共享对象存储的帐户列表中。访问部件908还可以检查标识请求帐户的共享对象是否对共享者帐户中的目标数据资源具有访问权限(例如授权)。
在一个实施例中,访问部件908可以检查从共享者帐户中的共享角色到请求帐户中的请求角色的授权的存在。访问部件908可以检查在数据库请求或语句所指向的别名对象之间是否存在链接,或者请求角色和该别名对象之间是否存在授权。例如,访问部件908可以检查图8中所示的L1、G1和G2中的一个或更多个的存在(existence)或存在(presence)。此外,访问部件908可以检查共享对象中的角色对共享者帐户的对象(例如表或数据库)之间的授权。例如,访问部件908可以检查在图8中角色R4和数据库D2之间的授权的存在。如果访问部件908确定请求帐户有权访问共享资源,则该请求可以由共享部件210或处理部件910来实现。如果访问部件908确定请求帐户对所请求的数据或对象没有权限,则该请求将被拒绝。
处理部件910被配置成处理数据库请求、查询、或语句。处理部件910可以对来自帐户的访问或使用另一帐户中的数据或服务的请求进行处理并提供响应。在一个实施例中,处理部件910通过使用不同于请求帐户的共享者帐户中的原始数据处理请求来提供对该请求的响应。例如,该请求可以被指向存储在第一帐户中或针对第一帐户存储的数据库或表,并且处理部件910可以使用第一帐户的数据库或表来处理该请求并返回对进行请求的第二帐户的响应。
在一个实施例中,处理部件910执行对共享数据的处理,而不在请求帐户中创建副本表或其他数据源。通常,必须首先将数据摄取到希望处理该数据或针对该数据执行操作的帐户内。处理部件910可以通过允许目标帐户访问共享者帐户中的共享资源而不在目标帐户中创建数据资源的拷贝来节省处理时间、延迟、和/或存储器资源。
处理部件910可以使用不同帐户的不同处理资源来执行对相同数据的处理。例如,第一帐户的第一虚拟仓库可以使用共享者帐户共享的数据来处理数据库查询或语句,第二帐户的第二虚拟仓库或者共享者帐户可以使用共享者帐户的共享数据来处理数据库查询或语句。使用单独的处理资源来处理相同的数据可以防止帐户之间处理资源的争用。处理资源可以包括动态提供的处理资源。在一个实施例中,即使数据可以位于不同帐户的存储装置中,还是使用请求帐户的虚拟仓库来执行对共享数据的处理。
安全视图部件912被配置为定义共享对象的安全视图、共享对象的数据字段、数据库对象的数据字段、等等。在实施例中,安全视图部件912使用视图字段中的SECURE关键字来定义安全视图,并且可以使用“ALTER VIEW”命令来设置或取消设置视图上的SECURE属性。在各种实施例中,安全视图部件912可以仅在客户端帐户的手动指导下实现这样的命令,或者可以被配置为自动实现这样的命令。安全视图部件912可以改动解析器以支持视图名称之前的安全关键字和新的改动视图规则。在实施例中,改动的视图规则可以更通用以结合更多的视图级属性。就元数据支持而言,视图可以有效地被存储为表,并且改变可以涉及改动表数据持久性对象,该表数据持久性对象包括指示视图是否是安全视图的安全标志(这可以附加于包括安全标签的视图文本被实现)。安全的用户自定义函数定义(即,表数据持久性对象)可以对不是视图的所有者的用户隐藏。在这样的实施例中,显示视图的命令将照常向视图的所有者返回结果,但不会向有权访问该视图的非所有者第二帐户返回安全的用户自定义函数定义。
安全视图部件912可以改动解析树的变换,例如,视图合并和谓词信息。规范实现可以包括注释查询块,使得查询块被指定为来自安全视图。在这样的实现中,查询块无法与外部查询块(例如,视图合并)或者表达式(例如,经由过滤器下推)组合。
安全视图部件912可以在优化期间(例如,在过滤器上拉和/或过滤器下推期间)重写查询计划树。安全视图部件912可以被配置为确保不源自安全视图的表达式不能被下推到视图边界下方。安全视图部件912可以被配置为通过实现新类型的投影来实现这一点,该新类型的投影表现为与标准投影相同,但是由于它不是标准投影,所以不能匹配任何重写规则先决条件。因此,相关的重写不适用。安全视图部件912可以被配置为在查询块被指定为来自或不来自安全的用户自定义函数定义之后,识别将生成什么类型的投影(例如,标准投影或安全投影)。
安全视图部件912被配置为优化零拷贝数据共享***中安全视图的性能。在本领域已知的各种实施例中,已知安全视图会导致性能损失,这可能会有效地损坏优化器而导致无法应用某些变换。这样的实施例可以通过将某些变换认为是安全的来改进,其中安全指示被变换的操作不会对***有任何副作用。这样的副作用可能由用户自定义函数(UDF)引起,该UDF执行不容易标识不安全操作的操作,或者可能无法揭示有关导致失败的数据值的信息的操作(例如,当除以零时或一些类似的操作)。安全视图部件912可以用表达式的安全属性来注释表达式,然后启用如果表达式被认为是安全的则允许表达式被推过安全视图边界的变换。如果已知表达式不会产生错误,并且该表达式不包含用户自定义函数(UDF),则该表达式可以被认为是安全的。安全视图部件912可以通过利用表达式属性框架来确定表达式是否产生错误,在表达式属性框架中,表达式属性存储表达式是否可能产生错误的指示。
图10是示出用于在多租户数据库***中的零拷贝数据共享中实现安全视图的示例方法1000的示意性流程图。方法1000可以由数据库***执行,例如由图1或图9中的共享部件210或由图1、图2或图3中的数据库***执行。
在1002,方法1000开始,跨帐户权限部件902生成包含共享角色的第一帐户中的共享对象。安全视图部件912在1004关联共享对象的视图特权,使得共享对象的底层细节包括安全的用户自定义函数定义。共享对象的底层细节可以包括底层数据库表的一个或更多个数据字段、底层数据库表的结构元素、底层数据库表中的大量数据、等等。跨帐户权限部件902在1006向第二帐户授予对第一帐户中的共享角色或共享对象的跨帐户访问权限。请求部件906在1008从第二帐户接收访问第一帐户的数据或服务的请求。处理部件910在1010基于第一帐户的数据或服务向第二帐户提供响应。该方法使得包括安全的用户自定义函数定义的共享对象的数据字段对第二帐户是隐藏的,并且对第一帐户是可见的(见1012)。
图11示出了利用安全的用户自定义函数(UDF)的查询计划的处理流程1100。在包括UDF的实施例中,客户端帐户可以定义安全UDF。安全UDF的定义可以对不是该函数的所有者的用户隐藏。在实施例中,这需要改变几个操作。例如,“SHOW FUNCTIONS”操作将像往常一样将结果返回给函数的所有者,但不会将函数定义返回给有权访问视图的非所有者。此外,例如,“GET DDL”操作不会将安全函数的DDL返回给非所有者。此外,例如,“INFORMATIONSCHEMA FUNCTIONS”操作将只向拥有所有者角色的用户返回函数定义。
在一个实施例中,Javascript UDF不需要对处理进行任何改变。在访问数据库表的SQL UDF的实施例中,方法和***可以确保没有优化允许在UDF中进行的任何过滤之前对潜在危险的用户表达式进行evaluate,该过滤可以由过滤器谓词或连接引起。安全视图可以通过在查询计划树中视图计划的上方引入“安全投影(SecureProjection)”节点来实现这一点,并防止潜在危险的用户表达式被推过“安全投影”。在现有优化器重写不知道“安全投影”节点是什么的实施例中,“安全投影”节点可以禁用可能将表达式移动到视图计划内的所有优化。在实施例中,只有被添加回来的安全优化可以将任何东西移过这个屏障。
在实施例中,安全UDF在两个方面不同于安全视图。首先,对于安全UDF,计划方法顶部上的屏障可能不起作用,因为解相关规则可能在“安全投影”节点存在时失败。在解相关失败的实施例中,查询无法被evaluate。第二,在相关UDF的实例中,危险的用户表达式可以从上方(类似于视图)或者从“左”(即相关源自的查询部分)被推入UDF内。
在实施例中,利用“应用(Apply)”节点在计划树中表示相关的子查询和视图。从语义上来说,“应用”节点会在左边输入的每一行上对右边输入的相关表达式进行evaluate,并返回从右侧返回的所有行。标量相关子查询和相关视图被转换,以最终将“应用”转换为“连接”。如果运行时不支持“应用”的evaluate,则未成功移除所有相关性(以及未成功将“应用”转换为“连接”)的查询将因用户错误而失败。解相关可以通过重写规则的集合来实现,这些规则大致对应于“应用”上方的树,直到“应用”下面的树不再与左侧相关。节点的这种上拉可以导致使用在函数的树顶部上放置“安全投影”的安全视图方法不起作用。在实施例中,将“安全投影”放置在“应用”上方可能不会干扰解相关规则,但是不会阻止来自“应用”左边的用户表达式移动到UDF内。
返回图11,过程流程1100示出了表值化UDF的解相关的示例。过程流程1100(解相关之前)包括通向表扫描1104和聚合1106的应用1102。聚合1108通向过滤器1108操作和连接1110操作。连接1110操作通向过滤器1112和表扫描1116操作,还通向表扫描1114操作。在如图11所示的过程流程1100中,通过两个解相关规则来对查询进行变换,以移除“应用”1102节点。第一规则将非标量“聚合”1106节点移动到“应用”1102上方。
图12示出了过程流程1200,其中第二规则将“应用”节点加上右侧的相关过滤器转换成“连接”。过程流程1200包括通向应用1204的聚合1202操作。应用1204流向投影1206和表扫描1208,并且还通向过滤器1210操作。过滤器1210通向连接1212,连接1212流向过滤器1214和表扫描1218,或者替代地流向表扫描1216。
图13示出了用于暴露来自表值化UDF的数据的过程流程1300。在实施例中,为了使UDF安全,必须防止潜在不安全的表达式移到“应用”上方或者从“应用”的左侧移到“应用”的右侧。在图13所示的过程流程1300中,聚合1302通向连接1304,连接1304通向投影1306和表扫描1308,并且替代地通向连接1310。连接1310通向过滤器1312和表扫描1316,或者替代地通向表扫描1314。
在图13所示的实施例中,表函数旨在仅暴露来自例如员工数据库中一个部门的员工数据。在一个示例中,查询可用于确定数据库中是否有任何员工在具体的工资范围内。如果有一个员工的工资大于定义的阈值,则查询将生成错误。这可能是由于过滤器谓词下推造成的。将“应用”转换为“连接”之后,过滤器可以被推到两个连接下方。
图14示出了用于表值化UDF的安全计划的过程流程1400。用于安全的表值化UDF的过程流程1400可能需要防止来自“应用”1404左边和“应用”1404上方的表达式移到“应用”1404的右(UDF)侧。为了实现这一点,使用了两个“安全投影”节点(见1406和1402),其中,一个“安全投影”1406放置在“应用”1404的左输入上方,而另一个“安全投影”1402放置在“应用”1404上方。此外,表函数上的任何过滤器谓词可以被放置在“安全投影”1402上方。当源自安全表UDF的横向视图被转换至应用时,可以在查询块转变(translation)期间进行这些改变。过程流程1400包括“应用”1404上方的“安全投影”1402。“应用”1404的左侧通向“安全投影”1406和表扫描1408。“应用”1404的右侧(UDF侧)包括聚合1410、过滤器1412和连接1414。连接1414通向过滤器1416和表扫描1420,或者替代地通向表扫描1418。
图15示出了应用非标量聚合应用规则之后的过程流程1500。安全投影1502和聚合1504被放置在应用1506上方。应用1506的左侧包括投影1508、安全投影1510和表扫描1512。应用1506的右侧(UDF侧)包括过滤器1514和连接1516。连接1516包括过滤器1518和表扫描1522,并且替代地通向表扫描1520。
图16示出了应用转换应用到连接规则之后的过程流程1600。安全投影1602和聚合1604被放置在连接1606上方。连接1606的左侧包括投影1608、安全投影1610和表扫描1612。连接1606的右侧包括连接1614。连接1614通向过滤器1616和表扫描1620,或者替代地通向表扫描1618。
在实施例中,安全投影不允许潜在不安全的表达式被向下推过投影,并且防止所有表达式被上拉到投影上方。不安全的左侧表达式可能永远不会超出计划的左侧,并且“应用”上方的不安全表达式不会被下推到最终替换“应用”的连接下方。
图17示出了解相关之前的过程流程1700。过程流程1700包括过滤器1702和放置在应用1706上方的安全投影1704。应用1706的左侧包括安全投影1708和表扫描1710。应用1706的右侧(UDF侧)包括聚合1712、过滤器1714和连接1716。连接1716包括过滤器1718和表扫描1722,并且替代地包括表扫描1720。因为过滤器在安全投影上方,所以它无法被推到UDF的边界下方。
图18示出了解相关之前的过程流程1800。过程流程1800包括应用1804上方的安全投影1802。应用1804的左侧包括安全投影1806、过滤器1808和表扫描1810。应用1804的右侧(UDF侧)包括聚合1812、过滤器1814和连接1816。连接1816包括过滤器1818和表扫描1822,并且替代地通向表扫描1820。因为过滤器在安全投影下方,所以它不能被上拉并推到应用1804的右侧。
在实施例中,标量UDF可以在UDF扩展期间被一些子查询替换,这些子查询稍后在解相关之前的查询重写期间被转换为应用。此外,可以在查询被转换为其计划表示之前执行早期子查询重写传递。此时可能不允许展开(Unnest)安全的子查询,使得不需要在一个地方处理安全解相关。“应用”上方和左边的“安全投影”节点用于来自安全标量UDF的子查询。
在实施例中,将“安全投影”放置在“应用”的左输入上方防止了左输入和从“应用”生成的连接之间的连接重新排序。将“安全投影”放置在“应用”上方同样可以防止“应用”上方和下方的连接重新排序。一种替代方案可以包括实现具体的解相关规则来应用于安全的UDF。
图19示出了将会出现在查询配置文件中的查询的过程流程1900。查询配置文件不会暴露安全的SQL UDF所做的详细信息,包括被访问的表、处理的数据量、等等。安全视图在查询配置文件中显示为单个节点,即安全视图,并且不暴露底层计划的任何细节。过程流程1900包括通向过滤器1904和表扫描1906的安全的用户自定义函数1902。用户接口的查询历史和查询细节页面可以包括关于查询所扫描的字节和分区的信息。当查询包含安全视图时,当用户接口请求查询监视统计信息时,此信息不会发送到用户接口。包括安全UDF的查询可能会得到相同的处理。
图20是描绘示例计算设备2000的框图。在一些实施例中,计算设备2000用于实现本文讨论的一个或更多个***和部件。此外,计算设备2000可以与本文描述的任何***和部件交互。因此,计算设备2000可以用于执行各种程序和任务,例如在本文中所讨论的程序和任务。计算设备2000可以用作服务器、客户端或任何其他计算实体。计算设备2000可以是各种计算设备(例如台式计算机、笔记本计算机、服务器计算机、手持计算机、平板计算机等)中的任一个。
计算设备2000包括一个或更多个处理器2002、一个或更多个存储器设备2004、一个或更多个接口2006、一个或更多个大容量存储设备2008、以及一个或更多个输入/输出(I/O)设备2010,它们全部都耦合到总线2012。处理器2002包括执行存储在存储器设备2004和/或大容量存储设备2008中的指令的一个或更多个处理器或控制器。处理器2002还可以包括各种类型的计算机可读介质,诸如,高速缓冲存储器。
存储器设备2004包括各种计算机可读介质,例如易失性存储器(例如随机存取存储器(RAM))和/或非易失性存储器(例如只读存储器(ROM))。存储器设备2004还可以包括可重写ROM,诸如,闪速存储器。
大容量存储设备2008包括各种计算机可读介质,例如磁带、磁盘、光盘、固态存储器(例如闪存)等等。在大容量存储设备2008中还可以包括各种驱动器,以便能够读取和/或写入各种计算机可读介质。大容量存储设备2008包括可移动介质和/或不可移动介质。
I/O设备2010包括允许将数据和/或其他信息输入到计算设备2000的、或从计算设备2000取出数据和/或其他信息的各种设备。示例I/O设备2010包括光标控制设备、键盘、小键盘、麦克风、监视器或其他显示设备、扬声器、打印机、网络接口卡、调制解调器、透镜、CCD或其他图像捕获设备、等等。
接口2006包括允许计算设备2000与其他***、设备或计算环境交互的各种接口。示例接口2006包括任何数量的不同的网络接口,例如到局域网(LAN)、广域网(WAN)、无线网络、和互联网的接口。
总线2012允许处理器2002、存储器设备2004、接口2006、大容量存储设备2008、以及I/O设备2010与彼此通信、以及与耦合到总线2012的其他设备或部件通信。总线2012表示在几种类型的总线结构中的一种或更多种,诸如***总线、PCI总线、IEEE 1394总线、USB总线等等。
为了说明的目的,程序和其他可执行程序部件在本文中被示出为离散的块,但是应当理解,这种程序和部件可以在不同时间驻留在计算设备2000的不同存储部件中,并且由处理器2002执行。替代地,在本文中描述的***和程序可以通过硬件、或通过硬件、软件和/或固件的组合来实现。例如,一个或更多个专用集成电路(ASIC)可经编程来执行本文所描述的***和程序中的一个或更多个。如本文所使用的,为了执行本文所公开的全部或部分操作的目的,术语“模块”或“部件”意欲传达用于例如通过硬件、或通过硬件、软件、和/或固件的组合来实现过程的实现装置。
图21是示出用于在多租户数据库***中的零拷贝数据共享中实现安全的用户自定义函数的示例方法2100的示意性流程图。方法2100可以由数据库***执行,例如由图1或图9中的共享部件210或由图1、图2或图3中的数据库***执行。
方法2100开始,在2102,计算设备确定第一帐户中的共享对象,其中共享对象包括过程逻辑。方法2100继续,在2104,计算设备将一个或更多个视图的使用特权与第一帐户中的共享对象关联,使得共享对象的过程逻辑具有安全的用户自定义函数定义。方法2100继续,在2106,计算机设备向第二帐户授予使用第一帐户中的共享对象的跨帐户访问权限。注意到在2108,方法2100使得共享对象的过程逻辑对第二帐户是隐藏的,并且对第一帐户是可见的。
示例
以下示例涉及另外的实施例。
示例1是一种用于为多租户数据库中共享的数据提供安全视图的方法。该方法包括在包含共享角色的第一帐户中生成共享对象。该方法包括将一个或更多个视图的使用特权与共享对象关联,使得共享对象的底层细节包括安全的用户自定义函数定义。该方法包括向第二帐户授予对第一帐户中的共享角色或共享对象的跨帐户访问权限。该方法包括从第二帐户接收访问第一帐户的数据或服务的请求,并基于第一帐户的数据或服务向第二帐户提供响应。该方法使得包括安全的用户自定义函数定义的共享对象的底层细节对第二帐户隐藏,并且对第一帐户可见。
示例2是如示例1的方法,其中,共享对象的底层细节包括以下项中的一项或更多项:共享对象的底层表的数据字段;共享对象的底层表的结构元素;或者共享对象的底层表中的大量数据。
示例3是如示例1-2中任一个的方法,其中,安全的用户自定义函数定义对第二帐户隐藏,并且对第一帐户可见。
示例4是如示例1-3中任一个的方法,其中,共享对象包括:对于第一帐户唯一的对象名称;对象角色;以及包括有资格访问共享对象的一个或更多个第二帐户的列表的引用列表。
示例5是如示例1-4中任一个的方法,其中,将一个或更多个视图的使用特权与共享对象关联包括以下中的一项或更多项:改动共享对象的底层表的表数据持久性对象;或者将安全标志附加到共享对象的底层数据字段,其中,该安全标志指示共享对象的底层数据字段受安全视图保护。
示例6是如示例1-5中任一个的方法,还包括注释来自第二帐户的请求,以将该请求指定为来自安全视图。
示例7是如示例1-6中任一个的方法,还包括限制来自第二帐户的请求与外部查询块或表达式合并。
示例8是如示例1-7中任一个的方法,还包括用安全属性来注释来自第二帐户的请求,该安全属性指示请求是否是安全的。
示例9是如示例1-8中任一个的方法,其中,请求是安全的,如果:已知该请求不会产生错误;并且该请求不包括用户自定义函数。
示例10是如示例1-9中任一个的方法,其中,从第二帐户接收请求包括接收包括唯一名称的别名对象,其中,该别名对象链接到共享对象层次结构中的最顶层对象。
示例11是如示例1-10中任一个的方法,其中,向第二帐户提供响应包括向别名对象授予对共享对象内已激活的角色的使用特权。
示例12是一种用于为多租户数据库中共享的数据提供安全视图的***。该***包括用于确定第一帐户已经授权第二帐户对第一帐户的数据库对象的访问的装置。该***包括用于关联第一帐户的数据库对象的视图特权,以使得数据库对象的底层细节包括安全的用户自定义函数定义的装置。该***包括用于从第二帐户接收访问第一帐户的数据库对象的请求的装置。该***包括用于使用对应于第二帐户的虚拟仓库来处理请求的装置,其中,虚拟仓库包括一个或更多个计算节点的集合,该一个或更多个计算节点被配置为访问在存储层中的对应于第一帐户的数据以生成对该请求的响应。该***使得包括安全的用户自定义函数定义的数据库对象的底层细节对第二帐户是隐藏的并且对第一帐户是可见的。
示例13是如示例12的***,其中,用于确定第一帐户已经授权第二帐户访问的装置包括用于确定第一帐户列出了第二帐户对第一帐户中的共享对象或共享角色具有权限的装置,其中,该共享对象或共享角色具有对第一帐户的数据库对象的访问权限。
示例14是如示例12-13中任一个的***,其中,用于接收请求的装置包括用于接收指向第二帐户中的别名对象的请求的装置,其中,该别名对象与数据库对象链接。
示例15是如示例12-14中任一个的***,其中,用于实现第一帐户的数据库对象的特权的装置包括以下项中的一项或更多项:用于改动数据库对象的底层表的表数据持久性对象的装置;或者用于将安全标志附加到数据库对象的底层数据字段的装置,其中,该安全标志指示数据库对象的底层数据字段受安全视图保护。
示例16是如示例12-15中任一个的***,还包括用于注释来自第二帐户的请求以将该请求指定为来自安全视图的装置。
示例17是如示例12-16中任一个的***,其中,数据库对象的底层细节包括以下项中的一项或更多项:数据库对象的底层表的数据字段;数据库对象的底层表的结构元素;或者数据库对象中的大量数据。
示例18是存储指令的非暂时性计算机可读存储介质,当该指令被一个或更多个处理器执行时,使得该一个或更多个处理器:在包括共享角色的第一帐户中生成共享对象;关联共享对象的视图特权,使得共享对象的底层细节包括安全的用户自定义函数定义;向第二帐户授予对第一帐户中的共享角色或共享对象的跨帐户访问权限;从第二帐户接收访问第一帐户的数据或服务的请求;以及基于第一帐户的数据或服务向第二帐户提供响应;其中包括安全的用户自定义函数定义的共享对象的底层细节对第二帐户是隐藏的,并且对第一帐户是可见的。
示例19是如示例18的非暂时性计算机可读存储介质,其中,共享对象的底层细节包括以下项中的一项或更多项:共享对象的底层表的数据字段;共享对象的底层表的结构元素;或者共享对象的底层表中的大量数据。
示例20是如示例18-19中任一个的非暂时性计算机可读存储介质,其中,安全的用户自定义函数定义对第二帐户是隐藏的,并且对第一帐户是可见的。
示例21是如示例18-20中任一个的非暂时性计算机可读存储介质,其中,第一帐户的共享对象包括数据库对象、模式、表、序列、或函数中的一个或更多个。
示例22是如示例18-21中任一个的非暂时性计算机可读存储介质,其中,该指令还使得该一个或更多个处理器存储共享角色具有访问权限的对象列表。
示例23是如示例18-22中任一个的非暂时性计算机可读存储介质,其中,该指令使得该一个或更多个处理器通过将第二帐户的指示存储在对第一帐户中的共享角色或共享对象具有权限的帐户的引用列表中来授予跨帐户访问权限。
示例24是如示例18-23中任一个的非暂时性计算机可读存储介质,其中,该指令使得该一个或更多个处理器通过接收指向第二帐户中的别名对象的请求来接收请求。
示例25是如示例18-24中任一个的非暂时性计算机可读存储介质,其中,该指令使得该一个或更多个处理器通过处理请求而不在第二帐户中创建副本表或其他数据源来提供响应。
示例26是如示例18-25中任一个的非暂时性计算机可读存储介质,其中,共享对象包括:对于第一帐户唯一的对象名称;对象角色;以及包括有资格访问共享对象的一个或更多个第二帐户的列表的引用列表。
示例27是如示例18-26中任一个的非暂时性计算机可读存储介质,其中,该指令使得该一个或更多个处理器通过以下项中的一项或更多项来关联共享对象的视图特权:改动共享对象的底层表的表数据持久性对象;或者将安全标志附加到共享对象的底层数据字段,其中,该安全标志指示底层数据字段应该受安全视图保护。
示例28是如示例18-27中任一个的非暂时性计算机可读存储介质,其中,该指令还使得该一个或更多个处理器注释来自第二帐户的请求,以将该请求指定为来自安全视图。
示例29是如示例18-28中任一个的非暂时性计算机可读存储介质,其中,该指令还使得该一个或更多个处理器限制来自第二帐户的请求与外部查询块或表达式合并。
示例30是如示例18-29中任一个的非暂时性计算机可读存储介质,其中,该指令还使得该一个或更多个处理器用安全属性来注释来自第二帐户的请求,该安全属性指示该请求是否是安全的,并且其中,该请求是安全的,如果:已知该请求不产生错误;并且该请求不包括用户自定义函数。
示例31是一种用于在多租户数据库中提供安全视图的方法。该方法包括确定第一帐户中的共享对象,其中,该共享对象包括过程逻辑。该方法包括将一个或更多个视图的使用特权与第一帐户中的共享对象关联,使得该共享对象的过程逻辑具有安全的用户自定义函数定义。该方法包括向第二帐户授予使用第一帐户中的共享对象的跨帐户访问权限。该方法使得共享对象的过程逻辑对第二帐户是隐藏的,并且对第一帐户是可见的。
示例32是如示例31的方法,其中,共享对象还包括以下项中的一项或更多项:共享对象的底层表的数据字段;共享对象的底层表的结构元素;或者共享对象的底层表中的大量数据。
示例33是如示例31-32中任一个的方法,其中,共享对象的安全的用户自定义函数定义对第二帐户是隐藏的,并且对第一帐户是可见的。
示例34是如示例31-33中任一个的方法,其中,共享对象包括由过程逻辑管理的用户自定义函数。
示例35是如示例31-34中任一个的方法,还包括:从第二帐户接收实现由第一帐户中的共享对象的过程逻辑管理的用户自定义函数的请求;从第二帐户接收查询;以及通过实现用户自定义函数来响应来自第二帐户的查询。
示例36是如示例31-35中任一个的方法,其中,响应查询包括响应使得共享对象的函数对第二帐户隐藏,其中,该函数包括以下项中的一项或更多项:根据用户自定义函数访问的表;或者根据用户自定义函数处理的大量数据。
示例37是如示例31-36中任一个的方法,其中,第一帐户中共享对象的用户自定义函数的过程逻辑对第二帐户是隐藏的,并且对第一帐户是可见的。
示例38是如示例31-37中任一个的方法,还包括注释来自第二帐户的请求,以将该请求指定为来自安全视图。
示例39是如示例31-38中任一个的方法,其中,用户自定义函数是标量用户自定义函数,该标量用户自定义函数包括参数,使得该标量用户自定义函数返回单个行和单个列,并且其中,响应来自第二帐户的查询包括提供简单的SQL表达式或子查询中的一个或更多个。
示例40是如示例31-39中任一个的方法,其中,用户自定义函数是包括相关表的表值化用户自定义函数,并且其中,该表值化用户自定义函数管理以下项中的每一项:限制第二帐户查看安全的用户自定义函数定义;限制第二帐户查看共享对象的底层数据;以及限制第二帐户查看被安全的用户自定义函数定义过滤掉的数据。
示例41是如示例31-40中任一个的方法,其中,共享对象在第二帐户的查询配置文件中作为单个节点是可访问的,并且其中,过程逻辑不在查询配置文件中暴露。
示例42是一种用于在多租户数据库中提供安全视图的***。该***包括用于确定第一帐户中的共享对象的装置,其中,该共享对象包括过程逻辑。该***包括用于将一个或更多个视图的使用特权与第一帐户中的共享对象关联,以使得该共享对象的过程逻辑具有安全的用户自定义函数定义的装置。该***包括用于向第二帐户授予使用第一帐户中的共享对象的跨帐户访问权限的装置。该***使得共享对象的过程逻辑对第二帐户是隐藏的,并且对第一帐户是可见的。
示例43是如示例42的***,其中,共享对象还包括以下项中的一项或更多项:共享对象的底层表的数据字段;共享对象的底层表的结构元素;或者共享对象的底层表中的大量数据。
示例44是如示例42-43中任一个的***,其中,共享对象包括由过程逻辑管理的用户自定义函数。
示例45是如示例42-44中任一个的***,还包括:用于从第二帐户接收实现由第一帐户中的共享对象的过程逻辑管理的用户自定义函数的请求的装置;用于从第二帐户接收查询的装置;以及用于通过实现用户自定义函数来响应来自第二帐户的查询的装置。
示例46是如示例42-45中任一个的***,其中,用于响应查询的装置被配置为响应,以使得共享对象的函数对第二帐户隐藏,其中,该函数包括以下项中的一项或更多项:根据用户自定义函数的表访问;或者根据用户自定义函数处理的大量数据。
示例47是如示例42-46中任一个的***,其中,用户自定义函数是标量用户自定义函数,该标量用户自定义函数包括参数,使得该标量用户自定义函数返回单个行和单个列,并且其中,响应来自第二帐户的查询包括提供简单的SQL表达式或子查询中的一个或更多个。
示例48是如示例42-47中任一个的***,其中,用户自定义函数是包括相关表的表值化用户自定义函数,并且其中,该表值化用户自定义函数管理以下项中的每一项:限制第二帐户查看安全的用户自定义函数定义;限制第二帐户查看共享对象的底层数据;以及限制第二帐户查看被安全的用户自定义函数定义过滤掉的数据。
示例49是存储指令的非暂时性计算机可读存储介质,当该指令被一个或更多个处理器执行时,使得该一个或更多个处理器:确定第一帐户中的共享对象,其中,该共享对象包括过程逻辑;将一个或更多个视图的使用特权与第一帐户中的共享对象关联,使得该共享对象的过程逻辑具有安全的用户自定义函数定义;以及向第二帐户授予使用第一帐户中的共享对象的跨帐户访问权限;其中,该共享对象的过程逻辑对第二帐户是隐藏的,并且对第一帐户是可见的。
示例50是如示例49的非暂时性计算机可读存储介质,其中,共享对象还包括以下项中的一项或更多项:共享对象的底层表的数据字段;共享对象的底层表的结构元素;或者共享对象的底层表中的大量数据。
示例51是如示例49-50中任一个的非暂时性计算机可读存储介质,其中,共享对象包括由过程逻辑管理的用户自定义函数,并且其中,该指令还使得该一个或更多个处理器:从第二帐户接收实现由第一帐户中的共享对象的过程逻辑管理的用户自定义函数的请求;从第二帐户接收查询;以及通过实现用户自定义函数来响应来自第二帐户的查询。
示例52是包括用于如示例1-51中任一个中执行方法或实现装置或***的方式的装置。
示例53是包括机器可读指令的机器可读存储装置,当该机器可读指令被执行时,用于实现示例1-51中任一个的方法或装置。
各种技术或者其某些方面或部分可以采用体现在有形介质(诸如,软盘、CD-ROM、硬盘驱动器、非暂时性计算机可读存储介质或任何其它机器可读存储介质)中的程序代码(即,指令)的形式,其中,当该程序代码被加载到诸如计算机的机器中并由该机器执行时,该机器成为用于实践各种技术的装置。在可编程计算机上执行程序代码的情况下,计算设备可以包括处理器、处理器可读的存储介质(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、和至少一个输出设备。易失性和非易失性存储器和/或存储元件可以是RAM、EPROM、闪存驱动器、光学驱动器、磁性硬盘驱动器、或用于存储电子数据的另一种介质。可以实现或利用本文描述的各种技术的一个或更多个程序可以使用应用编程接口(API)、可重复使用的控件等。这样的程序为了与计算机***通信可以用高级过程语言或面向对象编程语言来实现。然而,如果需要,程序可以用汇编语言或机器语言来实现。在任何情况下,语言可以是编译语言或解释语言,且可以与硬件实现相结合。
应当理解,本说明书中描述的许多功能单元可以实现为一个或更多个部件,部件是用来更具体地强调它们的实现独立性的术语。例如,部件可以实现为包含定制的超大规模集成(VLSI)电路或门阵列、诸如逻辑芯片、晶体管的现成的半导体或其他分立部件的硬件电路。部件还可以在诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑器件等可编程硬件设备中实现。
部件也可以用由各种类型的处理器执行的软件实现。可执行代码的所标识的部件可以例如包含计算机指令的一个或更多个物理或逻辑块,该物理或逻辑块可以例如被组织为对象、过程、或函数。然而,所标识的部件的可执行内容(executables)不需要被物理地放置在一起,而是可包含存储在不同位置的完全不同的指令,当这些指令被逻辑地联接在一起时,这些指令包含该部件并实现用于该部件的所规定的目的。
事实上,可执行代码的部件可以是单个指令或很多指令,且甚至可以分布于在不同的程序之间以及跨越若干存储器设备的若干不同的代码段上。类似地,操作数据在本文中可在部件内被标识和说明,并且可以以任何合适的形式体现并被组织在任何合适类型的数据结构内。操作数据可以被收集作为单个数据集,或者可以分布在不同的位置,包括分布在不同的存储设备上,并且可以至少部分地仅仅作为电子信号存在于***或网络上。部件可以是被动的或主动的,包括可操作来执行期望功能的代理。
贯穿本说明书的对“示例”的引用意味着结合该示例描述的特定的特征、结构、或特性被包括在本公开的至少一个实施例中。因此,在贯穿本说明书的各个地方中出现的短语“在示例中”不一定都指相同的实施例。
为了方便起见,如本文所使用的多个项目、结构元素、组成元素、和/或材料可以呈现在公共列表中。然而,这些列表应被解释为列表中的每个成员都被单独识别为独立且唯一的成员。因此,在没有相反指示的情况下,这种列表中的任何单个成员都不应仅仅根据其在共同群体中的表现而被解释为事实上等同于同一列表中的任何其他成员。此外,本文中可以参考本公开的各种实施例和示例以及其各种部件的替代方案。应当理解,这些实施例、示例、和替代方案不应被解释为彼此事实上的等同物,而是应被认为是本公开的独立和自主的表示。
虽然为了清楚的目的,已经对前述内容进行了一些详细描述,但是将明显的是,可以在不脱离其原理的情况下进行某些改变和修改。应当注意的是,有许多实现本文描述的过程和装置的替代方式。因此,本实施例应被认为是说明性的而非限制性的。
本领域的技术人员将理解的是,在不脱离本公开的基本原理的情况下,可以对上述实施例的细节进行许多改变。因此,本公开的范围应仅由随附的权利要求确定。
Claims (23)
1.一种用于提供多租户数据库中的安全视图的***,所述***包括:
一个或更多个处理器,其用于:
确定第一帐户中的共享对象,其中,所述共享对象包括过程逻辑;
将一个或更多个视图的使用特权与所述第一帐户中的共享对象关联,使得所述共享对象的过程逻辑具有安全的用户自定义函数定义;以及
向第二帐户授予使用所述第一帐户中的共享对象的跨帐户访问权限;
其中,所述共享对象的过程逻辑对所述第二帐户是隐藏的,并且对所述第一帐户是可见的。
2.根据权利要求1所述的***,其中,所述共享对象还包括以下项中的一项或更多项:
所述共享对象的底层表的数据字段;
所述共享对象的底层表的结构元素;或者
所述共享对象的底层表中的大量数据。
3.根据权利要求1所述的***,其中,所述共享对象包括由所述过程逻辑管理的用户自定义函数。
4.根据权利要求3所述的***,其中,所述一个或更多个处理器还用于:
从所述第二帐户接收实现由所述第一帐户中的共享对象的过程逻辑管理的所述用户自定义函数的请求;
从所述第二帐户接收查询;以及
通过实现所述用户自定义函数来响应来自所述第二帐户的查询。
5.根据权利要求4所述的***,其中,为了响应所述查询,所述一个或更多个处理器被配置为响应,使得所述共享对象的函数对所述第二帐户隐藏,其中,所述函数包括以下项中的一项或更多项:
根据所述用户自定义函数的表访问;或者
根据所述用户自定义函数处理的大量数据。
6.根据权利要求4所述的***,其中,所述用户自定义函数是标量用户自定义函数,所述标量用户自定义函数包括参数,使得所述标量用户自定义函数返回单个行和单个列,并且其中,响应来自所述第二帐户的查询包括提供简单的SQL表达式或子查询中的一个或更多个。
7.根据权利要求4所述的***,其中,所述用户自定义函数是包括相关表的表值化用户自定义函数,并且其中,所述表值化用户自定义函数管理以下项中的每一项:
限制所述第二帐户查看所述安全的用户自定义函数定义;
限制所述第二帐户查看所述共享对象的底层数据;以及
限制所述第二帐户查看被所述安全的用户自定义函数定义过滤掉的数据。
8.根据权利要求1所述的***,其中,为了确定所述第一帐户中的共享对象,所述一个或更多个处理器被配置用于以下项中的一项或更多项:
从所述第一帐户的用户接收所述过程逻辑;
确定与所述第一帐户相关联的、将被授予给所述第二帐户跨帐户访问权限的数据库数据;或者
确定接收所述共享对象的一个或更多个元素的跨帐户访问权限的帐户列表。
9.一种提供多租户数据库中的安全视图的方法,所述方法包括:
确定第一帐户中的共享对象,其中,所述共享对象包括过程逻辑;
将一个或更多个视图的使用特权与所述第一帐户中的共享对象关联,使得所述共享对象的过程逻辑具有安全的用户自定义函数定义;以及
向第二帐户授予使用所述第一帐户中的共享对象的跨帐户访问权限;
其中,所述共享对象的过程逻辑对所述第二帐户是隐藏的,并且对所述第一帐户是可见的。
10.根据权利要求9所述的方法,其中,所述共享对象还包括以下项中的一项或更多项:
所述共享对象的底层表的数据字段;
所述共享对象的底层表的结构元素;或者
所述共享对象的底层表中的大量数据。
11.根据权利要求9所述的方法,其中,所述共享对象的所述安全的用户自定义函数定义对所述第二帐户是隐藏的,并且对所述第一帐户是可见的。
12.根据权利要求9所述的方法,其中,所述共享对象包括由所述过程逻辑管理的用户自定义函数。
13.根据权利要求10所述的方法,还包括:
从所述第二帐户接收实现由所述第一帐户中的共享对象的过程逻辑管理的用户自定义函数的请求;
从所述第二帐户接收查询;以及
通过实现所述用户自定义函数来响应来自所述第二帐户的查询。
14.根据权利要求11所述的方法,其中,响应所述查询包括响应,使得所述共享对象的函数对所述第二帐户隐藏,其中,所述函数包括以下项中的一项或更多项:
根据所述用户自定义函数访问的表;或者
根据所述用户自定义函数处理的大量数据。
15.根据权利要求11所述的方法,其中,所述第一帐户中的共享对象的用户自定义函数的过程逻辑对所述第二帐户是隐藏的,并且对所述第一帐户是可见的。
16.根据权利要求11所述的方法,还包括注释来自所述第二帐户的请求,以将所述请求指定为来自安全视图。
17.根据权利要求11所述的方法,其中,所述用户自定义函数是标量用户自定义函数,所述标量用户自定义函数包括参数,使得所述标量用户自定义函数返回单个行和单个列,并且其中,响应来自所述第二帐户的查询包括提供简单的SQL表达式或子查询中的一个或更多个。
18.根据权利要求11所述的方法,其中,所述用户自定义函数是包括相关表的表值化用户自定义函数,并且其中,所述表值化用户自定义函数管理以下项中的每一项:
限制所述第二帐户查看所述安全的用户自定义函数定义;
限制所述第二帐户查看所述共享对象的底层数据;以及
限制所述第二帐户查看被所述安全的用户自定义函数定义过滤掉的数据。
19.根据权利要求9所述的方法,其中,所述共享对象在所述第二帐户的查询配置文件中作为单个节点是可访问的,并且其中,所述过程逻辑不在所述查询配置文件中暴露。
20.根据权利要求9所述的方法,其中,确定所述第一帐户中的共享对象包括以下项中的一项或更多项:
从所述第一帐户的用户接收所述过程逻辑;
确定与所述第一帐户相关联的、将被授予给所述第二帐户跨帐户访问权限的数据库数据;或者
确定接收所述共享对象的一个或更多个元素的跨帐户访问权限的帐户列表。
21.一种存储指令的非暂时性计算机可读存储介质,所述指令包括:
确定第一帐户中的共享对象,其中,所述共享对象包括过程逻辑;
将一个或更多个视图的使用特权与所述第一帐户中的共享对象关联,使得所述共享对象的过程逻辑具有安全的用户自定义函数定义;以及
向第二帐户授予使用所述第一帐户中的共享对象的跨帐户访问权限;
其中,所述共享对象的过程逻辑对所述第二帐户是隐藏的,并且对所述第一帐户是可见的。
22.根据权利要求21所述的非暂时性计算机可读存储介质,其中,所述共享对象包括以下项中的一项或更多项:
所述共享对象的底层表的数据字段;
所述共享对象的底层表的结构元素;或者
所述共享对象的底层表中的大量数据。
23.根据权利要求21所述的非暂时性计算机可读存储介质,其中,所述共享对象包括由所述过程逻辑管理的用户自定义函数,并且其中,所述指令还包括:
从所述第二帐户接收实现由所述第一帐户中的共享对象的过程逻辑管理的用户自定义函数的请求;
从所述第二帐户接收查询;以及
通过实现所述用户自定义函数来响应来自所述第二帐户的查询。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US16/055,824 US11048815B2 (en) | 2018-08-06 | 2018-08-06 | Secure data sharing in a multi-tenant database system |
US16/055,824 | 2018-08-06 | ||
US16/241,463 | 2019-01-07 | ||
US16/241,463 US11036881B2 (en) | 2018-08-06 | 2019-01-07 | Secure data sharing in a multi-tenant database system |
PCT/US2019/045359 WO2020033444A1 (en) | 2018-08-06 | 2019-08-06 | Secure data sharing in a multi-tenant database system |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111602131A true CN111602131A (zh) | 2020-08-28 |
CN111602131B CN111602131B (zh) | 2023-06-23 |
Family
ID=69227736
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980008971.1A Active CN111684440B (zh) | 2018-08-06 | 2019-08-06 | 多租户数据库***中的安全数据共享 |
CN201980007744.7A Active CN111602131B (zh) | 2018-08-06 | 2019-08-06 | 多租户数据库***中的安全数据共享 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201980008971.1A Active CN111684440B (zh) | 2018-08-06 | 2019-08-06 | 多租户数据库***中的安全数据共享 |
Country Status (6)
Country | Link |
---|---|
US (9) | US11048815B2 (zh) |
EP (2) | EP3714391A4 (zh) |
KR (1) | KR102240310B1 (zh) |
CN (2) | CN111684440B (zh) |
DE (3) | DE202019005594U1 (zh) |
WO (2) | WO2020033443A1 (zh) |
Families Citing this family (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11048815B2 (en) * | 2018-08-06 | 2021-06-29 | Snowflake Inc. | Secure data sharing in a multi-tenant database system |
US11030212B2 (en) * | 2018-09-06 | 2021-06-08 | International Business Machines Corporation | Redirecting query to view masked data via federation table |
US11086939B2 (en) * | 2019-05-28 | 2021-08-10 | Salesforce.Com, Inc. | Generation of regular expressions |
US20200379988A1 (en) * | 2019-05-29 | 2020-12-03 | Sigma Computing, Inc. | Row-level worksheet security |
US10977268B2 (en) * | 2019-05-31 | 2021-04-13 | Snowflake Inc. | Data exchange |
US11281794B2 (en) * | 2019-09-26 | 2022-03-22 | Microsoft Technology Licensing, Llc | Fine grained access control on procedural language for databases based on accessed resources |
US10949402B1 (en) | 2020-05-26 | 2021-03-16 | Snowflake Inc. | Share replication between remote deployments |
US11704306B2 (en) * | 2020-11-16 | 2023-07-18 | Snowflake Inc. | Restricted views to control information access in a database system |
US11436230B1 (en) * | 2021-04-29 | 2022-09-06 | Microsoft Technology Licensing, Llc | Cross-tenant people search in a multi-tenant computing system |
US11216581B1 (en) * | 2021-04-30 | 2022-01-04 | Snowflake Inc. | Secure document sharing in a database system |
US11347886B1 (en) * | 2021-06-30 | 2022-05-31 | Snowflake Inc. | Secure multi-party encrypted identifier data sharing |
US11366920B1 (en) * | 2021-08-26 | 2022-06-21 | Snowflake Inc. | Fine-grained access control via database roles |
US20230117461A1 (en) * | 2021-10-15 | 2023-04-20 | Oracle International Corporation | Method and system to implement error handling with fine-grained sql hints |
CN113742370B (zh) * | 2021-11-02 | 2022-04-19 | 阿里云计算有限公司 | 全加密数据库的数据查询方法、统计信息密文生成方法 |
US20230169121A1 (en) * | 2021-12-01 | 2023-06-01 | Google Llc | Performance Optimizations for Row-Level Security Filters |
US11829367B2 (en) | 2021-12-14 | 2023-11-28 | Capital One Services, Llc | Data certification process for updates to data in cloud database platform |
US11392587B1 (en) | 2021-12-14 | 2022-07-19 | Capital One Services, Llc | Rule generation and data certification onboarding process for cloud database platform |
US11392715B1 (en) | 2021-12-14 | 2022-07-19 | Capital One Services, Llc | Data certification process for cloud database platform |
US11726976B1 (en) * | 2022-06-13 | 2023-08-15 | Snowflake Inc. | Database encoding and decoding for database functions |
CN115220936B (zh) * | 2022-09-20 | 2023-01-10 | 之江实验室 | 一种多类传感器数据在控制器中零拷贝的方法和装置 |
Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20060070086A1 (en) * | 2004-09-30 | 2006-03-30 | Microsoft Corporation | Application development with unified programming models |
US20070220004A1 (en) * | 2006-03-17 | 2007-09-20 | Microsoft Corporation | Security view-based, external enforcement of business application security rules |
US20080071785A1 (en) * | 2006-08-31 | 2008-03-20 | Microsoft Corporation | Fine-grained access control in a database by preventing information leakage and removing redundancy |
US7921299B1 (en) * | 2003-12-05 | 2011-04-05 | Microsoft Corporation | Partner sandboxing in a shared multi-tenant billing system |
US20110191751A1 (en) * | 2010-02-03 | 2011-08-04 | Oracle International Corporation | Declarative attribute security using custom properties |
US20110196892A1 (en) * | 2008-10-23 | 2011-08-11 | Huawei Technologies Co., Ltd. | Method and apparatus for content sharing |
CN103078894A (zh) * | 2011-09-09 | 2013-05-01 | 微软公司 | 共享项目帐户选择 |
CN105393219A (zh) * | 2013-03-11 | 2016-03-09 | 亚马逊技术有限公司 | 用于虚拟桌面的应用市场 |
CN105610949A (zh) * | 2015-12-30 | 2016-05-25 | 腾讯科技(深圳)有限公司 | 资源数据使用权限的共享方法、装置及*** |
US20160203157A1 (en) * | 2010-06-04 | 2016-07-14 | Salesforce.Com, Inc. | Sharing information between tenants of a multi-tenant database |
CN106970978A (zh) * | 2017-03-28 | 2017-07-21 | 联想(北京)有限公司 | 数据共享方法及装置 |
US20180121667A1 (en) * | 2015-08-12 | 2018-05-03 | Workday, Inc. | Spreadsheet shared region and cell permissions |
US20180196955A1 (en) * | 2017-01-10 | 2018-07-12 | Snowflake Computing, Inc. | Data sharing in a multi-tenant database system |
US11366920B1 (en) * | 2021-08-26 | 2022-06-21 | Snowflake Inc. | Fine-grained access control via database roles |
Family Cites Families (83)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6301575B1 (en) * | 1997-11-13 | 2001-10-09 | International Business Machines Corporation | Using object relational extensions for mining association rules |
US6757680B1 (en) * | 2000-07-03 | 2004-06-29 | International Business Machines Corporation | System and method for inheriting access control rules |
US6810400B2 (en) * | 2000-11-17 | 2004-10-26 | Microsoft Corporation | Representing database permissions as associations in computer schema |
US20020095405A1 (en) * | 2001-01-18 | 2002-07-18 | Hitachi America, Ltd. | View definition with mask for cell-level data access control |
US7089235B2 (en) * | 2003-04-17 | 2006-08-08 | International Business Machines Corporation | Method for restricting queryable data in an abstract database |
US7661141B2 (en) * | 2004-02-11 | 2010-02-09 | Microsoft Corporation | Systems and methods that optimize row level database security |
US7599937B2 (en) * | 2004-06-28 | 2009-10-06 | Microsoft Corporation | Systems and methods for fine grained access control of data stored in relational databases |
US7461066B2 (en) * | 2004-06-29 | 2008-12-02 | International Business Machines Corporation | Techniques for sharing persistently stored query results between multiple users |
US7720858B2 (en) * | 2004-07-22 | 2010-05-18 | International Business Machines Corporation | Query conditions-based security |
US20060020582A1 (en) * | 2004-07-22 | 2006-01-26 | International Business Machines Corporation | Method and system for processing abstract derived entities defined in a data abstraction model |
US8447743B2 (en) * | 2004-08-17 | 2013-05-21 | International Business Machines Corporation | Techniques for processing database queries including user-defined functions |
US8347088B2 (en) * | 2005-02-01 | 2013-01-01 | Newsilike Media Group, Inc | Security systems and methods for use with structured and unstructured data |
US7539682B2 (en) * | 2005-03-14 | 2009-05-26 | Microsoft Corporation | Multilevel secure database |
US7810142B2 (en) * | 2005-03-21 | 2010-10-05 | International Business Machines Corporation | Auditing compliance with a hippocratic database |
US7908242B1 (en) * | 2005-04-11 | 2011-03-15 | Experian Information Solutions, Inc. | Systems and methods for optimizing database queries |
US7634766B2 (en) | 2005-05-20 | 2009-12-15 | Sun Microsystems, Inc. | Method and apparatus for pattern-based system design analysis using a meta model |
US7676470B2 (en) * | 2005-07-26 | 2010-03-09 | International Business Machines Corporation | Self discovering adaptive security system and method |
US7865521B2 (en) * | 2005-12-12 | 2011-01-04 | International Business Machines Corporation | Access control for elements in a database object |
US8095531B2 (en) | 2006-10-03 | 2012-01-10 | Salesforce.Com, Inc. | Methods and systems for controlling access to custom objects in a database |
US20080162483A1 (en) | 2006-12-29 | 2008-07-03 | Becker Wolfgang A | Methods and systems for protecting shared tables against unauthorized overwriting from a tenant space in a mega-tenancy environment |
US20080168043A1 (en) * | 2007-01-09 | 2008-07-10 | Dettinger Richard D | System and method for optimizing query results in an abstract data environment |
US20080168042A1 (en) * | 2007-01-09 | 2008-07-10 | Dettinger Richard D | Generating summaries for query results based on field definitions |
US8516538B2 (en) * | 2007-02-01 | 2013-08-20 | Frequentz Llc | Providing security for queries to electronic product code information services |
US8065682B2 (en) * | 2007-02-27 | 2011-11-22 | Microsoft Corporation | Enforcing system resource usage limits on query requests based on grouping query requests into workgroups and assigning workload groups to resource pools |
US8095618B2 (en) * | 2007-03-30 | 2012-01-10 | Microsoft Corporation | In-memory caching of shared customizable multi-tenant data |
US8065329B2 (en) * | 2007-06-18 | 2011-11-22 | Oracle International Corporation | Query optimization on VPD protected columns |
US8204906B2 (en) * | 2007-07-13 | 2012-06-19 | International Business Machines Corporation | Abstraction based audit and security log model for increased role and security enforcement |
US7877397B2 (en) * | 2007-07-30 | 2011-01-25 | Microsoft Corporation | Extensible command execution for entity data model platform |
US7958105B2 (en) * | 2008-03-07 | 2011-06-07 | International Business Machines Corporation | System and method for filtering database results using dynamic composite queries |
US8407205B2 (en) * | 2008-09-11 | 2013-03-26 | Salesforce.Com, Inc. | Automating sharing data between users of a multi-tenant database service |
US20100070461A1 (en) * | 2008-09-12 | 2010-03-18 | Shon Vella | Dynamic consumer-defined views of an enterprise's data warehouse |
EP2234025A1 (en) * | 2009-03-24 | 2010-09-29 | Software AG | XML database management system for an XML database comprising access-protected XML data |
US9805213B1 (en) * | 2009-06-03 | 2017-10-31 | James F. Kragh | Identity validation and verification system and associated methods |
US8745272B2 (en) | 2010-03-12 | 2014-06-03 | Salesforce.Com, Inc. | Service cloud console |
WO2011115833A2 (en) * | 2010-03-15 | 2011-09-22 | DynamicOps, Inc. | Distributed event system for relational models |
US8539234B2 (en) | 2010-03-30 | 2013-09-17 | Salesforce.Com, Inc. | Secure client-side communication between multiple domains |
US10289611B2 (en) * | 2010-04-30 | 2019-05-14 | Teradata Us, Inc. | Global and persistent memory for user-defined functions in a parallel database |
US20110307695A1 (en) * | 2010-06-14 | 2011-12-15 | Salesforce.Com, Inc. | Methods and systems for providing a secure online feed in a multi-tenant database environment |
US8997196B2 (en) | 2010-06-14 | 2015-03-31 | Microsoft Corporation | Flexible end-point compliance and strong authentication for distributed hybrid enterprises |
US9355145B2 (en) | 2011-01-25 | 2016-05-31 | Hewlett Packard Enterprise Development Lp | User defined function classification in analytical data processing systems |
US8510335B2 (en) * | 2011-02-14 | 2013-08-13 | Protegrity Corporation | Database and method for controlling access to a database |
US8676937B2 (en) * | 2011-05-12 | 2014-03-18 | Jeffrey Alan Rapaport | Social-topical adaptive networking (STAN) system allowing for group based contextual transaction offers and acceptances and hot topic watchdogging |
US8615528B2 (en) * | 2011-07-28 | 2013-12-24 | International Business Machines Corporation | Cloud database sharing |
CN107451225B (zh) * | 2011-12-23 | 2021-02-05 | 亚马逊科技公司 | 用于半结构化数据的可缩放分析平台 |
US9244951B2 (en) * | 2012-03-08 | 2016-01-26 | International Business Machines Corporation | Managing tenant-specific data sets in a multi-tenant environment |
US9043309B2 (en) * | 2012-06-05 | 2015-05-26 | Oracle International Corporation | SQL transformation-based optimization techniques for enforcement of data access control |
US9178886B2 (en) * | 2012-08-29 | 2015-11-03 | Red Hat Israel, Ltd. | Flattening permission trees in a virtualization environment |
CN103714073B (zh) * | 2012-09-29 | 2017-04-12 | 国际商业机器公司 | 数据查询的方法和装置 |
KR101432700B1 (ko) * | 2012-10-10 | 2014-08-25 | (주)티베로 | 쿼리의 최적화를 위한 방법 |
US9275112B2 (en) * | 2012-11-09 | 2016-03-01 | Microsoft Technology Licensing, Llc | Filtering views with predefined query |
US9037854B2 (en) * | 2013-01-22 | 2015-05-19 | Amazon Technologies, Inc. | Privileged cryptographic services in a virtualized environment |
WO2014114761A1 (en) * | 2013-01-25 | 2014-07-31 | Face Recording And Measurements Ltd. | Data management system |
US9584369B2 (en) * | 2013-03-13 | 2017-02-28 | Futurewei Technologies, Inc. | Methods of representing software defined networking-based multiple layer network topology views |
US9904579B2 (en) * | 2013-03-15 | 2018-02-27 | Advanced Elemental Technologies, Inc. | Methods and systems for purposeful computing |
CN104079613B (zh) * | 2013-03-29 | 2018-04-13 | 国际商业机器公司 | 用于多租户间共享应用程序对象的方法和*** |
US9892177B2 (en) | 2013-07-11 | 2018-02-13 | Salesforce.Com, Inc. | Systems and methods for interacting with external content objects |
US9544198B2 (en) * | 2013-09-20 | 2017-01-10 | Oracle International Corporation | Dynamic role-based view definitions in a repository system |
GB2519761A (en) * | 2013-10-29 | 2015-05-06 | Ibm | A method and a system for distributed processing of data records |
US9946889B2 (en) * | 2013-11-27 | 2018-04-17 | Nakivo, Inc. | Systems and methods for multi-tenant data protection application |
US9715513B2 (en) * | 2014-02-19 | 2017-07-25 | Cellos Software Limited | System, method and computing apparatus to isolate a database in a database system |
US9361476B2 (en) * | 2014-05-16 | 2016-06-07 | Safe Text Ltd. | Messaging systems and methods |
US9747335B2 (en) * | 2014-06-24 | 2017-08-29 | Sap Se | Generic operator framework |
US10313460B2 (en) * | 2014-08-28 | 2019-06-04 | Entit Software Llc | Cross-domain information management |
US9721117B2 (en) * | 2014-09-19 | 2017-08-01 | Oracle International Corporation | Shared identity management (IDM) integration in a multi-tenant computing environment |
US10528596B2 (en) | 2014-09-26 | 2020-01-07 | Oracle International Corporation | System and method for consistent reads between tasks in a massively parallel or distributed database environment |
US9720923B2 (en) * | 2014-12-31 | 2017-08-01 | Bank Of America Corporation | System for providing user privilege information associated with secured data |
US10789235B2 (en) * | 2015-03-20 | 2020-09-29 | Micro Focus Llc | Base user defined functions |
US20170004506A1 (en) * | 2015-06-14 | 2017-01-05 | Tender Armor, Llc | Security for electronic transactions and user authentication |
US10339338B2 (en) * | 2016-02-18 | 2019-07-02 | Workiva Inc. | System and methods for providing query-based permissions to data |
US10303894B2 (en) * | 2016-08-31 | 2019-05-28 | Oracle International Corporation | Fine-grained access control for data manipulation language (DML) operations on relational data |
US10601593B2 (en) | 2016-09-23 | 2020-03-24 | Microsoft Technology Licensing, Llc | Type-based database confidentiality using trusted computing |
US20180096165A1 (en) * | 2016-09-30 | 2018-04-05 | Salesforce.Com, Inc. | Provisioning for multi-tenant non-relational platform objects |
US11100469B2 (en) | 2016-10-25 | 2021-08-24 | International Business Machines Corporation | Cross-domain collaborative data log |
US10049133B2 (en) * | 2016-10-27 | 2018-08-14 | International Business Machines Corporation | Query governor across queries |
US20180275846A1 (en) * | 2017-03-27 | 2018-09-27 | Salesforce.Com, Inc. | Context-sensitive overlays for a calendar application |
US10482080B2 (en) * | 2017-10-26 | 2019-11-19 | Sap Se | Exchanging shared containers and adapting tenants in multi-tenancy database systems |
US10657276B2 (en) * | 2017-10-26 | 2020-05-19 | Sap Se | System sharing types in multi-tenancy database systems |
US10990594B2 (en) | 2018-05-04 | 2021-04-27 | Oracle International Corporation | Method for fast and consistent invocation of concurrently modifiable user-defined functions |
US10380369B1 (en) * | 2018-06-14 | 2019-08-13 | Rubrik, Inc. | Multi-tenant authorization framework in a data management and storage cluster |
WO2020014939A1 (en) * | 2018-07-20 | 2020-01-23 | Pivotal Software, Inc. | Container framework for user-defined functions |
US11048815B2 (en) * | 2018-08-06 | 2021-06-29 | Snowflake Inc. | Secure data sharing in a multi-tenant database system |
US11113278B2 (en) * | 2019-05-31 | 2021-09-07 | Snowflake Inc. | Data sharing and materialized views in multiple tenant database systems |
US11138340B1 (en) | 2021-04-30 | 2021-10-05 | Snowflake Inc. | Multiple cloud and region data clean rooms |
-
2018
- 2018-08-06 US US16/055,824 patent/US11048815B2/en active Active
-
2019
- 2019-01-07 US US16/241,463 patent/US11036881B2/en active Active
- 2019-08-06 WO PCT/US2019/045358 patent/WO2020033443A1/en unknown
- 2019-08-06 EP EP19848393.5A patent/EP3714391A4/en active Pending
- 2019-08-06 KR KR1020207020215A patent/KR102240310B1/ko active IP Right Grant
- 2019-08-06 CN CN201980008971.1A patent/CN111684440B/zh active Active
- 2019-08-06 DE DE202019005594.0U patent/DE202019005594U1/de active Active
- 2019-08-06 EP EP19848210.1A patent/EP3714390B1/en active Active
- 2019-08-06 DE DE202019005482.0U patent/DE202019005482U1/de active Active
- 2019-08-06 CN CN201980007744.7A patent/CN111602131B/zh active Active
- 2019-08-06 WO PCT/US2019/045359 patent/WO2020033444A1/en unknown
- 2019-08-06 DE DE202019005481.2U patent/DE202019005481U1/de active Active
- 2019-11-25 US US16/694,906 patent/US10635834B2/en active Active
-
2020
- 2020-03-31 US US16/836,521 patent/US10754974B2/en active Active
- 2020-07-23 US US16/937,415 patent/US11768953B2/en active Active
-
2021
- 2021-05-27 US US17/332,793 patent/US11379605B2/en active Active
- 2021-05-28 US US17/333,343 patent/US11216582B2/en active Active
- 2021-12-22 US US17/559,226 patent/US11366926B2/en active Active
-
2022
- 2022-06-20 US US17/844,601 patent/US20220318419A1/en active Pending
Patent Citations (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7921299B1 (en) * | 2003-12-05 | 2011-04-05 | Microsoft Corporation | Partner sandboxing in a shared multi-tenant billing system |
US20060070086A1 (en) * | 2004-09-30 | 2006-03-30 | Microsoft Corporation | Application development with unified programming models |
US20070220004A1 (en) * | 2006-03-17 | 2007-09-20 | Microsoft Corporation | Security view-based, external enforcement of business application security rules |
US20080071785A1 (en) * | 2006-08-31 | 2008-03-20 | Microsoft Corporation | Fine-grained access control in a database by preventing information leakage and removing redundancy |
US20110196892A1 (en) * | 2008-10-23 | 2011-08-11 | Huawei Technologies Co., Ltd. | Method and apparatus for content sharing |
US20110191751A1 (en) * | 2010-02-03 | 2011-08-04 | Oracle International Corporation | Declarative attribute security using custom properties |
US20160203157A1 (en) * | 2010-06-04 | 2016-07-14 | Salesforce.Com, Inc. | Sharing information between tenants of a multi-tenant database |
CN103078894A (zh) * | 2011-09-09 | 2013-05-01 | 微软公司 | 共享项目帐户选择 |
CN105393219A (zh) * | 2013-03-11 | 2016-03-09 | 亚马逊技术有限公司 | 用于虚拟桌面的应用市场 |
US20180121667A1 (en) * | 2015-08-12 | 2018-05-03 | Workday, Inc. | Spreadsheet shared region and cell permissions |
CN105610949A (zh) * | 2015-12-30 | 2016-05-25 | 腾讯科技(深圳)有限公司 | 资源数据使用权限的共享方法、装置及*** |
US20180196955A1 (en) * | 2017-01-10 | 2018-07-12 | Snowflake Computing, Inc. | Data sharing in a multi-tenant database system |
CN106970978A (zh) * | 2017-03-28 | 2017-07-21 | 联想(北京)有限公司 | 数据共享方法及装置 |
US11366920B1 (en) * | 2021-08-26 | 2022-06-21 | Snowflake Inc. | Fine-grained access control via database roles |
Non-Patent Citations (3)
Title |
---|
HSING-CHUNG CHEN等: "A Negotiated Virtual Role Solution in RBAC Scheme for Group-Based Heterogeneous Wireless Networks", 《2015 18TH INTERNATIONAL CONFERENCE ON NETWORK-BASED INFORMATION SYSTEMS》, pages 146 - 150 * |
任鹏等: "空铁联运信息共享平台的构建", 《交通信息与安全》, no. 1, pages 115 - 118 * |
江伟玉;刘丽敏;查达仁;: "面向云存储的访问控制服务研究", 信息网络安全, no. 10, pages 44 - 47 * |
Also Published As
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111602131B (zh) | 多租户数据库***中的安全数据共享 | |
US10817616B2 (en) | Data sharing in a multi-tenant database system | |
US11461493B1 (en) | Data overlap count adjustment in a multiple tenant database system |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Montana Applicant after: SNOWFLAKE COMPUTING Inc. Address before: California, USA Applicant before: SNOWFLAKE COMPUTING Inc. |
|
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CP03 | Change of name, title or address | ||
CP03 | Change of name, title or address |
Address after: Montana Patentee after: Snowflake Co. Country or region after: U.S.A. Address before: Montana Patentee before: SNOWFLAKE COMPUTING Inc. Country or region before: U.S.A. |