0

ASP Classic で記述されたレガシー サイトをローカル マシンにセットアップしようとしています。SQL Server 2008 と IIS バージョン 7.5 を使用しています。

データベースへの接続を開こうとすると、エラーが発生します。

この投稿のアドバイスを使用しました

.udl ファイルを使用して接続文字列を作成およびテストし、接続文字列が機能することを確認します。私は Windows 認証を使用しています。このサイトを実行しているアプリ プールがデータベースにアクセスできることは確かです。複数のサイトに同じプールを使用していて、すべて正常に接続できるからです。

接続を開くときに、ストアド プロシージャを実行しようとしています。ストアド プロシージャ文字列を書き出してデータベースで直接実行すると、期待どおりに動作します。

コードは次のとおりです。

Const adUseClient = 3
Const adCmdStoredProc = 4
Const adOpenStatic = 3
Const adLockBatchOptimistic = 4

dim connectstring,sql
connectstring = "Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=my-database;Data Source=(local)\SQLEXPRESS"
sql = "MyProc '" & param1 & "','" & param2 & "'"
set rs = Server.CreateObject("ADODB.RecordSet")
rs.CursorLocation = adUseClient
rs.CursorType = adOpenStatic
rs.LockType = adLockBatchOptimistic
' this is where it is failing
rs.Open sql, connectstring, 3

問題の 1 つは、IIS によって生成されたように見えるエラーです。

URL の処理中にサーバーでエラーが発生しました。システム管理者に連絡してください。

システム管理者の方は、ここをクリックしてこのエラーの詳細を確認してください。

「ここをクリック」リンクをクリックすると、IIS 7 での ASP クラシック サイトの実行に関する一般的なページに移動しますが、エラーに関連すると思われるものは何も見つかりませんでした。エラーに関する情報を入手する場所が見つからないようです。最後の手段として、イベント ビューアー -> Windows アプリケーション ログを確認しましたが、エラーのエントリはありませんでした。

私はグーグルで検索し、接続文字列で複数の順列を試しましたが、役に立ちませんでした。この問題を解決する方法について誰かアドバイスがあれば、またはどこで解決策を探すべきかについてのアイデアさえあれば、私は感謝します. どうもありがとう!

**編集: **

わかりました、ブラウザーでエラーを表示するように IIS の設定を変更したところ、もう少し便利なエラー メッセージが表示されるようになりました。

Microsoft OLE DB Provider for SQL Server エラー '80004005'

ログインで要求されたデータベース "rw-gp" を開けません。ログインに失敗しました。

これをグーグルで調べたところ、これは多くの場合、権限の問題であることがわかりました。ご覧のとおり、私は Windows 認証を使用しており、データベースに接続する権限を持つアプリ プールでサイトを実行しています。このアプリ プールで実行される複数の ASP.NET サイトをローカルにセットアップしており、それらは統合セキュリティを使用して接続できます。何がうまくいかないのかわからない、誰か提案はありますか?

4

1 に答える 1

2

ASP Classic スクリプトは、常に偽装を使用して実行されます (これは、既定で偽装がオフになっている ASP.NET とは異なります)。

したがって、SSPI を使用するために DB にアクセスする必要があるユーザーは、偽装されるユーザーである必要があります。

偽装されたユーザーは、既定では匿名ユーザーとして指定された IUSR アカウントですが、Windows 統合セキュリティを有効にしている場合、ユーザーはクライアント ブラウザーが実行されているユーザー アカウントである可能性があります。どちらの場合でも、偽装されているユーザーが DB にアクセスできることを確認するか、SSPI の使用を停止する必要があります。

匿名アクセスのみを使用している場合は、IIS マネージャーを介して、匿名アクセスに使用するアカウントがアプリ プール ID であることを指定できます。

于 2012-06-05T11:26:01.743 に答える