2

我在一家小公司工作,我正在尝试找出一种解决方案,用于在 Microsoft SQL Server 中存储多个客户端的敏感数据。实际上,我觉得这是一个一般的数据库问题,并不特定于 MSSQL。

到目前为止,我们一直在使用专有数据库,其中客户端数据作为 db 文件(平面文件)存储在文件系统中客户端的根目录中。所以操作系统权限保证客户端 X 使用的应用程序永远无法从客户端 Y 的数据库中获取数据。请注意这里没有数据库服务器/实例/引擎……</p>

但是,对于我的项目,我想使用 SQL 数据库。但是安全人员对将不同客户端的数据放在单个数据库上表示担忧。

一种选择是为不同的客户端创建单独的数据库实例。但是,我不确定这个想法是否可扩展。

所以我的问题是:

1) MSSQL 中是否有任何机制可以让您将数据库“单独”存储在 SQL 服务器使用的不同文件中?

2) 假设我只有一个数据库实例,其中我有客户端 X 和客户端 Y 的数据库。我如何确保客户端 X 的请求永远不会(意外)被错误定向到客户端 Y 的数据库?我不想依赖代码中的某些参数来确定要从哪个数据库中获取!:)

那么,是否有任何可靠的身份验证方案来保证我的查询不会被误导为从不正确的客户端表中获取?

我认为这是一个非常普遍的问题,必须有一个好的解决方案。其他公司在做什么?

请让我知道是否有任何好的文章可以阅读。

4

1 回答 1

1

不同的数据库总是存储在 SQL Server 的不同文件中,因此您甚至不必为此做任何特别的事情。但是,在这种情况下,NTFS 权限对您没有帮助,因为客户端不会直接访问磁盘上的文件。

SQL Server 中一种可能的解决方案是创建单独的 Windows 用户 ID 集,并将它们映射到每个客户的单独 SQL 登录。然后,您只能将这些登录名分配给适当的数据库。例如,如果您为客户端 X 和客户端 Y 托管网站,您将在 web.config 中为客户端 X 的网站设置连接字符串,以便为客户端 X 的数据库使用适当的登录名。客户端 Y 反之亦然。这保证无论如何(除非硬编码登录),来自客户端 X 站点的代码永远不会访问客户端 Y 的数据库。

您可以在单个 SQL Server 实例上拥有 32,000 个数据库,并且拥有单独的数据库可以改进许多可维护性方案(例如在出现数据问题的情况下恢复单个客户的数据库而不影响所有其他客户)。

http://technet.microsoft.com/en-us/library/ms143432.aspx

于 2013-11-03T02:05:07.287 回答