gpt4 book ai didi

mysql - Multi-Tenancy MySQL 数据库中数据的虚拟隔离

转载 作者:行者123 更新时间:2023-11-29 00:41:35 27 4
gpt4 key购买 nike

这更像是一个概念性问题,因此如果堆栈上的变体能够完成相同的概念,我们欢迎他们。我们目前正在使用 MySQL,并将一些服务扩展到 MongoDB。

我们的想法是,我们希望能够管理一个单一的物理数据库模式/结构,以便调整、扩展等不会随着使用该结构的客户端数量增长到数千、数十个而变得​​过于繁琐,数百等等,但是我们希望在这个级别上隔离他们的数据,而不是简单地在应用程序层上提供更严格的分离。是否可以使用相同的结构为每个客户端创建虚拟容器,但它们的数据在结构上彼此分离?

正常的方法显然是直接或通过外部关系将客户端 key 添加到每一行数据,但考虑到我们无法以 20/20 的比例预见我们的系统如何可能发生黑客攻击,从而允许“跨客户端”数据检索,我想更进一步,将分离嵌入到一个几乎结构化的层面。

我还在这里阅读了另一篇文章:MySQL: how to do row-level security (like Oracle's Virtual Private Database)?它使用“ View ”作为一种方法,但随着客户列表的增多,这似乎变得更加有效。

谢谢!

---- 编辑----

根据下面建议的一些文献,这里有一些关于我们意图的更多信息:

@Stennie 提供的 MSDN 文章中概述的三种情况中最接近的情况是单个数据库、多模式,但不同之处在于,我们对在创建客户端模式后对其进行自定义不感兴趣,我们实际上更喜欢他们仍然锁定到父/主模式。

理想情况下,该解决方案将使每个架构都链接到父表集结构,而不是简单地复制它,希望对父架构或主架构的任何更改都将级联到所有客户端/租户架构。

更进一步,在一个集群中,我们可以有一个主模式和主模式,每个从模式从它复制,但有一组分片的租户。然后可以在集群中不间断地过滤对主服务器的更改,并在所有实例之间保持一致性,还允许我们更快地更新应用程序层,因为我们知道所有数据库都与更新后的模式兼容。

希望这是有道理的,我在这个水平上还是有点新鲜。

最佳答案

有一些常见的基础架构方法,从“不共享”(又名 多实例)到“共享一切”(又名 multi-tenant)。

例如,“虚拟容器”的一种直接方法是使用共享数据库服务器为每个客户端分配一个数据库。这介于两个共享极端之间,因为您的客户将共享数据库服务器基础架构,但将他们的数据和架构分开。

每个客户端一个数据库的方法可以让您:

  • 使用数据库的身份验证和访问控制管理每个客户端的身份验证和访问
  • 支持不同的数据库软件(您提到使用支持 View 的 MySQL 和不支持 View 的 MongoDB)
  • 更轻松地备份和恢复每个客户端的数据
  • 避免数据库级别的潜在跨客户端泄漏
  • 避免单个海量数据库的过度表增长和相关管理问题

一些潜在的缺点包括:

  • 有更多的数据库需要管理
  • 如果您希望在数据库中强制执行特定模式(即 MySQL),您将需要在所有数据库中应用模式更改或支持某种形式的版本控制
  • 对于预先分配存储空间的数据库(即 MongoDB),您可以为每个客户端使用更多存储空间(尤其是当您的实际数据量较小时)
  • 您可能会遇到命名空间或打开文件的限制
  • 您仍然需要担心应用程序和数据安全:)

如果您对 Multi-Tenancy 进行一些研究,您会发现一些其他解决方案,从这个示例(共享数据库服务器架构上每个客户端的独立数据库)到更复杂的分区数据方案。

这篇 Microsoft 文章包括对方法和注意事项的有用概述:Multi-tenant SaaS database tenancy patterns .

关于mysql - Multi-Tenancy MySQL 数据库中数据的虚拟隔离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12056145/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com