避免在会话中存储不同 SQL 模式的连接字符串

2024-04-09

我计划在 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(使用前将#替换为@)

避免在会话中存储不同 SQL 模式的连接字符串 的相关文章

随机推荐

  • 如何禁用 phpmailer 在浏览器上显示配置详细信息

    我不知道为什么电子邮件配置详细信息和状态在成功发送电子邮件后显示在我的页面上 如何禁用它 消息 服务器 gt 客户端 220 mx google com ESMTP ss3sm18138445pab 43 gsmtp客户端 gt 服务器 E
  • 如何识别用户空间和内核空间之间的特定套接字?

    我在用户空间中有一个库 可以拦截套接字层调用 例如socket connect accept 等等 我只处理 TCP 套接字 在内核空间中 我有一个网络内核模块 它处理所有 TCP 连接 我需要能够在驱动程序中识别哪些套接字被用户空间库拦截
  • VIM 高亮匹配开始/结束

    我正在尝试找到一个插件 它将突出显示与 Verilog 匹配的开始 结束语句 VIM 可以使用花括号 方括号 但不能使用它的开始 结束 我希望 VIM 突出显示正确的开始到正确的结束 在我看来 最好的选择是使用 matchit 该脚本是 v
  • 如何在 docker exec bash 命令中转义引号

    我正在尝试在 docker 中执行 bash 命令 但我无法弄清楚如何转义表名周围的单引号user mappings在我的指挥下 我尝试过反斜杠 双单引号和双引号单引号 我知道如果我不将命令包装起来我可以绕过它bash c 但我需要它 以便
  • 使用 CA 文件从 Azure Database for MySQL 进行 SSL 连接

    跟随新 MySQL 服务的 Azure 文档 https learn microsoft com en us azure mysql howto configure ssl 看来您可以使用他们的受信任的 CA 证书非常简单地设置 SSL 按
  • Pod 更新后出现许多构建错误

    我的项目中安装了很多 pod 自从我上次更新 Pod 以来 一切都运行良好 上次 pod 更新后 我遇到了 28 个以 无法构建模块 xxx 开头的构建错误 这是我的 Podfile target projectXXX do use fra
  • Node.js 监听 MongoDB 变化

    Node js 有没有办法监听 MongoDB 集合中特定数据的更改 并在发生更改时触发事件 嗯 这是一个老问题 但我也在为同样的事情而苦苦挣扎 我发现了一些花絮帮助我构建了一个解决方案 并且我已将其作为库发布 https github c
  • document.head v. document.getElementsByTagName("head")[0]

    使用有什么区别document head并使用document getElementsByTagName head 0 我运行的测试表明它们都需要大约一毫秒 我也见过 document head document getElementsBy
  • 如何在结构字段上创建可变迭代器

    所以我正在使用 Rust 开发一个小型 NES 模拟器 并且我正在尝试使用我的状态寄存器 寄存器是一个结构体 其中包含一些包含布尔值的字段 标志 寄存器本身是 CPU 结构体的一部分 现在 我想循环这些字段并根据我执行的某些指令设置布尔值
  • 为什么 -std=c++98 标志有时不起作用?

    情况如下 我想创建一个简单的 C 程序 但它必须使用onlyC 98 函数 我在用Ubuntu 20 04 4 LTS 我在用c 作为编译器我使用以下标志进行编译 Wall Werror Wextra std c 98 pedantic e
  • JTabbedPane 自定义选项卡外观

    我想自定义 JTabbedPane 中选项卡的外观 我想从最简单 最朴素的行为开始 无边框 纯色 问题是仍然存在不平整的情况 选项卡的边距略有重叠 您会看到 由于选择了第二个选项卡 因此它被 带到了前台 这是通过轻微的边距重叠来实现的 有没
  • staruml 抽象类?

    有谁知道如何使用 StarUML 创建抽象类 我在文档中找不到任何提及 是否有某种反映抽象类的更一般的概念 从工具箱中选择类并将其添加到画布中 然后转到属性选择 isAbstract 复选框 然后类名显示为斜体
  • C++ timegm 将 DST 转换为未来某个给定时间的某个时区?

    我需要在我的班级中从 UTC 时间准确转换为给定时区的本地时间 无论 DST 是否有效 我的问题是 当我使用struct tm我必须提供 tm isdst 成员 或者将其保留为 1 以自动确定 from mktime 3 linux man
  • 关于Android应用程序更新的问题

    几个问题 升级应用程序对存储的数据 即首选项和数据库 有什么影响 系统是否执行新版本的全新安装 即删除旧版本然后安装新版本 或其他操作 如果用户想要保留存储的数据 例如共享首选项或 SQLite 数据库中的值 怎么办 如何模拟此应用程序更新
  • 在 Android Lollipop 5.0.1 的工作配置文件中安装未知来源的应用程序

    问题与 工作简介 相关安卓工作用 我编写了一个示例应用程序 它创建托管工作配置文件并将其自身设置为个人资料所有者 我需要通过配置文件所有者推送一些企业应用程序 因此 当我尝试安装时 它显示 安装被阻止 无法从未知来源安装 如果我切换按钮 设
  • 尝试使用 chrome.downloads (由于某种原因未定义)[重复]

    这个问题在这里已经有答案了 我正在尝试使用 Chrome 扩展从 URL 下载文件 图像 chrome 下载 https developer chrome com extensions downloads 但由于某种原因chrome dow
  • LINQ to Entities 无法识别该方法

    我在使用 Linq to Entities 时遇到问题 无法找到解决方法 这是我的代码 var queryResult result Where x gt x FollowedUp Value GetWeekFromDateTime Dat
  • 专门用于shared_ptr的集合

    是否存在一个集合 它知道shared ptr内部 并避免定期复制存储的shared ptr元素 而只复制其内部弱指针 这隐含地意味着 不会执行任何构造函数 析构函数调用 并且不会对shared ptrs的引用计数器进行操作 理论上 在采用C
  • 使用布尔系列/数组从 pandas 数据框中选择

    我有一个数据框 High Low Close Date 2009 02 11 30 20 29 41 29 87 2009 02 12 30 28 29 32 30 24 2009 02 13 30 45 29 96 30 10 2009
  • 避免在会话中存储不同 SQL 模式的连接字符串

    我计划在 Azure 中建立一个多租户应用程序 其中通过架构分离实现数据隔离 我计划使用子域来识别租户 想法是从子域获取租户名称 从登录页面获取用户 ID 和密码 并验证 uid 密码和租户 ID 以进行身份 验证 如果经过身份验证 则应用