あなたが探しているのは、おそらく "Persist Security Info" プロパティです。プロパティはこことここに文書化されています(SQLOLEDB プロバイダーを使用していると仮定しますが、私が扱ったほとんどのプロバイダーはこの点で同じように動作します)。基本的に、このプロパティが に設定されている場合False
、パスワードなどの機密情報は、読み取り時に接続文字列から削除されます。逆に、プロパティが に設定されているTrue
場合、接続文字列は指定されたとおりに返されます (機密情報を含む)。
Windows Server 2008 に対応する Windows Vista で、このプロパティの既定値が からに変更されたことを示すブログ投稿を 1 つだけ見つけました (公式ドキュメントはありません)。これはあなたの観察と一致します。True
False
False
の新しいデフォルトは、機密情報を誤って公開するリスクが少ないため、より安全であると見なされることに注意してください。ここで推奨される解決策は、アプリケーションを再設計して、ConnectionString
プロパティからパスワードを取得することに依存する必要がないようにすることです。
その免責事項が邪魔にならないようにすると、接続文字列を介して "Persist Security Info" プロパティを明示的に設定できます;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