【问题标题】:.NET - Best way to store encrypted offline data in Desktop Application.NET - 在桌面应用程序中存储加密离线数据的最佳方式
【发布时间】:2022-01-26 12:34:57
【问题描述】:

我找不到合适的主题,所以我正在创建这个问题。 我正在构建一个在 MS SQL 数据库中的数据上运行的桌面应用程序。那里的大部分数据每周/每月更新一次,并且大多数表格对最终用户都是只读的。我想,用户不需要直接在 SQL 数据库上在线工作,为了加快性能,我希望应用程序在启动时从 SQL 数据库下载必要的数据,然后使用本地保存的数据 + 以防万一服务器中断用户应该能够使用最新保存的数据加载应用程序。

问题是,数据需要加密并防止未经授权的使用。以前有SQLite数据库,但是跑在两个数据库上感觉效率不高。

你会建议什么解决方案?

【问题讨论】:

    标签: c# .net backup local offline


    【解决方案1】:

    加密的问题是:

    1 - 您需要解密才能在应用程序中使用数据,这会对性能产生影响。

    2 - 如果你可以解密,那么非法获取数据的人也可以解密,所以它并不那么安全。

    如果你确实想走这条路,你可以从数据库中读取数据,解密然后缓存它,这将加速应用程序。

    缓存可能会持续几天,因为您说它只会每隔几周/几个月更新一次,并尽量减少数据库调用

    【讨论】:

    • 您将此添加为答案,但它应该是您问题的一部分。请删除答案并将其放入您的问题中! :)
    • @S.tenBrinke - 这是我对这个问题的回答,因此我将其添加为答案。
    【解决方案2】:

    我不确定您的建议是否是一个很好的解决方案。

    您拥有用户不应完全访问的数据;所以你希望它加密。

    限制访问的最简单方法是根本不授予用户访问权限;例如,将服务器放在它前面。服务器只能与数据库通信,并且数据库是安全和加密的等等。现在您不需要客户端加密(如果黑客有足够的时间和金钱,它总是可以被破坏)。您只需保护您的服务器并公开一些 API 和繁荣,您就是安全的。

    但是,让我们进一步了解您的数据。客户端当然需要查看应用程序中的数据,但在本地运行时不允许访问数据库。为什么在这种情况下不允许用户查看本地数据库中的数据?这听起来像是一个安全问题,用户可能在他们的电脑上拥有您公司或其他用户的(私人)数据,而您永远都不想要这些数据。因此,假设我们只在您的电脑上存储用户无论如何都可以在应用程序中看到的数据。现在安全性更好了!

    现在解决性能问题。有多大问题?您可以在服务器和客户端中实现缓存,具体取决于您遇到的性能问题。当服务器只返回允许客户端看到的数据时,可以在客户端缓存,也可以在服务器缓存。

    如果客户端已经缓存了数据并且不需要检索新数据(这是什么时候?),那么它不需要与 API 对话。如果客户端没有数据或有过时的数据,API 会检查它是否缓存了新数据,如果有则立即返回。

    【讨论】:

    • 好的,所以有一个带有 MS SQL 数据库的服务器。服务器只在公司网络中运行,因此无法从外部访问它。用户可以并且应该有权访问其所有数据,但只读。根据公司政策,如果未加密,则无法将这些数据本地存储在用户 PC 上。性能现在不是问题,因为我有 50 个用户,但它可能会蔓延到 500+ 个用户不断从数据库读取数据。这些数据对于日常运营至关重要,因此我想确保用户不会失去对它的访问权限。
    猜你喜欢
    • 2014-06-04
    • 1970-01-01
    • 2011-06-25
    • 2020-01-09
    • 1970-01-01
    • 2015-06-18
    • 2012-10-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多