如何以安全的方式从外部访问PostgreSQL数据库

时间:2019-05-09 21:23:45

标签: python postgresql heroku

我有一个在Heroku上运行的flask应用程序,该应用程序可以读写Heroku PostgreSQL数据库。然后,我想在客户端计算机上运行仅从该数据库读取的本地python应用程序。这个想法是为了能够使用在Heroku上运行的Web应用程序配置在世界各地运行的程序。

flask应用程序已经启动并正在运行,并且可以正确修改数据库。 现在,我必须使用本地运行的python应用程序从计算机连接到该数据库。

要从外部连接到Heroku Postgres数据库,Heroku提供以下[解决方案](https://devcenter.heroku.com/articles/connecting-to-heroku-postgres-databases-from-outside-of-heroku#credentials/

我想使用客户端计算机上运行的本地应用程序访问此云数据库。但是,要获取DATABASE_URL,有时必须使用我的帐户电子邮件和密码登录Heroku,以便访问所有内容。我希望可以有一种方法来与权限受限的用户一起访问此外部数据库。在我的情况下,我想与只能读取数据并使我的Heroku帐户不在其中的用户访问它。

使用PostgreSQL是我的第一种方法,但是我偶然发现了这个问题。我对吗,这是一个问题吗?

我的第二种方法是使用Google Drive API将我的Web应用程序链接到我的本地应用程序。 Web应用程序将修改文件,本地应用程序将与具有READ-ONLY权限的用户一起读取文件。这样,如果以某种方式对本地应用程序进行了反向工程或黑客入侵,则不会泄露关键信息。我想我可以使用Google Drive API来做到这一点。

有没有更好的方法?我使用的是免费工具,目前数据库或google-drive API处理的数据是轻量级的。我觉得如果我想扩展应用程序,那么Google Drive API并不是最好的解决方案。

1 个答案:

答案 0 :(得分:2)

如果您的代码必须在客户端计算机上运行,​​则最好的选择可能是运行服务器端API并连接到该API,而不是直接建立数据库连接。这样,您就不会向用户公开数据库凭据或Heroku凭据。

默认情况下,Heroku数据库URL授予读/写访问权限。在数据库和面向客户端的代码之间放置一个API,还可以使您从第二个代码库强制执行只读行为。

如果由于某种原因这是不可行的,则可以create new read-only credentials for your database并将此新的只读数据库URL公开在非常小的服务器端API中。您的第二个应用程序可以从您的API加载连接信息,然后直接进行数据库查询。