在SQLite

时间:2016-11-28 13:54:19

标签: java sql database windows sqlite

我最近在OOP中为我的大学项目创建了一个使用Java的密码管理器。为了处理数据库,我选择了SQLite,因为使用MySQL或SQL服务器对于一个小项目来说变得忙碌。虽然我已经完成了提交,但我在想是否可以在项目中进一步改进。

我观察到的最大缺点是,如果有人设法在系统中找到数据库的位置(这太简单了),打开数据库将非常简单。

现在出现两个问题 -

  1. 将显示用户的密码列表
  2. 任何人都可以使用SQLite管理器修改数据。
  3. 为了解决第一个问题,我已经使用了AES加密,它工作得很好。但是,第二个问题仍然存在。

      

    所以在坚果shell中,如何阻止我的SQLite数据库被修改,除了密码管理器本身?

    请注意,我的应用程序只是家用PC上使用的脱机密码管理器。因此,您可以相应地考虑威胁级别。此外,密码管理器本身必须修改数据库内容,因此分配权限应该不会阻止应用程序这样做。

    注意:我想知道我们是否可以使用SQLite的限制,一次只能建立一个写入数据的连接。使用这个,入侵者将无法修改它。但是,我不确定它是如何实施的。

1 个答案:

答案 0 :(得分:2)

限制用户访问

只有操作系统才能保护文件不被未经授权的人访问。将数据库放入一个只能由当前用户访问的文件夹中,并为每个用户提供一个单独的数据库。

<强>加密

您已经加密了密码,这很好。如果要加密整个数据库,可以查看SQLite Encryption Extension

  

SQLite加密扩展(SEE)是SQLite的公共域版本的附加组件,允许应用程序读取和写入加密的数据库文件。

另请查看问题SQLite with encryption/password protection

<强>攻击

如果有人有权访问数据库文件,会发生什么?

如果数据库得到妥善保护,攻击者无法获得普通密码(至少在合理的时间内没有)。在最坏的情况下,密码被另一个密码替换,但除了使用错误的密码并重置密码之外,这将无法实现。因此,最糟糕的情况是您将丢失已保存的密码。

您无法阻止单台计算机上的数据丢失。例如,硬盘有时会停止工作,有人可能会窃取整个PC,格式化硬盘等等。

<强>备份

如果您确实希望确保数据未被修改,则需要在不同的计算机上保留备份,以最大限度地降低某人访问所有数据的可能性。例如,您可以将数据库文件上载到云服务。然后签署该文件,以便您可以查看文件是否妥协,如果是,则回退到另一个版本。

<强>结论

您的密码管理器足以支持离线工具。如果要提高数据完整性,则必须将数据传输到其他计算机。