如何允许我的应用程序的其他用户从他们的计算机访问 RDS?

How do I allow other users of my application to access RDS from their computer?

我正在为我的公司创建库存应用程序。该应用程序通过 RDS 存储其库存信息。我正在使用 MySQL 并使用 pymysql 进行连接。在整个开发过程中,我从创建数据库的笔记本电脑连接时没有遇到任何问题。我想知道如何允许其他装有该应用程序的计算机连接。有没有办法避免将每个单独的 IP 地址添加到安全组?我希望那些下载了应用程序的人无需额外的登录凭据即可访问。

当我在家用计算机上使用该应用程序时,我在尝试连接到数据库时收到错误消息。

pymysql.connect(db=dbname, host=host, port=port, user=user, password=password)

Side-note 安全性:

授予远程应用程序直接访问您的数据库通常是一个非常糟糕的主意,尤其是在不给每个user/app自己的密码的情况下。

您实际上是在向任何拥有凭据的人开放您的数据库,并且您将这些凭据包含在应用程序本身中。有人可以获得这些凭据,并且可能会对数据库的内容造成相当大的破坏。

此外,您locking-in您的数据库架构将来无法更改。假设您有一个包含特定列的 table,并且您的应用程序直接访问该 table。将来,如果您修改 table,您应该需要同时更新 使用数据库 的每个应用程序。如果其他人 运行 自己系统上的应用程序,那真的不可行。

更好的方法是 公开一个 API 并让应用程序使用 API 访问数据:

  • API 应该管理 身份验证 ,因此您可以确定允许谁进入,更重要的是,跟踪谁在做什么。这也将避免必须添加用户的每个单独 IP 地址的问题,因为您将管理一个身份验证层。
  • API 将应用一层业务逻辑,而不是让远程应用程序为所欲为。这会阻止远程用户执行删除整个数据库等操作。这也意味着,远程应用程序不是简单地传递 SQL 语句,而是需要通过定义的 API(通常以操作 + 参数的形式)传递信息。
  • 它为应用程序提供了一个 stable 接口,允许您在后台进行更改(例如更改 table 的内容),同时仍然向客户端应用程序呈现相同的界面。

经验法则:只有一个应用程序服务器应该直接访问给定的数据库。您可能有多个服务器 运行 相同的软件以提供高可用性和支持高流量负载,但不要让客户端应用程序直接访问数据库。这就是使“3 层”应用程序比“2 层”应用程序好得多的原因。 (Client - Server - Database)