ADO.Net 将 "Persist Security Info" 默认值改回 True

ADO.Net change "Persist Security Info" default back to True

信息: 我们公司有一个用于生产的第 3 方应用程序。该程序使用 DSN 通过 ODBC 连接到我们的 SQL Server 2012 数据库。此应用程序在 Server 2003 (MADC 2.8) 下正常工作,但是当我将它带到 Server 2008 x86 (DAC 6.0) 时,我收到连接失败 "Microsoft OLE DB Provider SQL Server Login failed for user XXX"。我有一种感觉,这是由于 "persist security info" 在 Windows 服务器上从服务器 2008 及更高版本开始的默认值从 True 更改为 False(DAC 6.0 中所做的更改)。我无权更改应用程序内部的连接字符串,因为它是第 3 方。如本 article

所示

问题: 有什么方法可以改变 ADO.Net 的行为,使该值在连接字符串之外默认为 True 而不是 False。我希望至少能够证明或反驳这是导致问题的功能。

注意:我意识到篡改此设置是一个巨大的安全问题,如果它被更改,我们将采取正确的预防措施以确保服务器和应用程序是隔离的。

解决方案: 下面由@William 提供。如果您正在将 SQL 服务器第 3 方应用程序从 Server 2003 更新到 Server 2008+,并且您正在获得与上面类似的连接,而在 2003 年您没有,请将 SQL 帐户的密码设置为空白(暂时或仅在暂存阶段,这在生产中留空是非常危险的)以测试在提供空白密码时应用程序是否再次运行。如果是,则应用程序不会在连接字符串中设置持久安全信息,并且默认为 true 的值现在默认为 false。您的应用程序可能仅限于在 server 2003 下使用,在 server 2008+ 上可能无法正常运行。我无法找到将默认值恢复为 true 的方法。

如果应用程序使用现有的连接对象来构造新的连接字符串,则可能有解决此问题的方法 - 取决于应用程序和安全限制。

由于使用集成安全性时可能不存在此问题,我们可以假设 "SQL Server standard security" 是一项要求。如果 空白密码 用于 SQL 服务器帐户,那么,当构造新的连接字符串时,它将是正确的(有点意外)。