Azure 避免在会话中为不同的sql架构存储连接字符串

Azure 避免在会话中为不同的sql架构存储连接字符串,azure,azure-sql-database,azure-web-roles,Azure,Azure Sql Database,Azure Web Roles,我计划在Azure中使用一个多租户应用程序,通过模式分离实现数据隔离 我计划使用子域来识别租户。想法是从子域中获取租户名称,从登录页面获取用户id和密码,并验证身份验证的uid、pwd和租户id。如果经过身份验证,则应用程序对存储过程的所有调用都需要定向到架构(与租户同名) 但是,我不想在web.config文件中存储租户连接字符串。我能想到的一个选项是,将架构名称和密码存储在登录页面中可接受的表中,并创建租户特定的连接字符串(及其UID和密码)并将其存储在会话中。在初始化任何存储过程时使用此连

我计划在Azure中使用一个多租户应用程序,通过模式分离实现数据隔离

我计划使用子域来识别租户。想法是从子域中获取租户名称,从登录页面获取用户id和密码,并验证身份验证的uid、pwd和租户id。如果经过身份验证,则应用程序对存储过程的所有调用都需要定向到架构(与租户同名)

但是,我不想在web.config文件中存储租户连接字符串。我能想到的一个选项是,将架构名称和密码存储在登录页面中可接受的表中,并创建租户特定的连接字符串(及其UID和密码)并将其存储在会话中。在初始化任何存储过程时使用此连接字符串


然而,我并不热衷于在会话中存储模式的uid和密码。是否有其他方法来管理此场景?

在会话中存储连接字符串不会对安全造成危害,因为会话值不会存储在Cookie中。只有会话ID将存储在cookie中,会话的每个值将与会话ID一起存储在服务器中

但是连接字符串对于访问应用程序的用户组来说是常见的,在您的情况下是租户。因此,在会话中存储将使用更多内存。始终尝试使用上下文方法,例如,您的数据层代码将引用连接字符串,如下所示

字符串con=AppContext.Current.ConnectionString

上面的AppContext类将具有根据主机类型(例如工作角色、web角色、单元测试等)检索连接字符串的实际逻辑

•您可以将连接字符串存储在web.config中,并且密钥可以以子域值作为前缀 示例:子域1\u连接=连接字符串

•如果您有中央数据库存储所有租户信息,则可以将其存储在数据库中

•如果您没有这样的数据库,您可以创建Azure表来存储租户信息


在任何多租户应用程序中,我总是有两个上下文变量,AppContext和UserContext,这两个上下文提供了适当的数据。所以我的单元测试不用担心会话,上下文将根据我的应用程序运行的位置,从静态字典、会话、数据库或Azure表中传递值。

在会话中存储连接字符串的具体问题是什么?在会话中存储连接字符串的问题是会话将存储在我的cookie中,cookie将驻留在我的客户端浏览器上如果有中间人攻击,我的会话被破坏,连接字符串中的用户名和密码将可用。哇,不要让cookies成为你“会话”的存储。出于兴趣,您是否在课程中查看了其他商店?e、 g.存储,如表存储或应用结构存储-这两种存储都只使用服务器用于从存储会话数据的任何位置查找会话数据的标识cookie(ASP.NET_SessionId)。您当然可以将会话存储在其他位置,例如SQL数据库,甚至Azure缓存,除了Alergy的建议之外。这就是我要做的。我将会话存储在azure web角色分布式缓存内存中。这有助于我根据需要扩展内存,因为它是分布式的,所以我不必担心序列化。对于会话变量中存在的密码,我想到的是将其以加密形式保存,并在代码中读取时对其进行说明。因此,即使是hake,密码/uid也是加密的。