为所有人开放数据库端口是个好主意吗?

Ref*_*lon 12 mysql nginx port

好吧,我对服务器的东西完全陌生,但我有一个运行 MySql 的 VPS。

我想使用 Python 创建一个移动应用程序,但我需要访问一个可供所有人使用的数据库。

所以现在我正在考虑在我的 VPS 上打开端口 3006,以便我们可以从 python 应用程序访问数据库。但这感觉不是一个好的做法。

有什么建议吗?

Tim*_*Tim 30

不要让您的数据库可供公开访问。数据库中的一个错误或密码较弱,有人删除/窃取/更改了所有内容。

您的移动应用程序不应该直接访问数据库,它应该访问一个 API,在您的情况下,该 API 可能是用位于 Nginx 后面的 Python 编写的。您的 API 调用需要经过身份验证以避免滥用,并且最好进行速率限制以避免 DDOS 攻击。

  • 如果您打开数据库端口,人们可以从移动应用程序中提取数据库用户名/密码,然后使用它们在数据库上执行任何他们想要的操作 - `update users set password='123456' where name='admin'`。如果 API 不允许 SQL 注入,并且在任何地方都没有“更新用户”语句,那么让 API 执行此操作会“困难得多”。 (10认同)
  • 这是最近一个很好的例子,有人直接公开他们的数据库供最终用户使用,并说明了为什么这是一个坏主意:https://kernal.eu/posts/linuxfx/ (5认同)
  • @GuntramBlohm 您可以为每个用户提供自己的数据库帐户。和/或您只向 db 用户(只读帐户)授予 SELECT 权限。数据库内置了很多这样的东西,你只需要知道如何使用它们...... (2认同)

HBr*_*ijn 11

为所有人开放数据库端口是个好主意吗?
……感觉这不是一个好的做法。

不,不是。

访问控制和安全当然是那里的大问题。

从应用程序设计的角度来看:当数据库和应用程序之间存在显着的延迟时,大多数与数据库相关的事情都会可怕地消亡。

这就是大多数手机应用程序被设计为连接 API 的原因之一。


Esb*_*sen 5

非常糟糕的主意。反编译应用程序非常容易。然后任何人都拥有您数据库的凭据。假设该应用程序每次安装都使用相同的登录信息,那么就会出现大量数据泄露。即使您为应用程序的每个用户使用不同的登录名,您也需要在行级别的表上设置正确的权限,这是一项艰巨的任务,我认为这是不可能的。

构建一个 API 更容易、更正确,所有通信都通过它完成