Authentification user lors de l'utilisation d'une database unique par client?

Mon entreprise construit une application HR ASP.NET et nous avons décidé de créer une database par client. Cela garantit que les clients ne peuvent pas visualiser accidentellement datatables d'un autre client, tout en permettant une évolutivité facile (parmi d'autres avantages, déjà discutés ici ).

Ma question est la suivante: quelle est la meilleure façon de gérer la security et l'access aux données dans un tel scénario? Mon intention est d'utiliser une database de connection / count commune qui dirigera l'user vers le bon server / database. Cette database commune contiendrait également les fonctionnalités de l'application auxquelles chaque user / rôle a access.

Je ne prévoyais pas mettre d'informations user dans chaque database client, mais d'autres membres de mon équipe estiment que le manque de security sur chaque database est un énorme problème (mais ils ne peuvent expliquer comment la logique d'access commun serait utile).

Est-ce que je manque quelque chose? Devrions-nous append une couche supplémentaire de security / authentification au niveau de la database client?

Mettre à jour:
L'une des raisons pour lesquelles mon équipe pensait que la gestion des deux users était nécessaire était due au contrôle d'access. Tous les users ont un rôle par défaut (par exemple, administrateur, access minimal, user avec pouvoir, etc.), mais les administrateurs clients seront en mesure d'affiner les permissions pour les users ayant access à leur database. Pour moi, il semble toujours possible que cela soit dans une database centrale, mais mon équipe n'est pas d'accord. Pensées?

J'ai toujours été d'avis que la security devrait être appliquée au niveau de l'application, pas au niveau de la database. Cela dit, je ne vois aucun problème avec votre approche. La gestion des counts et des rôles via une database centrale rend l'application plus facile à gérer à long terme.

Nous avons une solution SaaS qui utilise le model DB par client. Nous avons aussi une database "Sécurité" commune. Cependant, nous stockons toutes les informations user dans les bases de données client individuelles.

Lorsque l'user se connecte au système, il nous communique trois informations, un nom d'user, un mot de passe et un identifiant client. Le client-id est utilisé pour searchr leur database dans la database "security", puis le code se connecte à leur database pour vérifier leur nom d'user / mot de passe. De cette façon, un client est totalement autonome dans sa database. Bien sûr, vous avez besoin d'un élément d'information au-delà du nom d'user pour déterminer leur database. Pourrait être notre approche client-id, ou pourrait être le nom de domaine demandé si vous utilisez l'approche de sous-domaine par client.

L'avantage ici est que vous pouvez déplacer les bases de données "client" sans avoir à les synchroniser avec la database de security. De plus, vous n'avez pas besoin de traiter les jointures w / cross-db lorsque vous essayez de searchr des informations user.

Mise à jour: En réponse à votre mise à jour … L'un des avantages pour chaque client ayant sa propre database est également la possibilité de restaurer un client s'il en a vraiment besoin. Si vous avez divisé datatables du client en deux bases de données, comment le restaurez-vous? De plus, vous devrez vous inquiéter de l'access aux données cross-db si les users sont définis dans un DB autre que la database home.

Vous souhaiterez peut-être utiliser le fournisseur d'appartenance ASP.NET pour gérer la plomberie d'authentification. Cela fonctionnerait avec votre approche déclarée et vous pouvez toujours conserver toutes datatables d'authentification dans une database séparée. Cependant, je suis d'accord avec Chris que garder une database sera plus facilement maintenable.