【问题标题】:How to securely store database credentials for Windows application?如何安全地存储 Windows 应用程序的数据库凭据?
【发布时间】:2010-09-10 02:21:20
【问题描述】:

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

在 Linux 上,应用程序有自己的用户,并且应用程序和数据库凭据文件驻留在只有该用户才能访问的加密文件夹中。 (我想声明我不是密码学家,如果此设置中已经存在明显的安全错误,我很高兴有人向我指出它们!)

如何在 Windows XP 机器上通过类似或不同的方式实现同​​等级别的安全性?也就是说,如何防止那些可以访问计算机或磁盘的人更改程序或读取凭据?

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

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

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

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

【问题讨论】:

  • 我相信这个问题更适合SuperUser.com,因为您需要做的事情不涉及任何编码。
  • 我想到了可能需要新代码来访问以不同格式存储的安全数据的解决方案,例如。受保护的注册表项。如果其他人同意在其他地方更合适,我很高兴迁移该问题。
  • 实际上我认为最简单的方法是将数据存储在用户主目录下的文件中(应用程序在 Windows 中也需要自己的用户才能正常工作) .顺便说一句,我很抱歉,但我没有足够的代表投票将其迁移到 SuperUser.com
  • 您想在之前的评论中添加建议作为答案吗?然后可以直接进行投票和评论。谢谢。
  • 恕我直言,如果我没看错的话,我不会迁移它。

标签: windows database security registry credentials


【解决方案1】:

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

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

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

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

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

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


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

调出服务列表,右键单击您的应用并点击属性。从那里开始,让它看起来像这样:

【讨论】:

  • 在“服务在其自己的用户帐户下运行”之前,您的所有假设都是正确的,因为我不知道服务是否可以作为特定用户运行。您知道我如何指定服务以哪个用户身份运行吗?非常有用的答案,谢谢!
  • 是的,您可以轻松配置 Windows 服务以在任何用户帐户下运行。为此添加了一个活泼的。似乎在网上的任何地方都找不到 friggen 文档!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-05
  • 1970-01-01
  • 2012-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多