我计划在 Azure 中建立一个多租户应用程序,其中通过架构分离实现数据隔离。
我计划使用子域来识别租户。想法是从子域获取租户名称,从登录页面获取用户 ID 和密码,并验证 uid、密码和租户 ID 以进行身份验证。如果经过身份验证,则应用程序对 SPROCS 的所有调用都需要定向到架构(与租户同名)。
但是,我不想在 web.config 文件中存储租户明智的连接字符串。我能想到的第一个选项是,将架构名称和密码存储在登录页面可接受的表中,并创建租户特定的连接字符串(及其 UID 和密码)并将其存储在会话中。在初始化任何存储过程时使用此连接字符串。
但是,我不热衷于在会话中存储模式的 uid 和密码。还有其他方法可以管理这种情况吗?
在会话中存储连接字符串不会造成安全危害,因为会话值不存储在 Cookie 中。 cookie中仅存储Session ID,并且Session的每个值与Session ID一起存储在服务器中。
但连接字符串对于访问应用程序的用户组(在您的案例中是租户)来说是常见的。所以存储在session中会占用更多的内存。始终尝试使用上下文方法,例如您的数据层代码将引用连接字符串,如下所示
字符串 con=AppContext.Current.ConnectionString;
上面的 AppContext 类将具有根据主机类型(例如辅助角色、Web 角色、单元测试等)检索连接字符串的实际逻辑。
•您可以将连接字符串存储在web.config中,并且key可以以子域值作为前缀
示例:Subdomain1_connection = 连接字符串
•如果您有存储所有租户信息的中央数据库,则可以将它们存储在数据库中
•如果您没有这样的数据库,您可以创建Azure表来存储租户信息
在任何多租户应用程序中,我总是有两个上下文变量,AppContext 和 UserContext,这两个上下文提供适当的数据。因此,我的单元测试不关心会话,上下文将根据我的应用程序运行的位置从静态字典或会话或数据库或 Azure 表传递值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)