我正在编写一个 aspx 应用程序,它将在一个公共 SQL Server 数据库中托管 1000 个小客户。所有实体都将通过 Linq-To-Sql 创建和加载。
代理键(标识列)将在整个模式中用于所有表关系,因此从根客户对象开始,我应该能够使用常规 Linq 查询(SQL 连接)导航到特定客户的专有数据集。
但是从安全的角度来看,上述内容有点脆弱,所以我希望添加一层额外的租赁检查作为安全支持。我的实体模型中的所有实体都将具有一个非索引的 int TenantId 字段。
我正在从性能角度寻找有关此解决方案的批评意见。
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"] );
}