Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#1

MSSQL Datenbank >sicher< mandantenfähig machen

  Alt 28. Sep 2006, 02:18
Datenbank: MSSQL • Version: 2000 • Zugriff über: ADO, T-SQL
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
  Mit Zitat antworten Zitat