为SQL Server中的每个客户端创建不同的数据库是一个好主意吗?

时间:2016-07-22 07:14:43

标签: sql-server-2008

我有一个应用程序,我们希望在其中提供用户可以添加/更新/删除不同表的列的功能。我的方法是为每个客户端创建一个不同的数据库,以便它们特定于表的更改将保留在其数据库中。

由于每个客户端都有自己的数据库,我想知道如何管理身份验证和授权?我是否还需要为此创建不同的数据库?它会影响应用程序的性能吗?

编辑:我计划用于身份验证和授权的方法是创建一个名为" Account"在登录页面上。此帐户名称将指导程序将其连接到正确的数据库。每个数据库都有自己的用户进行身份验证。

1 个答案:

答案 0 :(得分:2)

你的问题的答案当然是(不幸的是)是和否:)

这称为多租户数据架构。

拥有单独的数据库绝对是一个很好的设计选项,但是可以使用与所有客户/客户共享的一个数据库,在选择之前需要考虑许多因素。

每种设计都有优点和缺点。

以下是您的3个基本选择

1)每个客户共享相同的数据库和数据库表。

2)每个客户共享相同的数据库,但他们在数据库中获得自己的架构,因此每个客户都获得自己的一组表。

3)每个客户都有自己的数据库。

单独的数据库方法的一个主要好处(我真的很喜欢)是数据安全性。我的意思是每个客户都有自己的数据库,因此他们只会编辑/更新/删除他们的数据库。因此,最终用户不会因为您的程序错误或应用程序中的安全漏洞而覆盖其他用户数据。

当所有用户都在同一个数据库中时,您可能会意外地拉出并公开其他客户数据。或者更糟糕的是,您可以将主键暴露给屏幕上的记录并忘记保护它,并且高级用户可以非常轻松地将此键覆盖到属于另一个客户的密钥,从而暴露另一个客户数据。

但是,假设您的所有客户实际上都是1家大公司的补贴,您需要每天/每周/每月/每年汇总财务。 如果是这种情况,那么为每个客户端建立一个数据库可能是一个报告的噩梦,让每个人都在一个数据库共享表中只会让生活变得如此简单。例如,当报告您的每日销售时,更容易只是总结一列然后转到10,000个数据库并总结它们。 :)

所以答案肯定取决于你的应用以及它将要做什么。

我在一个大型企业系统上工作,我们在同一个数据库中有成千上万的客户端,为了支持这一点,我们非常谨慎地保护我们所有的数据。

我还在业余时间从事一个侧面项目,该项目支持每个客户多租户架构的数据库。

因此,请考虑您的应用程序将执行的操作,如何备份数据,是否需要汇总数据等,这将有助于您做出决定。

这是关于MSDN的一篇文章: https://msdn.microsoft.com/en-us/library/aa479086.aspx

关于身份验证的问题。

是的,拥有一个单独的数据库进行身份验证是一个很棒的设计。当客户进行身份验证时,您将从身份验证数据库中对其进行身份验证,并且作为此身份验证的一部分,他们将接收到其数据库的连接字符串。然后,该点的所有数据都来自该客户数据库。

希望这有用。 祝你好运!