如何保护SQL Server数据文件.MDF并锁定.LDF不被复制?

时间:2010-09-27 02:03:30

标签: sql-server visual-studio-2008 security

我将一个小的Ms Acces桌面应用程序升级到VB.net SqlServer Express 2008 R2,此应用程序在不同的客户端LAN网络(约50个)上运行,具有一个专用的Windows Server 2008 R2和两个或trhee PC-Clients。

所有安装都有SqlServer sa密码,没有人知道密码,这个sa登录只适用于管理任务。

每个用户都有自己的uid和密码,这些SqlServer登录是嵌入的VB.NET代码和Crypted。

我需要保护数据,模式,存储过程等不被复制的mdf文件并安装在另一个SqlServer实例中来破解mdf文件。

我如何能够检测.mdf以避免这种黑客攻击?

THX。

5 个答案:

答案 0 :(得分:2)

如果我理解正确,[1]你给人们本地访问(在他们的个人计算机的硬盘上)数据文件[2],但不希望他们破解数据甚至查看内部。

你无能为力,无法抗拒几天的努力来打败它。那说:

  1. 如果您的数据价值超过此值,请找到另一种分发数据的方式。我们可以在那里提供建议。
  2. 如果您的数据价值低于此值,您可以执行各种操作,所有这些操作都需要您花费数天的时间。我们也可以在那里提供建议。
  3. 好的,这是什么?

答案 1 :(得分:2)

如果您放弃数据库文件,那么您的任务很难。一旦你放弃了数据,它就不再是你的了。如果您想阻止客户端计算机的合法用户复制文件,那么您可以做一些事情。如果您担心某些第三方可以复制它们,则存在一种解决方案 - 将密钥存储在硬件加密设备(USB令牌或智能卡)上。这样,密钥永远不会离开设备(使用密钥的加密操作在设备上执行)。缺点是您需要将令牌与数据库副本一起提供。如果这不是问题,那么您需要执行以下操作:

  1. 创建一个TrueCrypt卷(它可以与USB cryptotokens一起使用)并将您的文件放在该卷上。
  2. 创建一个脚本,用于挂载卷并启动MS SQL Server(将使用卷上的DB文件)
  3. 合法用户必须提供用于访问设备的PIN。因此,如果第三方用户窃取了设备,他就没有针脚。如果他捕获PIN和文件, - 他仍然需要设备。即他的任务比简单地复制数据库要困难几倍。

答案 2 :(得分:1)

您可以逐列加密数据,但这非常麻烦,如果您的用户可以访问您的应用程序(即使是以编译形式),那么他们将能够找到密码(或证书)你过去常常用来加密列。 See here for more details。它也有一些严重的性能影响...

SQL Server 2008企业版(因此它无法在您正在使用的Express版本中运行)具有一个名为Transparent Data Encryption的功能,可以加密整个数据库文件。它没有上面提到的逐列加密那么多的性能问题,但它仍然遇到任何对您的客户端应用程序具有物理访问权限的人可以提取解密密钥而没有太多麻烦的问题。另外,当然,企业版真的昂贵!

答案 3 :(得分:1)

您是说您实际上是在每台客户端计算机上部署数据库实例? SQL Server不是MS Access的替代品!它是一个高度可扩展的RDBMS,而不是桌面数据库。

我认为您可能错过了将单个集中式数据库作为应用程序数据的安全存储库的巨大机会。这就是人们通常对数据和代码保持一定程度的控制的方式 - 将数据的一个工作副本保存在用户只能通过应用程序及其身份验证方案间接访问的安全服务器上。

这被称为Client Server模型。

如果您的用户是分发的(例如,不在同一办公室),请考虑使用中央数据库编写Web应用程序。

您不能指望对您手中的数据进行任何控制。将它保存在您的服务器上。

答案 4 :(得分:1)

您的困境的答案只是集中存储数据库 - 理想情况下只有一个人人共享的数据库。您不应该在每台客户端计算机上安装SQL Server数据库。您不仅存在安全风险,还存在数据丢失的风险,因为用户不会备份他们的计算机。

任何人都不应该与mdf文件在同一台服务器上。

按照以下步骤操作,你会更好。

  • 将SQL数据库放在专用服务器上
  • 允许客户端以受限权限用户(而非“sa”)
  • 连接到数据库
  • 不要让任何客户端访问该服务器的其他访问权限