gpt4 book ai didi

c# - 在 MSSQL (TSQL) 中,我可以指定一个位于连接字符串中但不影响池的上下文变量吗?

转载 作者:行者123 更新时间:2023-11-30 13:41:08 25 4
gpt4 key购买 nike

为了进一步解释需求,请考虑以下场景:

在严重依赖 TRIGGERS 的遗留系统中,我们需要提供某种 token (我们称之为“SessionID”)以插入某些安全日志表中。此 token 在应用程序服务器中使用 C# 创建,并将传递到所有 SQL 命令。

遗憾的是,这一对触发器的要求是不可更改的

因此,因为我有权修改连接字符串,所以我可以(并且已经成功证明我可以)使用“应用程序名称” token 来提供这条信息。

string connectionString = string.Format("SERVER=sql.example.com; "
+ "DATABASE=someDB; User ID=xyz; Password=123; Application Name={0}", sID);

既然这样,问题是什么?

问题很简单……上面的方法可行,但是因为我们有成千上万的用户……我们的连接池被破坏了(因为连接池是基于连接字符串创建的……基本上,我需要连接池基于 Application Name 属性的所有内容。

那么,你知道我可以怎样做吗:

  1. 在连接字符串中设置一个不会包含在池中的属性。
  2. 以其他不会严重影响性能的方式为此连接设置上下文属性。

作为旁注...我可以立即打开连接并创建一个具有单个值的临时表:

SELECT 12345 AS SessionID INTO #context

但这似乎太过分了!

最佳答案

您需要执行此操作而不是依赖连接字符串,而不是依赖临时表 SET CONTEXT_INFO/CONTEXT_INFO() can be used将一些任意数据与当前 session /连接相关联(并且在触发器中可用)。

如果服务器可以接受从用户/时间等的某种组合创建变量,您可以从 logon trigger 中自动分配 CONTEXT_INFO ,在这种情况下,您根本不需要更改连接机制。

关于c# - 在 MSSQL (TSQL) 中,我可以指定一个位于连接字符串中但不影响池的上下文变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5937157/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com