每个用户将文档上载到Azure并保持其私有性的选项

每个用户将文档上载到Azure并保持其私有性的选项,azure,azure-storage,azure-cosmosdb,azure-storage-blobs,azure-table-storage,Azure,Azure Storage,Azure Cosmosdb,Azure Storage Blobs,Azure Table Storage,我们正在azure中创建一个多租户应用程序,该应用程序必须在用户/租户之间隔离数据 每个租户将上载/保存各种文档(主要是excel和csv文件),然后能够在应用程序中使用/检索这些文档作为一系列计算的输入文件 我想象一个这样的结构: + users/ |-+ {uid}/ | | — profile_picture.jpg | |-+ input_data/ | | | — {input_data_id}.xlsx 在使用Firebase安全规则的云存储中,我们可以使用如下规则保护谁可以对存储

我们正在azure中创建一个多租户应用程序,该应用程序必须在用户/租户之间隔离数据

每个租户将上载/保存各种文档(主要是excel和csv文件),然后能够在应用程序中使用/检索这些文档作为一系列计算的输入文件

我想象一个这样的结构:

+ users/
|-+ {uid}/
| | — profile_picture.jpg
| |-+ input_data/
| | | — {input_data_id}.xlsx
在使用Firebase安全规则的云存储中,我们可以使用如下规则保护谁可以对存储在不同路径中的对象执行哪些操作

rules_version = "2";
service firebase.storage {
  match /b/{bucket}/o {
    match /users/{userId}/input_data/{input_data_id} {
      allow get: if request.auth.uid == userId ||
      allow list, write: if request.auth.uid == userId;
    }
  }
}
azure中是否有类似于firestore的资源

  • 按规则比赛
  • 基于UID写入对象
  • 基于UID列出对象
  • 允许基于UID下载对象
我在2015年发现了一个类似问题的问题/答案,我想知道答案是否仍然相关,或者现在是否有更好的选择

您发现仍然适用。在Azure中,对于这样的场景,没有内置的安全规则,比如Firebase规则。因此,您需要自己实现授权。 其核心思想是为每个租户创建Blob容器,容器名称可以是租户ID,并构建代理API以代表用户获取文件

考虑到这一点,您还可以创建一个存储帐户池,然后将每个租户的数据均匀地分布在多个存储帐户中。但是通过这种方式,您还需要一个单独的表来存储映射信息,以便API知道在哪里可以找到数据

数据结构可能类似于:

+ StorageAccount1
 + ContainerTenantID/
 |-+ {uid}/
 | | — profile_picture.jpg
 | |-+ input_data/
 | | | — {input_data_id}.xlsx
 + ContainerTenantID/
 |-+ {uid}/
 | | — profile_picture.jpg
 | |-+ input_data/
 | | | — {input_data_id}.xlsx
+ StorageAccount2
 + ContainerTenantID/
 |-+ {uid}/
 | | — profile_picture.jpg
 | |-+ input_data/
 | | | — {input_data_id}.xlsx

关于代理API,它决定用户可以访问哪些数据。如果您使用Azure AD,它可以从登录用户的令牌中获取租户ID和UID。然后它有足够的信息来决定返回给用户的数据

这些用户存储在哪里?你是在使用Azure AD还是一些自定义数据库?我们倾向于使用Azure AD而不是自定义数据库,我们有一个现有的自定义数据库,但不想在新系统中使用它这样做可行吗?我真的不确定