【问题描述】:

我对构建 Electron 应用程序还很陌生,我看过很多例子,其中 Electron 应用程序直接连接到远程数据库(在我的例子中是 MySQL),所以我开始想知道这样做可能会出现什么问题.我的第一个想法是拥有一个远程 API(构建在 Express 之上),它可以与数据库进行通信,而 Electron 应用程序 (React) 将只使用该 API。

有什么建议吗?想法?

谢谢。

【问题讨论】:

  • 没有“最佳实践”,问问你自己,为什么要额外的一步使用 HTTP API?您是否期望其他服务调用您的 api 或只调用电子应用程序?
  • 取决于您的情况。如果您打算在非电子应用程序中重用代码,那么这可能不是一个好主意。
  • 如果您的数据库公开托管在 Internet 上,并且任何随机用户都可以下载该应用程序以连接到您的数据库,则所有数据基本上都是公开的,并且每个人都可以出于所有意图和目的进行无限制的写入访问。也许不是那么理想。如果它是一个非公开的应用......好吧,这取决于。
  • 投票重新开放。我修改了主题标题并稍微编辑了问题,并且认为这不再主要需要征求意见。我也认为之前完全可以用事实来回答(就像我所做的那样)。我希望其他人投票重新开放。
  • 您不应该通过互联网发送 SQL,IMO。尤其是当它在您自己的服务器之外的任何设备上运行时。

标签: mysql node.js reactjs electron


【解答1】:

直接连接到数据库的一个问题是您必须将数据库凭据嵌入到电子应用程序中,以便任何想要窥探代码的人都可以使用它们。此外,一旦暴露了凭据,您就无法控制任何人可以对您的数据库执行的操作。

这就是为什么您通常会向用户提供他们自己的凭据,让用户通过 Web 服务器进行身份验证,然后让 Web 服务器成为唯一可以直接与远程数据库对话的服务器。然后,您可以完全控制数据库发生的事情,因为您的 Web 服务器是中介,并且是唯一真正与数据库对话的服务器。

这并不意味着在某些情况下您可能希望客户端直接与数据库对话,因为这实际上取决于您在做什么、数据是什么以及允许的风险敞口是什么不可信代码直接操作数据库中的数据。

请记住,您无法保护嵌入在客户端中的凭据。它们可以被客户端发现并用于其他用途。

【问题讨论】:

  • 这是个好点子,但包括 MySQL 在内的大多数数据库都有自己的访问管理。如果可以避免这种情况,我会更担心将数据库服务器暴露给外部连接的必要性。当然,额外的抽象层使其更具前瞻性。
  • 感谢您的回答,但是您能否举一个客户端必须直接与数据库对话的应用程序示例?我正在开发的应用程序用于管理本地小型企业的员工、工作量和工作时间。 @jfriend00
  • @scarably - 我想不出一个可以通过广泛开放的互联网直接访问数据库的方法,因为滥用的机会太多了。也许在访问受限的本地网络上,或者您有其他级别的足够访问控制(例如具有自己的登录名的 VPN)。