限制对本地 PouchDB 的访问

Restricting Access to local PouchDB

我想在 Web 应用程序桌面客户端中使用 PouchDB。我工作的环境中,计算机用户是通用的,不同的人使用相同的计算机帐户。但是,使用我的应用程序时,他们必须使用授予他们相应权限的个人用户名登录。系统离线工作,定期复制到服务器

翻遍PouchDB的文档,上网查了一下,才知道本地PouchDB是没有访问限制的。任何有权访问 client/browser 的人原则上都可以访问缓存数据。在我的网络应用程序中实施任何类型的用户访问控制似乎也毫无意义。可以简单地更改代码以允许访问。

我想到了以下可能的解决方案,想知道它是否可行:

  1. 第一次接触中央服务器 应用程序将用户凭据发送到服务器。服务器使用用户凭据加密一个特殊的数据库密钥,并将此加密的数据库密钥发送回客户端应用程序。客户端应用程序将此加密的数据库密钥存储在 localStorage 中,解密包含的数据库密钥,使用此数据库密钥(例如 crypto-pouch)创建和加密本地 PouchDB。
    1. 离线使用 用户登录应用程序,他的凭据用于解密 localStorage 中的加密数据库密钥,然后他才能访问存储的数据。如果有人更改了应用程序的代码,他仍然无法访问加密的 PouchDB。

我看到了以下优点: - 没有正确的凭证就无法访问本地数据 - 多个用户可以访问同一个本地 PouchDB,因为 databaseKey 是相同的。 - 数据库密钥甚至可以定期更改(应用程序在连接到服务器期间比较本地加密数据库密钥和从服务器接收的密钥,如果它们不同,应用程序使用旧密钥解密数据库并用新密钥加密)

这看起来是一个可行的解决方案吗?是否有任何 other/better 保护本地 PouchDB 的方法?

crypto-pouch 确实是加密本地 PouchDB 的最佳方法。不过,我觉得你说的地方

Offline usage User logs into the app, his credentials are used to decrypt the encryptedDatabaseKey in localStorage, only then has he access to the stored data

我认为解密密钥并用它来解密数据库是没有意义的;您还不如像用户一样创建并记住密码吗?然后你可以用它作为 crypto-pouch.

的关键