如何保护包含Access数据库的网络文件夹,同时仍允许WinForms应用程序连接到数据库

时间:2011-09-06 17:56:44

标签: .net windows winforms security ms-access

我接受了VB.Net WinForms应用程序的支持,我正在支持的公司丢失了应用程序的源代码。我有应用程序的安装CD和网络安装的安装步骤:

  1. 将应用程序的访问数据库复制到服务器上的某个位置。
  2. 在包含数据库的文件夹上创建共享,并为Everyone提供完全访问权限。
  3. 通过ClickOnce安装在客户端桌面上安装应用程序。
  4. 第一次运行应用程序时,它会请求数据库的位置。如果在指定位置找到数据库,则数据库路径将保存在注册表中并用于数据库连接。
  5. 从应用程序集的反编译中,我能够确定以下代码用于建立数据库连接(我希望连接字符串在应用程序设置中,但不幸的是没有这样的运气)。

    OleDbConnectionStringBuilder builder = new OleDbConnectionStringBuilder();
    builder.ConnectionString = "Data Source=" + sDatasource;
    builder.Add("Provider", "Microsoft.Jet.Oledb.4.0");
    builder.Add("Jet OLEDB:Database Password", "....");
    builder.PersistSecurityInfo = true;
    gconn = new OleDbConnection(builder.ConnectionString);
    

    现在我遇到的问题如下:此应用程序正在大学使用,设置中的第2步导致学院出现安全问题,因为打开文件夹到此范围允许任何人复制和执行代码服务器。学院经历过学生发现和利用这些安全问题。是否有某种方式可以将访问限制在包含数据库的文件夹中,以便学生不能在服务器上复制和执行代码,但是应用程序仍然能够连接并使用访问数据库?请记住,我在此阶段没有源代码来更改用于连接的连接字符串。

    更新:

    我认识的人建议我在批处理文件中使用Runas来运行域中特定用户的应用程序,然后只向该用户授予访问数据库的文件夹权限。这是一个可行的解决方案吗?

3 个答案:

答案 0 :(得分:1)

我认为你不能真正使这个设置安全,但你可以采取一些措施来更好地控制它:

将访问数据库放入虚拟机内的“本地文件夹”中...将该文件夹放在仅包含该文件夹的虚拟机内的单独卷上...使该卷持久...

然后根据需要创建一个分享......

这样学生可能会做的任何事情仅限于VM(不考虑Blue Pill或类似的)...如果需要,您甚至可以使用一些VMWare Workstation功能将VM回滚到已知良好状态等。 ..

答案 1 :(得分:1)

为什么不使用反编译代码重建应用程序?然后,对于代理,请考虑引入Web服务。也许这是太多的工作......但是Web服务将允许从客户端应用程序到数据的连接更加安全,同时将MDB隐藏在服务之后。

答案 2 :(得分:0)

如果有人有兴趣,我将在这里概述我是如何设法让这个应用程序工作而不需要对源进行任何更改(考虑到我还没有工作源!)并且还保护了数据库文件夹所有用户。

  1. 我在服务器上创建了一个用户,该用户将拥有对数据库文件夹的完全权限。我在客户端计算机上使用与服务器上完全相同的密码创建了相同的用户,但这只是因为我没有域控制器设置。
  2. 我更改了ClickOnce安装并将其更改为MSI安装,并将应用程序安装到服务器上的 Program Files
  3. 然后我分享了这个文件夹(也包括Access数据库),并为所有人提供了读取权限,但完全对我在第一步中创建的用户的权利。
  4. 然后我在.Net中创建了一个包装器应用程序,该应用程序使用具有应用程序文件夹完全权限的用户凭据启动主应用程序。我的包装器应用程序从存储在服务器上的加密文件中读取用户和密码详细信息。我对启动器应用程序进行了模糊处理,以隐藏用于读取用户名和密码的解密算法。
  5. 最后,我在每个工作站上创建了启动器应用程序的快捷方式。
  6. 嗯,这就是我解决它的方法,它运作良好...... 差不多 100%!! ;)我唯一的轻微(并且非常奇怪)打嗝是这样的......在重新启动客户端计算机后,在启动的前4分钟内启动应用程序将导致访问被拒绝与指定用户一起运行的应用程序尝试写入注册表时出现错误信息。如果应用程序在启动4分钟后启动(是的,我定时!!),然后突然写入注册表工作完美无缺。确实非常奇怪的问题,也许我会在stackoverflow上提出一个单独的问题...也许有人在这里知道启动时这种奇怪异常的原因。

    反正。感谢大家的想法和想法,他们帮助我找到了解决方案。

相关问题