Facile, je vous l'accorde. Sécurisé .. bien, la sécurité a très peu à voir avec l'emplacement physique du serveur de base de données.
Pour accéder à vos trois questions cependant:
- D'abord, regardez comment vous pouvez limiter l'accès aux tables de base de données en utilisant les serveurs de base de données modèle de sécurité. A savoir, si votre application n'a pas besoin de supprimer des tables, assurez-vous que l'utilisateur qu'elle utilise pour se connecter n'a pas cette capacité. Deuxièmement, regardez comment crypter la connexion entre le serveur de base de données et votre application. Dans Windows, cela est assez transparent grâce à kerberos et peut même être appliqué par les paramètres de stratégie de groupe, pas sûr sur les autres plates-formes. Troisièmement, examinez les fonctionnalités de la base de données pour crypter les données "au repos". Ce qui signifie, est-ce que nativement soutenir le cryptage des fichiers de données eux-mêmes?
Le point ici est que votre application est seulement un point d'entrée possible pour le serveur de base de données lui-même. Demandez-vous, ce qui se passerait si quelqu'un peut se connecter directement sans passer par votre application en utilisant vos informations d'identification d'applications. Ensuite, demandez ce qui peut arriver s'ils trouvent un problème d'injection SQL. Demandez-vous également quelles informations peuvent être glanées si quelqu'un est capable de surveiller le trafic IP entre votre application et le serveur. Peuvent-ils discerner des données? Enfin, demandez-vous, que se passe-t-il s'ils obtiennent une copie de la base de données elle-même? Les longueurs que vous allez pour # 1 dépendront de plusieurs facteurs tels que: Quelle est la valeur des données (par exemple: ce qui se passerait pour vous, votre entreprise ou vos clients si elle était perdue); et, Combien de temps avez-vous pour trouver une solution idéale?
évolutivité: Ceci est purement une fonction de la charge. Malheureusement, la seule façon de mettre à l'échelle la plupart des applications de base de données est de l'augmenter. Cela signifie que vous acquérez un serveur de base de données plus volumineux en cas de besoin. Stack Overflow a traversé cela il n'y a pas si longtemps. Certains types de bases de données (nosql, mongodb, etc) supportent un concept connu sous le nom de déchiquetage ou sharding. MySql, PostGreSql, etc ne le font pas. Au lieu de cela, vous devrez concevoir spécifiquement l'application pour le gérer. Ce qui veut dire ne pas utiliser de clés auto incrémentées, etc. Cela peut être un PITA royal ... c'est pourquoi la mise à l'échelle est beaucoup plus facile en fonction de votre application.
Une autre machine virtuelle n'est pas accessible via "localhost". localhost définit l'accès à votre serveur actuel.Que ce serveur soit une VM ou non est sans importance. Vous devrez référencer votre serveur de base de données par son nom. Maintenant, la transition de la VM de la base de données à un autre serveur physique devrait avoir un impact nul puisque vous le référençant par son nom. Au-delà, il n'y a pas d'autres considérations.
+1 - excellente réponse – orokusaki