代码之家  ›  专栏  ›  技术社区  ›  Ian Mackinnon

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

  •  0
  • Ian Mackinnon  · 技术社区  · 14 年前

    我有一个设计为在Linux上作为服务运行的python应用程序,我被要求将它安装在一个没有Linux机器的办公室里的Windows XP盒子上(对我来说,这使它成为一个奇怪和混乱的地方,因为我几乎没有为Windows开发经验)。

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

    在Windows XP计算机上,如何通过类似或不同的方法实现同等的安全级别?也就是说,我如何才能防止那些有权访问计算机或磁盘的人更改程序或读取凭证?

    一点背景:主机Windows框是一个工作站,每天都由具有非管理权限的用户使用。安全资产是个人数据,与学校报告一样敏感。该应用程序将由大约10个人使用单独的密码(存储在数据库中的salt和hash)对应用程序进行身份验证。

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

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

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   Will    14 年前

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

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

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

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

    该服务可以在任何帐户下运行,但只要按照某个标准(本地机器或网络服务)运行就足够容易了。配置数据库,以便只有此帐户可以访问它。在SQL Server中,我只授予该用户帐户(以及框中的管理员)对数据库的登录和访问权限。

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


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

    打开服务列表,右键单击应用程序并单击属性。从那里开始,让它看起来像这样:

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

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

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

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

    该服务可以在任何帐户下运行,但只要按照某个标准(本地机器或网络服务)运行就足够容易了。配置数据库,以便只有此帐户可以访问它。在SQL Server中,我只授予该用户帐户(以及框中的管理员)对数据库的登录和访问权限。

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


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

    打开服务列表,右键单击应用程序并单击属性。从那里开始,让它看起来像这样: alt text