Opaque tenant identification with SQL Server & NHibernate
Posted
by Anton Gogolev
on Stack Overflow
See other posts from Stack Overflow
or by Anton Gogolev
Published on 2010-06-17T08:09:42Z
Indexed on
2010/06/17
8:13 UTC
Read the original article
Hit count: 301
Howdy!
We're developing a nowadays-fashionable multi-tenanted SaaS app (shared database, shared schema), and there's one thing I don't like about it:
public class Domain : BusinessObject
{
public virtual long TenantID
{ get; set; }
public virtual string Name
{ get; set; }
}
The TenantID
is driving me nuts, as it has to be accounted for almost everywhere, and it's a hassle from security standpoint: what happens if a malicious API user changes TenantID
to some other value and will mix things up.
What I want to do is to get rid of this TenantID
in our domain objects altogether, and to have either NHibernate or SQL Server deal with it.
From what I've already read on the Internets, this can be done with CONTEXT_INFO
(here's a NHibernatebased implementation), NHibernate filters, SQL Views and with combination thereof.
Now, my requirements are as follows:
- Remove any mentions of
TenantID
from domain objects - ...but have SQL Server insert it where appropriate (I guess this is achieved with
default
constraints) - ...and obviously provide support for filtering based on this criteria, so that customers will never see each other's data
- If possible, avoid SQL Server views.
- Have a solution which plays nicely with NHibernate, SQL Servers' MARS and general nature of SaaS apps being highly concurrent
What are your thoughts on that?
© Stack Overflow or respective owner