2

最新のサーバーでリリースする必要があるレガシ ASP アプリケーションがあります。SQLOLEDB で ADO を使用して、MS SQL Server と通信します。ユーザー名とパスワードを使用して SQL にログオンしています。

このアプリは、変更されたように見える ADO 接続オブジェクトの特異な動作に依存しています。最近 (ADODB.Connection.6 で)、接続文字列を Connection に提供してから取得すると、元の文字列の正確なコピーは返されません。具体的には、ユーザー名とパスワードが削除され、いくつかの追加パラメーターが追加されます。

このシナリオでは、古いバージョンの ADO では資格情報が削除されていないようです。アプリケーションが機能する場合、アプリケーションは機能しませんが、機能します。質問 - これは文書化されていますか? 新しい ADO で従来の動作を強制する方法はありますか?

共有サーバーで ADO をダウングレードしたくありません。

編集:最小限のテストケースに分離しました。Windows 2003 の Connection.2.80 (msado15.dll v. 2.82.5011.0) で動作し、Windows 2008 の Connection.6 (dll v.6.1.7600.17036) で失敗します。

EDIT2: 正式には、ADO が含まれている古い MDAC 2.8 は、Vista 以降ではサポートされていません。したがって、ダウングレードは実際にはオプションではありません。

4

1 に答える 1

5

あなたが探しているのは、おそらく "Persist Security Info" プロパティです。プロパティはここここに文書化されています(SQLOLEDB プロバイダーを使用していると仮定しますが、私が扱ったほとんどのプロバイダーはこの点で同じように動作します)。基本的に、このプロパティが に設定されている場合False、パスワードなどの機密情報は、読み取り時に接続文字列から削除されます。逆に、プロパティが に設定されているTrue場合、接続文字列は指定されたとおりに返されます (機密情報を含む)。

Windows Server 2008 に対応する Windows Vista で、このプロパティの既定値が からに変更されたことを示すブログ投稿を 1 つだけ見つけました (公式ドキュメントはありません)。これはあなたの観察と一致します。TrueFalse

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
于 2013-01-24T03:42:21.977 に答える