J'ai rejoint une petite entreprise qui vend essentiellement une application web. Les données de l'application Web sont très sensibles, au point que toutes les données sont cryptées au niveau du champ. L'application est écrite en ASP.NET Web API 2 (C#), avec un front html/javascript et SQL-Server en arrière. À l'heure actuelle, ils ont environ 50 clients, et l'architecture de l'application est que chaque client obtient sa propre base de données. Ils sont tous déployés dans leur propre répertoire virtuel IIS, qui pointe ensuite vers sa propre base de données. Le code est exactement le même parmi tous les clients.Combinaison de base de données pour plusieurs clients - bonne idée?
Le propriétaire m'a dit que tout cela était conçu pour des raisons de sécurité. Cependant, c'est une douleur absolue à gérer, et ils obtiennent seulement plus de clients.
J'ai suggéré de combiner tout cela en un seul DB, et d'ajouter un champ sur la table principale qui identifie le client auquel les données appartiennent. De là, je peux filtrer/rejoindre sur ce champ. Le propriétaire n'aime pas cela car cela introduit un risque: s'il y a du code de mauvaise qualité, un client peut être capable de voir les données d'un autre client. Cela ne peut évidemment pas se produire avec plusieurs bases de données, car la chaîne de connexion ne se croise pas avec une base de données différente.
Existe-t-il un moyen possible de réduire ce risque? J'ai suggéré de surcharger la classe authorize pour empêcher les utilisateurs non autorisés d'accéder aux informations, mais cela ne résout pas tout le problème du 'mauvais code'.
Y a-t-il quelque chose que je puisse faire, ou est-ce que je suis coincé en conservant un tas de bases de données?
Des bases de données séparées facilitent également l'isolation avec la base de données en tant que service dans le cloud. L'automatisation est la clé dans ce monde aussi. –
La chaîne de connexion est dérivée du répertoire virtuel, car le nom de la base de données (catalogue initial) est identique à celui utilisé dans le répertoire virtuel. Nous avons essayé d'automatiser autant que possible (déploiement en utilisant le déploiement web, les mises à jour, etc.) mais ça reste douloureux quand les choses tournent mal, et nous n'avons que 50 clients en ce moment, je ne peux pas l'imaginer à 500 ou 5000 :) – user3129594