云服务器价格_云数据库_云主机【优惠】最新活动-搜集站云资讯

游戏服务器_腾讯云bug_新用户

小七 141 0

本博客是"在SAP HANA云平台上开发多租户应用程序"系列博客的第4部分。

在第1部分中,我们介绍了多租户应用程序的概念和用例,在第2部分中,我们展示了本系列中构建的演示应用程序的技术概述,在第3部分中,讨论了构建多租户应用程序的项目设置。

在本博客中,我们将重点介绍如何在SAP HANA云平台上使用持久性服务的多租户实现数据隔离。我们还将从污染监测的多租户应用程序的数据初始化开始,我们正在构建该应用程序作为博客系列的一部分。

考虑以下场景:

Robert希望他的应用程序在存储数据时隔离每个客户的数据。这对于确保每个客户的数据和应用程序的安全非常重要。罗伯特想知道如何才能做到这一点?

Robert正在寻找的解决方案,可以使用数据库或持久性多租户来实现。持久性多租户允许来自不同使用者的数据分别存储在数据库中。

让我们看看这3种方法提供了什么:

租户鉴别器列:此方法使用表中的单个列来确保数据隔离。在这种方法中,所有应用程序使用者之间共享一个DB模式。租户运行时提供的租户标识符可以用作鉴别器列中的值。为了确保应用程序中的数据分离,每个SQL语句必须包含租户标识符。

为了通过鉴别器列实现这种分离,可以使用EclipseLink/JPA的多租户注释。应具有租户意识的实体使用@multitlenat注释进行注释。鉴别器列是通过@TenantDiscriminatorColumn注释定义的。由于租户运行时提供的租户ID的长度与EclipseLink中鉴别器列的默认长度不同,数据统计,因此必须设置36个字符的正确长度。访问多租户实体的数据时,必须将租户ID提供给实体管理器。

每个租户的表多租户:此方法允许应用程序的多个租户在一个或多个特定于租户的表中隔离其数据。这是通过在数据库中为每个租户创建不同的表或架构来实现的。租户表鉴别器指定如何区分租户表与其他租户表。租户表可以在同一个模式中,使用前缀或后缀命名模式来区分它们;也可以在单独的模式中,使用模式租户表鉴别器。

要实现这种分离,可以再次使用EclipseLink/JPA的多租户注释。EclipseLink支持一种称为"TABLE\u PER\u TENANT"多租户的多租户风格。因此,大数据如何处理,应该了解租户的实体用@multi TENANT(TABLE\u PER\u TENANT)注释进行注释。

如前所述,多租户的表可以位于共享模式中,使用前缀或后缀命名模式进行标识;也可以位于基于@TenantTableDiscriminator注释的独立的、特定于租户的架构。使用此注释,我们可以指定哪些表与哪些租户关联。租户表鉴别器必须包含类型和上下文属性:

类型属性可以是以下之一:使用PREFIX将租户表鉴别器作为前缀应用于所有多租户表。使用后缀将租户表鉴别器作为后缀应用于所有多租户表。使用SCHEMA将租户表鉴别器作为架构应用于所有多租户表。contextproperty属性的值是标识租户的租户ID。

多租户数据库容器–MDC(*BETA):此方法允许通过为每个使用者创建不同的数据库容器(也称为租户数据库)来实现数据隔离。SAP HANA支持单个HANA系统中的多个独立数据库。使用这种方法,我们可以实现高度的隔离和安全性,对SQL查询性能的影响较小,因为我们不必担心为数据隔离而需要创建复杂的授权。一旦MDC在SAP HANA云平台上正式可用(GA),将提供更多关于应用程序中使用MDC的详细信息。

作为第一步,Robert决定采用第一种也是最简单的方法,使用租户鉴别器列进行数据隔离。

如前所述,此方法使用表中的一列来区分来自多个使用者的数据。这意味着不同的消费者对租户鉴别器列应该有不同的值。

但是我们如何生成这个值呢?这是硬编码的吗?手动创建??

我们知道,在提供者管理的应用程序场景中,就像Robert正在创建的场景一样,云计算大数据,每个应用程序使用者都会为提供者应用程序获取自己的特定于使用者的URL。这是因为使用者已经订阅了提供者应用程序。当应用程序通过特定于使用者的URL启动时,大数据数据采集,租户运行时将能够识别应用程序的当前使用者。租户运行时还提供了一个API来检索当前应用程序使用者。每个应用程序使用者都由一个名为tenantId的唯一ID标识。

回到我们正在构建的应用程序,让我们看看持久性多租户是如何在项目中实现的。在上一篇博客(第3部分)中,我们已经将项目从Github导入Eclipse。我们将在后续步骤中使用相同的导入项目: