如何安全地存储Windows应用程序的数据库凭据?

时间:2010-09-06 14:17:51

标签: windows database security registry credentials

我有一个python应用程序,旨在作为Linux上的服务运行,我被要求将它安装在没有Linux机器的办公室的Windows XP盒子上(对我而言,这使它变得奇怪而且令人困惑的地方,因为我几乎没有为Windows开发的经验。)

在Linux上,应用程序拥有自己的用户,应用程序和数据库凭据文件位于只能由该用户访问的加密文件夹中。 (我想声明我不是一名密码学家,如果在这个设置中已经有明显的安全错误,我很高兴让他们指出我!)

如何在Windows XP计算机上通过类似或不同的方式实现同​​等级别的安全性?也就是说,如何阻止有权访问计算机或磁盘的人改变程序或阅读凭证?

一点背景:主机窗口框是具有非管理权限的用户每天使用的工作站。安全资产是个人数据,大致与学校报告一样敏感。该应用程序旨在供大约10人使用,他们使用个人密码对数据库进行身份验证(在数据库中存储盐水和散列)。

有一个非常相似的问题得到了答案:

  

on Windows you would store the credentials in the registry in a location protected by an ACL

但是,它没有触及保护程序文件的方面,而且它似乎假设比我目前享受的更高级别的Windows体验:)我不知道如何使用ACL保护注册表项,我也不能从程序中访问受保护的密钥。我们非常感谢在陌生环境中为开发人员提供的简单说明!

1 个答案:

答案 0 :(得分:2)

您的问题不清楚您的应用程序的功能以及您的安全要求。我将做一些假设,并根据它们提供答案。如果这些假设不正确,请在评论中澄清,我会更新。

我假设您有一个应用程序:

  • 将敏感数据存储在存储在工作站上安装的DBMS中的数据库中
  • 安装在共享工作站上
  • 每个用户都有自己的登录名(非管理员)
  • 允许不同的用户登录并与他们的数据交互
  • 用户运行连接到服务的应用程序
  • 服务与数据库连接,向用户提供数据
  • 服务在其自己的用户帐户下运行

如果这是正确的,那么你应该没有太多问题。

该服务可以在任何帐户下运行,但它很容易让它在其中一个标准(本地计算机或网络服务)下运行。配置数据库,以便只有此帐户才能访问它。在Sql Server中,我只授予该用户帐户(以及框中的管理员)对数据库的登录和访问权限。

如果用户不是管理员,则这是您需要的唯一安全保护。现在,当前端连接到服务时,用户可以提供用户名/密码,服务可以对存储在数据库中的盐渍和散列密码进行身份验证。所有这一切都是安全的,只要1)每个用户都有自己的登录2)通信是安全的(使用命名管道或SSL)和3)没有病毒或键盘记录器在管理员的凭据下运行。


您可以通过运行services.msc(或右键单击MyComputer并选择“管理”或单击“控制面板”中“管理工具”菜单下的“服务”或可能以多种不同方式选择服务来配置服务。 )。

打开服务列表,右键单击您的应用并点击“属性”。从那里,使它看起来像这样: alt text