AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi MSSQL Datenbank >sicher< mandantenfähig machen
Thema durchsuchen
Ansicht
Themen-Optionen

MSSQL Datenbank >sicher< mandantenfähig machen

Ein Thema von jensw_2000 · begonnen am 28. Sep 2006 · letzter Beitrag vom 30. Sep 2006
Antwort Antwort
jensw_2000
(Gast)

n/a Beiträge
 
#1

MSSQL Datenbank >sicher< mandantenfähig machen

  Alt 28. Sep 2006, 01: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
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: MSSQL Datenbank >sicher< mandantenfähig machen

  Alt 28. Sep 2006, 06:37
Guten Morgen Jens,

den Zugriff (Datenschutz) kannst du auch mit nur einer Datenbank sicher gestalten. Du müsstest mit approles arbeiten, die interne Datenbanksicherheit (GRANT, REVOKE) ausreizen und konsequent auf Views setzen. Was mir wesentlich mehr Probleme bereiten würde, wäre ein griffiges Konzept für die Datensicherheit (backup, restore).

Grüße vom marabu
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#3

Re: MSSQL Datenbank >sicher< mandantenfähig machen

  Alt 28. Sep 2006, 09:02
Hi Marabu,

die Zugriffskontrolle auf einzelne Datenbankobjekte, Tabellen und Spalten sowie die Kontrolle über einzelne DDL Statements via Grant/Revoke kenne ich.

Um das für meine Zwecke nutzen zu können, muss ich doch aber für jeden Mandanten eine eigene Tabelle erstellen, die nur er benutzen darf oder ?

Gibt es einen Trick, bei der ich die vorhandenen SP's, Trigger, UDF's und Views unverändert mandantenisoliert nutzen kann ?

Warum konsequent auf Views setzen ?
Gibt einen Weg, der es mit Hilfe von Views ermöglicht, die SP's usw. rolebezogen auf unterschiedliche Tabellen zu verteilen ?

Views bereiten mir im Hinblick aif die Performance Bauchschmerzen. Beim SQL Server 2005 Enterprise gibt es indizierte Sichten. Damit relativiert sich der Performancerinbruch durch Views. Beim SQL-Server 2000 sehe ich keine Möglichkeit, die Performance mit Views oben zu halten. Kennst du einen Weg ?

Zitat:
Was mir wesentlich mehr Probleme bereiten würde, wäre ein griffiges Konzept für die Datensicherheit (backup, restore).
Darüber habe ich mir auch schon den Kopf zerbrochen.
Derzeit tendiere ich zu folgender Variante:

- DB wird mehrmals täglich gesichert

Im Restorefall (ein Mandant hat versehentlich seine Daten gelöscht):
- DB unter anderem DB-Namen rücksüchern
- mandanteneigene Tabellen aus der Live-DB löschen
- DDL und Daten der mandanteneigenen DB-Objekte aus der 2. DB via DTS oder Script in die Live-DB schieben


Würde es doch nur einen "INSTEAD OF SELECT" Trigger geben ...
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.611 Beiträge
 
#4

Re: MSSQL Datenbank >sicher< mandantenfähig machen

  Alt 28. Sep 2006, 09:07
Es reicht, für jeden Mandanten eine VIEW zu erstellen, die fest auf der Tabelle nach dem Mandanten einschränkt. Der Benutzer bekomment dann keine Rechte auf der Tabelle sondern nur auf der View.

That's it.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#5

Re: MSSQL Datenbank >sicher< mandantenfähig machen

  Alt 29. Sep 2006, 18:29
alternativ kannst du auch stored functions/procedures nutzen welche den user der verbindung abfragen und dann nur noch die zugewiesenen datensätze liefern/verändern/einfügen.

auf die datenbank tabellen kann dann nicht zugegriffen werden - das solltest du über die datenbank berechtigungen sicherstellen.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
jensw_2000
(Gast)

n/a Beiträge
 
#6

Re: MSSQL Datenbank >sicher< mandantenfähig machen

  Alt 30. Sep 2006, 07:21
Danke an euch drei.
Ich habe ein paar Tests gemacht und es scheint super zu funktonieren.

Zum Glück greift meine Applikation nicht direkt auf die Tabellen zu.
Ich werde jetzt die SP's und Views umbauen und den Zugriff auf die Tabellen sperren.


Schöne Grüße,
Jens
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz