gpt4 book ai didi

.net - 禁用 sp_reset_connection

转载 作者:行者123 更新时间:2023-12-03 02:33:43 33 4
gpt4 key购买 nike

由于我遇到了一些问题,我正在 .NET Framework 4 中尝试连接池。使用 SQL Profiler,我可以看到每次从连接池中获取连接时,都会执行存储过程 sp_reset_connection。

要摆脱此重置(我实际上不需要 sp_reset_connection)。我尝试将连接字符串中的 Connection Reset 参数设置为 false,但这似乎没有任何效果。我想也许我误解了连接重置参数的目的。

我注意到连接重置参数没有记录在 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.connectionstring.aspx 中。但在其他很多地方都提到了它,例如http://www.techrepublic.com/article/educate-yourself-about-net-sql-server-connection-string-syntax/6084879 .

如果我将连接重置标志设置为无效值(例如“hello”),则在打开连接时会出现异常,表明实际使用了连接重置标志。

ADO.NET 真的关心连接重置标志吗?

我的代码如下:

  static void Main(string[] args)
{
const string connectionString =
"Data Source=(local);Initial Catalog=MyDatabse;User ID=sa;Password=<removed>;Connection Timeout=5;Pooling=true;Min Pool Size=1; Max Pool Size=1; Enlist=false; Connection Reset=false;";

var connections = new List<SqlConnection>();
for (int i = 0; i < 1000000; i++)
{
using (var conn = new SqlConnection(connectionString))
{
conn.Open();

SqlCommand command = new SqlCommand("SELECT * FROM DatabaseVersion", conn);
command.ExecuteNonQuery();

connections.Add(conn);
}
}
}

最佳答案

SqlClient 会验证连接重置 标志(它必须可转换为 bool 值)。但自 .NET 3.5 SP1 起,该值被忽略

此外,SqlConnectionStringBuilder.ConnectionReset property在 .NET 3.5 SP1 中已过时。

原因是设置Connection Reset = false是一个巨大的安全漏洞 - 它可能允许重用与其关联的敏感元素(例如打开的对称 key 、临时 key 或模拟)的 session 语境。此外,它可能已将 ChangeDatabase 执行到另一个数据库,因此当您重新打开它时,它将连接到“错误”的数据库。

设置Connection Reset = false的唯一好处是由于避免了往返而提高了 SQL Server 7.0 的性能。

连接重置记录在.NET 3.0 docs中。我认为它从 3.5 SP1 文档及更高版本中删除的原因是因为它现在什么都不做。

关于.net - 禁用 sp_reset_connection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7927321/

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