sql - 如何隔离不同客户的SQL数据?

标签 sql sql-server wcf azure multi-tenant

我目前正在使用 WCF 为应用程序开发服务。我想在 windows-azure 上托管这些数据,它应该托管来自不同用户的数据。我正在寻找正确的数据库设计。在我看来,只有两种不同的可能性:

  • 为每个客户创建一个新数据库
  • 将客户 ID 存储到每个表(或者当每个表通过实体连接时为主表)

第一种方法具有非常好的速度和隔离性,但它在 Windows azure 上非常广泛(或者我对 azure pricing 的理解有误吗?)。另外,我不知道如何以这种方式配置 WCF 服务,它总是使用另一个数据库。

第二种方法速度慢,隔离性差。但它很容易实现并且更便宜。

现在回答我的问题: 有没有其他方法可以使用 azure 实现数据的高度隔离并轻松集成到 WCF 服务中? 我应该使用什么设计以及为什么?

最佳答案

您还有两个附加选项:在数据库中构建多个模式容器(有关此技术的信息,请参阅我的 blog post),或者更好地使用 SQL 数据库联合(您可以使用我的名为 Enzo SQL Shard 的开源项目来访问联合) )。我提供的链接还可以让您访问其他选项。

最终,这是一个相当复杂的决定,涉及性能、安全性和可管理性的权衡。我通常推荐联邦,即使它有 its own set of limitations ,因为它是云的灵活 Multi-Tenancy 选项,可以自动过滤数据。查看开源项目 - 您将了解如何独立于物理存储实现客户数据的良好分离。

关于sql - 如何隔离不同客户的SQL数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15431094/

相关文章:

MySQL - 创建表时一起使用 "PRIMARY KEY"、 "UNIQUE KEY"和 "KEY"的含义

mysql - SQL:复合查询

c# - Windows服务调用WCF服务(web http配置)

c# - MissingMethodException 但我不明白为什么

sql - 在 Oracle 中使用 to_date 的查询在 Windows 和 Ubuntu IDE 中运行不同

mysql - 这个基本的sql语句怎么写

sql - 使用 newID() 创建函数

.net - maxBufferPoolSize 小于 maxBufferSize 有意义吗?

c# - 无法打开数据库 - 登录请求 - 为什么我无法连接到我的数据库?

MySQL 使用文件导入命令行创建数据库(如果不存在)