【问题标题】:How secure the user name and password in the connection string?如何保护连接字符串中的用户名和密码?
【发布时间】:2014-01-24 07:40:25
【问题描述】:

在开发 Windows 应用程序时:

  1. 如何保护连接字符串中的用户名和密码?

  2. 像银行这样的组织,他们会将其数据库的用户名和密码提供给应用程序开发人员吗?如果不是这些应用程序开发人员通常如何编写数据库连接?

  3. 保护连接字符串中的用户和密码的行业标准是什么?

谢谢

【问题讨论】:

    标签: c# database ado.net sqlconnection


    【解决方案1】:
    1. 如何保护连接字符串中的用户名和密码?

    要么使用 Windows 身份验证来消除连接字符串中对密码的需要,要么使用以下一项或多项的组合:

    请注意,上述技术适用于服务器应用程序(例如 ASP.NET),其中对服务器的访问权限可能仅限于授权管理员。它不适用于直接访问数据库的客户端应用程序。

    还请注意,仅靠加密本身是不够的:它只是用控制对加密密钥的访问的问题来代替控制对明文配置文件的访问的问题。使用受保护的配置时,您需要决定如何限制对用于加密配置文件的加密密钥的访问。

    2。 像银行这样的组织,他们会将其数据库的用户名和密码提供给应用程序开发人员吗?如果不是这些应用程序开发人员通常如何编写数据库连接?

    一般来说,开发人员只会获得在开发/测试环境中访问数据库的凭据。对生产数据库的访问将受到限制。

    3。 保护连接字符串中的用户和密码的行业标准是什么?

    没有“行业标准”,但请参阅问题 1 的答案。

    【讨论】:

    • 在您提到的关于测试环境的第二个答案中,我相信您的意思是这是一组与原始数据平行的虚拟数据?
    • @sniff_bits - 开发/测试数据库中的数据取决于组织。如果生产数据是机密的,它可能是虚拟数据或者可能是生产数据的匿名版本。如果它不是机密的,它可能只是生产数据的快照。
    • @Joe:我想将我的应用部署给最终用户。如何保护用于连接到集中式 SQL 服务器的用户名/密码?正如您所写的“它不适用于直接访问数据库的客户端应用程序。”
    • @YukiSakura - “它不能很好地工作”,因为如果用户有足够的决心,他将能够访问数据库。为了缓解这种情况,您可以限制允许数据库登录执行的操作(例如,仅执行应用程序所需的存储过程)。但它永远不会像在客户端和数据库之间有 Web 服务的架构那样安全,因为客户端无法直接访问数据库。
    【解决方案2】:

    您可以像 web.config 一样在 app.config 中encrypt sections。 MS 称之为受保护的配置。 像这样

    <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
      <EncryptedData>
        <CipherData>
          <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>
        </CipherData>
      </EncryptedData>
    </connectionStrings>
    

    【讨论】:

      【解决方案3】:

      来自 MSDN:

      ASP.NET 2.0 引入了一项称为受保护配置的新功能,它使您能够加密配置文件中的敏感信息。虽然主要是为 ASP.NET 设计的,但受保护的配置也可用于加密 Windows 应用程序中的配置文件部分。有关受保护的配置功能的详细说明,请参阅Encrypting Configuration Information Using Protected Configuration

      以下配置文件片段显示加密后的 connectionStrings 部分。 configProtectionProvider 指定用于加密和解密连接字符串的受保护配置提供程序。 EncryptedData 部分包含密文。

       <connectionStrings configProtectionProvider="DataProtectionConfigurationProvider">
        <EncryptedData>
          <CipherData>
            <CipherValue>AQAAANCMnd8BFdERjHoAwE/Cl+sBAAAAH2... </CipherValue>
          </CipherData>
        </EncryptedData>
      </connectionStrings>
      

      在运行时检索加密的连接字符串时,.NET Framework 使用指定的提供程序来解密 CipherValue 并使其可用于您的应用程序。您无需编写任何额外的代码来管理解密过程。 请阅读 MSDN 上的以下文章以获取更多信息:

      Connection Strings and Configuration Files

      【讨论】:

      • 在 SO 上,仅链接的答案不被接受。尝试添加一些细节
      • 不,但我想您可以建立一个总结文章的答案,然后包含链接。那会增加价值。链接不会增加价值。
      • 在 cmets 上浪费时间......最好从 MSDN 复制信息作为答案。
      【解决方案4】:

      您应该使用参数。

      示例 SqlCommand command = new SqlCommand("select * from Login where Username= @name", conn); command.Parameters.Add(new SqlParameter("@name", uname.txt)); .

      【讨论】:

      • 这与保护连接字符串数据无关
      • 我认为OP正在寻找如何加密用户并将连接传递给数据库,而不是选择用户并传递from一个数据库。
      猜你喜欢
      • 1970-01-01
      • 2011-09-22
      • 1970-01-01
      • 2011-04-15
      • 1970-01-01
      • 2010-10-20
      • 2011-08-21
      • 2021-10-31
      • 2013-08-30
      相关资源
      最近更新 更多