放心,我答应你。安全......好吧,安全与数据库服务器的物理位置关系不大。
不过,要回答您的三个问题:
- 首先,看看如何使用数据库服务器安全模型限制对数据库表的访问。也就是说,如果您的应用程序不需要删除表,请确保它用来连接的用户没有该能力。其次,研究如何加密数据库服务器和应用程序之间的连接。在 Windows 中,这通过 kerberos 非常透明,甚至可以通过组策略设置强制执行,不确定其他平台。第三,查看数据库具有哪些功能来加密“静态”数据。意思是,它本身是否支持对实际数据文件本身的加密?
这里的要点是,您的应用程序只是数据库服务器本身的一个可能入口点。问问自己,如果有人可以直接连接而无需使用您的应用程序凭据通过您的应用程序会发生什么。接下来问,如果他们发现 SQL 注入问题会发生什么。另外,问问自己,如果有人能够监控您的应用程序和服务器之间的 IP 流量,可以收集到哪些信息。他们能辨别任何数据吗?最后,问问自己,如果他们得到数据库本身的副本怎么办?
您选择#1 的长度将取决于几个因素,例如数据的价值(例如:如果丢失,您、您的公司或您的客户会发生什么);并且,您需要多少时间来提出理想的解决方案?
可扩展性:这纯粹是负载的函数。不幸的是,扩展大多数数据库应用程序的唯一方法是扩展。这意味着您需要在需要时购买更大的数据库服务器。Stack Overflow 不久前经历了这个。某些数据库类型(nosql、mongodb 等)支持称为粉碎或分片的概念。MySql、PostGreSql 等没有。相反,您必须专门设计应用程序来处理它。这意味着不使用诸如自动递增键之类的东西。这可能是一个皇家 PITA ......这就是为什么根据您的应用程序扩大规模是一个更容易前景的原因。
无法通过“localhost”访问另一个 VM。localhost 定义对当前服务器的访问。该服务器是否是虚拟机并不重要。您必须按名称引用您的数据库服务器。现在,将数据库 VM 转换到另一台物理服务器应该具有零影响,因为您通过名称引用它。除此之外没有任何其他考虑。