Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 什么';这是在多租户体系结构中通过应用程序传递租户id的最佳方式_Asp.net_C# 4.0_Architecture - Fatal编程技术网

Asp.net 什么';这是在多租户体系结构中通过应用程序传递租户id的最佳方式

Asp.net 什么';这是在多租户体系结构中通过应用程序传递租户id的最佳方式,asp.net,c#-4.0,architecture,Asp.net,C# 4.0,Architecture,我们公司有一个多租户asp.net web应用程序。该应用程序为3层,例如网站、业务和数据访问。用户登录后,我们在会话中保留租户id 当我们需要获取“客户或订单”列表时,我们会将租户id从网站传递到企业,再传递到数据访问,然后传递到数据库(并查询该租户的客户或订单)。(几乎每个业务函数都将tenantId作为参数) 有时,在创建新功能时,开发人员忘记将租户id从网站添加到数据库,从而导致安全问题 我们有没有办法做到这一点,这样开发人员就不需要总是记住传递租户id 关于如何最好地解决此问题的任何建

我们公司有一个多租户asp.net web应用程序。该应用程序为3层,例如网站、业务和数据访问。用户登录后,我们在会话中保留租户id

当我们需要获取“客户或订单”列表时,我们会将租户id从网站传递到企业,再传递到数据访问,然后传递到数据库(并查询该租户的客户或订单)。(几乎每个业务函数都将tenantId作为参数)

有时,在创建新功能时,开发人员忘记将租户id从网站添加到数据库,从而导致安全问题

我们有没有办法做到这一点,这样开发人员就不需要总是记住传递租户id


关于如何最好地解决此问题的任何建议。

如果会话中有值,并且在数据库查询中需要该值,则必须通过层将其传播到数据库查询

如果您的开发人员有时忘记传递值,并且他们遇到了安全问题,那么这实际上不是一个安全问题,而是一个安全特性


如果数据库需要该id,那么业务层方法应该具有该id的参数。他们怎么会忘记呢?

听起来你好像在逐个传递所有的值

如果您构造了一个可以自由传递的对象,那么您将始终拥有所需的信息。我假设UserId总是与租户关联。您能否构建一个简单的对象,将其存储在会话中,然后将其传递给所有需要它的函数

类用户{ int用户标识; 国际租户协会;
}

一种方法是为每个租户创建每个表的视图(根据租户的数量和更改频率可能不太实际),并拒绝对基础表的应用程序访问

本文介绍了如何做到这一点,以及其他几种方法及其性能权衡:

然后在每个业务对象中使用该服务来获取租户id并将其传递到数据层,而无需依赖开发人员来完成。这是一个非常大的安全漏洞,缺少租户可能会返回用户不应该看到的数据,并可能导致公司关闭

public class CommonService
{
    public int getTenantId()
    {
        //do your validations and error handlings 
        string tid = session["tenantId"] // or get it from customs claims principal or set it in a httpcontext.current.items             
        return tid;
    }
}