![数据库服务器应该在哪里以及它的更新脚本应该从哪里运行?](https://linux22.com/image/650757/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%BA%94%E8%AF%A5%E5%9C%A8%E5%93%AA%E9%87%8C%E4%BB%A5%E5%8F%8A%E5%AE%83%E7%9A%84%E6%9B%B4%E6%96%B0%E8%84%9A%E6%9C%AC%E5%BA%94%E8%AF%A5%E4%BB%8E%E5%93%AA%E9%87%8C%E8%BF%90%E8%A1%8C%EF%BC%9F.png)
我目前在同一台服务器上有一个 Web 应用程序和数据库。我正在将数据库移动到一个专门用作数据库的新服务器上。现在我有在 Web 应用程序上运行的夜间脚本,这些脚本从我们的 ERP 系统插入和更新应用程序的数据。执行此导入的脚本应该从数据库服务器运行还是从应用程序服务器运行?对我来说,将所有应用程序逻辑放在一起是有意义的,但从性能的角度来看,让每晚更新数据库的脚本从实际数据库服务器运行更有意义(我认为)。
可能需要或不需要回答问题,但我有一个网站和 3 个网络应用程序,它们都正在从本地数据库安装转换为新的中央数据库。
最后一个问题是,数据库服务器是否应该位于 DMZ 中但被锁定为仅接受应用程序服务 IP 的连接,还是应该位于防火墙后面?
有帮助的附加信息:所有 Python 应用程序(TG 和 Flask)都在 postgresql 9 上运行
编辑:如果这里不适合发帖,请告诉我应该发在哪里。我最初在程序员那里发帖,但没有得到任何回复,在重新阅读我的问题后,我觉得这个网站“更好”。
答案1
假设应用程序服务器和数据库服务器之间的延迟较低,那么无论在哪一侧运行脚本,性能大致相同。
我支持最容易维护的方案。将脚本保留在应用程序服务器上有两个原因:
1)对现有的做事方式进行较少的改变
2) 所有代码(包括这些脚本)都放在一个地方。这可能对版本控制/部署有好处。
对于防火墙/DMZ:数据库和应用程序之间的信任度越低越好。如果你能将数据库服务器置于防火墙后面,并且只允许来自 DMZ 中的应用服务器的 PostgreSQL 端口(默认情况下为 5432/tcp),那么受感染的应用程序帐户就必须通过 PostgreSQL 端口才能进一步渗透或破坏你的数据。
然后,您可以使用以下命令在数据库级别进一步限制应用程序:
1)最小应用程序数据库权限(仅在适当的情况下选择,...)
2)可更新视图(一种可以提供更有限的数据更新的技术)
3)更新触发器(另一种可以限制更新的技术)
分层安全:)