【问题标题】:How to effectively save database password in desktop application?如何在桌面应用程序中有效保存数据库密码?
【发布时间】:2010-01-28 14:46:46
【问题描述】:

我正在制作使用数据库(mysql)的桌面应用程序(我们称之为应用程序)。 更多应用的用户共享一个数据库用户。 示例:John 和 Mike 应用用户以“dbuser”等身份连接到 DB。

问题是:如何有效地为DB用户保存密码?(应用用户的密码存储在DB中)。

我发现的可能解决方案: 1. 在代码中 - 这实际上很愚蠢:D 2.在文本INI文件中——易于阅读! 3. 在外部文件中加密 - 很好,但需要访问应用程序。

【问题讨论】:

    标签: database desktop-application database-security


    【解决方案1】:

    (应用用户的密码存储在数据库中)。

    使用SHA1/SHA2 算法加密存储的密码。这是最常用的技术。 我不是 .NET 开发人员,但我很确定他们在某处提供了该功能。

    当用户登录时,再次加密给定的密码并将其与存储的密码进行比较。如果相等,则让用户登录。

    【讨论】:

    • 您只需覆盖它们。例如,查看任何动态网站:如果您想更改密码,您必须先提供旧密码,然后再编写新密码。系统对给定的旧密码进行加密,检查是否与实际存储的密码相同,然后对新密码进行加密并覆盖存储的密码。
    • 我明白了。好的,我给你举个例子。我决定更改我的 APP 使用的数据库服务器的位置 (IP)。我应该通过应用程序 GUI 来完成,还是只是“手动”从应用程序加载数据中编辑一些外部文件?
    • 如果您使用的是非常好用且简单的配置文件,我认为您可以让用户手动编辑该文件。如果 App 的目标用户是非常缺乏经验的用户,那么最好通过 App 的 GUI 来完成这项工作,通过 Preferences 窗口
    • 我同意数据库 IP 应该只在文件中的某个地方还有 db 用户,但加密(在外部文件中)
    • 也试试 SQLite (sqlite.org)。它是一个库形式的非常简单且小型的数据库系统。我猜它也与 .NET 框架打包在一起。您可以在任何表中存储任何设置首选项以及加密密码。数据库是项目目录中的单个文件
    【解决方案2】:

    您可以将其以加密格式存储在 INI 文件中。恕我直言,这是最好的方法。我将连接字符串以加密格式存储在 .NET 应用程序的 App.config 中。

    编辑:

    为了编辑连接字符串,我在 App.Config 文件 CSEncryption="Y|N|R" 的 AppSettings 中使用了另一个配置值

    如果是Y,连接字符串被加密,解密并使用它。

    如果为N,则连接字符串不加密,直接使用。

    如果是R,连接字符串不加密,加密并更新连接字符串,在App.Config中设置CSEncryption为'Y'。

    【讨论】:

    • 然后如何编辑加密文件?何时等迁移到另一个数据库主机名?
    • 除此之外,您应该始终使用安全通道 (SSL) 与服务器通信,否则任何人只要稍加努力就可以嗅探一些数据包并找出密码
    • +1 到 rsilva。如果可以通过网络访问数据库,最好使用 SSL 与其通信
    • 如果您要经历所有这些麻烦,请确保数据库用户拥有完成工作所需的最少权限。
    • Brettski -thanx,我处理了 :) 我也会尝试使用 SSL。
    猜你喜欢
    • 2013-05-01
    • 1970-01-01
    • 2010-09-18
    • 2021-12-31
    • 2012-11-28
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 2016-03-14
    相关资源
    最近更新 更多