我有一个正常的Apache / MySQL服务的公司和这些公司的用户login到一个Web应用程序。 所以所有公司的每个人都在同一个用户表中。
虽然我的代码确实试图让公司隔离在PHP中,比如SELECT * FROM Users WHERE Company=$COMPANY ,但我确实看到了SQL注入从其他客户获取私有数据的可能性,因为代码库很可能相当广阔。 我们正在审查代码,但按照这个速度,我们将在几年内完成。
同时,我正在考虑Docker,希望给我的每个客户自己的容器提供Apache服务器(带有一个小缓冲区,2个php工作者),以及具有32或64 MB缓冲池的MySQL。 然后这个容器只允许1个TCP连接用于HTTPS,这个连接将根据主机名(例如customer-a.mycompany.com)进行反向代理。 没有文件被写入磁盘。 而且PHP源代码会使用git保持最新,所以也许我们甚至可以把选定的客户放在我们的testing版上。
我已经被告知,Docker并不是为上述场景devise的,也不会为我提供我所寻求的安全性。
我得到一个黑客可以注入代码到一个容器,并会影响到一个客户。 但是,Docker不会阻止发现用于其他客户的虚拟主机,从而减less黑客对大多数客户的影响。 只有一个我们可以在财务上处理,但不是12。
除了安全性之外,我很高兴看到为每个公司准备的MySQL缓冲池的可能性一般会更快,因为当客户A执行一个疯狂的SQL报告时,我猜测缓冲池被疯狂的报告覆盖,所以当客户B接下来做一个简单的查询时,必须从磁盘上重新获取数据。
将来,我希望在GUI上看到这些“容器”,并能够将它们拖放到另一个服务器上(更快,容器更less)。例如,为某些电力客户提供“更快”的速度。
上述任何梦想是否符合2017年的现实?
你认为我应该考虑什么平台/工具?
一般来说,好的虚拟主机提供商使用云Linux为多租户托pipe提供隔离和资源限制。 然而,在你的规模(12),我build议你去docker路线。 每个客户有一个容器(或两个)来服务他们的网站似乎对我来说很好。 不知道你指的是什么安全问题,但是你的状态很好,如果你:
如果你的客户共享一个数据库(无论什么原因),他们显然应该有严格的资助,以确保他们的用户不能查询他们不应该访问的数据库。 只有一个客户查询的数据库应该被分离到另一个容器中以获得最大的安全性。 共享容器中只保存共享数据库。