Ich schreibe eine Aspx-Anwendung, die 1000 von kleinen Kunden in einer gemeinsamen SQL Server-Datenbank hosten wird. Alle Entitäten werden über Linq-To-Sql erstellt und geladen.Mutli Tenancy Backstop Prüfung auf Linq-to-sql Entity load()
Ersatzschlüssel (Identitätsspalten) werden im gesamten Schema für alle Tabellenbeziehungen verwendet. Daher sollte ich mit einem Root-Kundenobjekt zu exklusiven Datensätzen für einen bestimmten Kunden mit regulären Linq-Abfragen (SQL-Joins) navigieren können).
Aus Sicherheitsgründen ist das Obige jedoch ein bisschen zerbrechlich, deshalb möchte ich eine zusätzliche Schicht von Mietprüfungen als Sicherheits-Backstop hinzufügen. Alle Entitäten in meinem Entitätsmodell verfügen über ein nicht indiziertes int-Feld "TenantId".
Ich suche kritische Kommentare zu dieser Lösung aus einer Performance-Perspektive.
public partial class MyLinqEntity
partial void OnLoaded() // linq-to-sql extensibility function
{
if (this.TennantId != HttpContext.Current.Session["tenantId"])
throw new ApplicationException("Logic error, LINQ query crossed tenantId data boundary");
}
partial void OnCreated() // linq-to-sql extensibility function
{
this.TennantId = HttpContext.Current.Session["tenantId"]);
}