- - PR -
ASP.NETからSQLServerへのアクセスが拒否される
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-09-01 15:03
いつもお世話になっております。過去のデータベースのスレッドより類似した内容を確認したのですが、結論が見つからないため、記載させて頂きます。
内容と致しましては、 ・VS2003をインストールしたクライアントPC(WIN2K)にてVB.NET+ASP.NETを利用し、WebAPを作成。 ・作成したAPにて、別PC(WIN2003Server)に配置したSQLServer2000にアクセス。 ・「SQLServerが存在しないか、アクセスが拒否されました。」のエラーメッセージの内容にて アクセスが行なえません。 アクセスする際の認証方法はSQLServer認証を利用しており、且つ、同一内容のロジックにてWindowsAPからでは正常にアクセスが行なえます。SQLServerのプロファイラにてトレースを確認したところ、WebAPからのアクセスはSQLServerまで到達していませんでした。また、別PCにてGuestアカウントは有効にしてあります。 アクセスが拒否されてしまう要因につきまして、この他に確認すべき点がありましたならば、ご指摘頂けませんでしょうか。 | ||||
|
投稿日時: 2005-09-01 15:29
ユーザ偽装し、DB側で、そのユーザからのアクセス許可を行えば、接続できると思います。
web.config内に以下を追加 <identity impersonate="true" userName="ユーザ名" password="パスワード" /> [ メッセージ編集済み 編集者: ゆうじ001 編集日時 2005-09-01 15:34 ] | ||||
|
投稿日時: 2005-09-01 15:39
もう拝見済みかもしれませんが参考までに
エラー メッセージ "SQL Server が存在しないか、アクセスが拒否されました" の原因 | ||||
|
投稿日時: 2005-09-01 15:47
やはり、このページでしょう。
[ASP.NET] ユーザー'(null)'のログインに失敗しました。エラーが発生した場合の対処法 http://blogs.sqlpassj.org/matu_tak/archive/2004/06/16/2742.aspx | ||||
|
投稿日時: 2005-09-01 18:24
ご指摘有難うございました。Windows認証であれば、Network Service(ASPNET)のアカウントが問題と考えていたのですが、SQLServer認証でアクセスしているので、この辺(偽装も含めて)は関連ないと考えておりました。大変初歩的な質問で申し訳ありませんが、ADO.NETがSQLServerにアクセスする際にはSQLServerにログインする以前に、SQLServerが格納されているサーバへのログインが発生しているのでしょうか?
| ||||
|
投稿日時: 2005-09-01 18:46
すみません。SQLserver認証でしたね。(^^; 偽装は関係ないです。SQLServerが格納されているサーバーへのログインも発生していません。 たぶん、SQLserverへ接続する文字列がおかしいんだと思います。Visual Studioのサーバーエクスプローラでは表示できていますか?もし、表示できているのであれば、そこからテーブルをWebフォームにドラッグしてくると、勝手にsqlConnection1ができますので、そのプロパティで接続文字列を確認してみてはいかがでしょうか? (必要であれば、接続文字列にパスワードを追加してあげます。) #SQLserver認証のセキュリティ面は十分に認識して下さいね。 | ||||
|
投稿日時: 2005-09-01 19:01
trapemiya様、ご回答有難うございます。ご指摘の通り、VSのサーバエクスプローラーにてDBへのコネクションも確認し、SQLDataAdapterにてSQLConnectionも自動生成させ、その時点まではアクセスもうまくいきます。且つ、実行時にFillを発行する直前にてブレークポイントを設定し、接続文字の確認も行なっているのですが、ソース実行からのアクセスは拒否されてしまいます。サーバエクスプローラー及び、WindowsAPで接続が可能であるにも関わらず、WebAPでの接続が拒否(しかもトレースにてDBへのアクセス以前の状態にて)されてしまうという状態です。
| ||||
|
投稿日時: 2005-09-01 23:30
どのようなエラーメッセージが出ているのでしょうか? 接続文字列の設定をPage_Loadのポストバック時じゃない時、つまり、最初に一度だけしかやっていないということはありませんでしょうか? Webアプリなので、ブラウザからアクションを起こしたラウンドトリップ時に、きちんと接続文字列が設定されていなければなりません。この辺りは大丈夫でしょうか? |