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

时间:2019-05-07 17:46:56

标签: python amazon-web-services amazon-rds pymysql

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

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

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

enter image description here

1 个答案:

答案 0 :(得分:0)

关于安全性的注释:

授予远程应用程序直接访问数据库的权限通常是一个非常糟糕的主意,尤其是不给每个用户/应用程序分配自己的密码。

您正在有效地向具有凭据的任何人打开数据库,并且将这些凭据包括在应用程序本身中。有人可以获得这些凭据,并且可能会对数据库的内容造成相当大的损害。

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

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

  • API应该管理身份验证,因此您可以确定允许谁进入,更重要的是,可以跟踪谁在做什么。这样还可以避免必须添加用户的每个IP地址的问题,因为您将管理身份验证层。
  • API将应用业务逻辑层,而不是允许远程应用程序执行其期望的任何操作。这使远程用户无法执行删除整个数据库之类的操作。这也意味着,代替远程应用程序简单地传递SQL语句,它们将需要通过定义的API(通常以Action + Parameters的形式)传递信息。
  • 它为应用程序提供了 stable接口,使您可以在后端进行更改(例如,更改表的内容),同时仍向客户端应用程序提供相同的接口。

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