您正在寻找的可能是“持久安全信息”属性。该属性记录在此处和此处(假设您使用的是 SQLOLEDB 提供程序;但我处理过的大多数提供程序在这方面表现相同)。基本上,当此属性设置为 时False
,敏感信息(例如密码)将在读取连接字符串时从连接字符串中剥离。相反,当属性设置为True
时,连接字符串将完全按照提供的方式返回(包括任何敏感信息)。
我只发现一篇博文(但没有官方文档)指出此属性的默认值在 Windows Vista 中从 更改为True
,False
这与 Windows Server 2008 相对应。这与您的观察结果相符。
应该注意的是,新的默认设置False
被认为更安全,因为意外泄露敏感信息的风险较小。这里推荐的解决方案是重新设计应用程序,使其不需要依赖从ConnectionString
属性中获取密码。
使用该免责声明,您可以通过连接字符串显式设置“持久安全信息”属性,方法是添加;Persist Security Info=True
. 也可以Connection
在打开对象之前设置对象的属性(以防您无法更改连接字符串),但我不完全确定这是否可行(您可能必须先手动设置Provider
属性) .
' untested examples
' Method 1
connString = "Provider=SQLOLEDB;"
connString = connString & "Data Source=example;"
connString = connString & "Initial Catalog=exampleDB;"
connString = connString & "User Id=user;"
connString = connString & "Password=1234;"
connString = connString & "Persist Security Info=True"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open connString
' Method 2
connString = "Data Source=example;"
connString = connString & "Initial Catalog=exampleDB;"
connString = connString & "User Id=user;"
connString = connString & "Password=1234;"
Set conn = Server.CreateObject("ADODB.Connection")
conn.Provider = "SQLOLEDB"
conn.Properties("Persist Security Info").Value = True
conn.Open connString