Ich muss eines meiner "größeren" Datenbank-Projekte demnächst auf einem zentralen
SQL-Server für mehrere konkurierende Unternehmen bereitstellen.
Bei der Suche nach der richtigen "Mehrmandanten-Lösung" habe ich nicht die nötige Praxiserfahrung.
Lösungsansatz eins, Mandantentabelle mit Mandanten-ID Beziehing in den "Nutzdaten-Tabellen", habe ich verworfen, weil er aus meiner Sicht zu unsicher ist.
In meiner Software kann ich noch sicherstellen, das Benutzer xy zu Mandant 1 gehört und kann die Mandanten-ID hart in den
SQL-Abfragen übergeben.
SELECT * FROM Kundendaten WHERE ID_Mandant = 1
Kann ich irgendwie verhindern, das der User einen
SQL-Editor nimmt, und sich die Daten von Mandant 2 klaut ?
SELECT * FROM Kundendaten WHERE ID_Mandant = 2
.
Mein zweiter Gedanke war, pro Kunden eine eigene Datenbank anzulegen, auf die nur er Zugriff hat.
Es können aber mal 30-40 Kunden werden ... Bedeutet das den sicheren Performance-Tot des
SQL-Servers ?
Der Arme muss jetzt in 40
DB's die Statistiken aktualisieren, Indizies warten usw.
Variante drei ist mir entwicklungstechnisch zu "frickelig".
Ich könnte alle Tabellen mandantengebunden benennen und jeden
SQL-Benutzer mit
SQL-Server Rechten auf seine Tabellen beschränken.
Code:
Benutzer M1 hat nur Zugriff auf Tabelle Kundendaten_M1, Benutzer M2 nur auf Kundendaten_M2 usw.
Das wäre kein Problem. Sorgen habe ich nur mit den bestehenden 350 SP's, 80 Funktionen und etlichen Triggern in der
DB. Ich müsste alles komplett durcharbeiten und die Mandaten-Kennung ( =
SQL-Benutzer ) auslesen und mit dynamic-
SQL neuen
SQL-Code stricken, damit ich den kompletten
SQL-Code nicht auch 40 mal anlegen und später auch noch 40 warten muss.
Zudem bin ich mir nicht sicher, ob die Performance bei dieser Variante nicht genauso in die Knie geht, wie bei der Variante mit den 40 Datenbanken.
Die Ideal-Lösung sollte folgende Kriterien erfüllen:
Die Datenbank muss mandanten-isoliert arbeiten, die Mehrbelastung des Servers durch das Mehrmandanten-Szenario sollte möglicht gering sein und der
SQL-Code sollte grundlegend für alle Mandanten zentral wartbar sein.
Hatte jemand von euch mal ein ähnliches Problem, bzw. einen Lösungsansatz ?
Schöne Grüße,
Jens