DOBON.NET DOBON.NETプログラミング掲示板過去ログ

サーバーで実行するとエラー

環境/言語:[2003Server  ASP.NET:2.0.50727.210  .NET Framework :2.0.50727.42]
分類:[ASP.NET]

データベースをAccess2003にしています。
ASP.NET2.0を対象にしています。

開発用のPCでhttp://localhost/・・・・と実行するとエラーは無く
GridViewでのデータの挿入、削除、更新ができます。
しかし、サーバーで実行をすると選択(Select)はできますが
挿入、削除、更新ができません。
エラーの内容は
「アプリケーションでサーバー エラーが発生しました。
 更新可能なクエリであることが必要です。」
となります。

しかし、このサーバーに開発用のVisual Web Developer 2005 Express Edition
を導入し、その中で実行(デバッグ無しで実行)をするとエラーは
発生しません。

サーバー側で何か設定が必要なのか、それとも開発用の環境と
実際の環境に違いがあるのでSQL等の記述を変えなければならないのか
わかりません。
サーバーのバージョンは
.NET Framework バージョン:2.0.50727.42; ASP.NET バージョン:2.0.50727.210
となっていますが、.NET Frameworkは1.Xも導入されていました。

対処方法をご存知の方、アドバイスいただきたくお願い申し上げます。
■No18656に返信(HELP!!さんの記事)
> データベースをAccess2003にしています。
> ASP.NET2.0を対象にしています。
>
> 開発用のPCでhttp://localhost/・・・・と実行するとエラーは無く
> GridViewでのデータの挿入、削除、更新ができます。
> しかし、サーバーで実行をすると選択(Select)はできますが
> 挿入、削除、更新ができません。
> エラーの内容は
> 「アプリケーションでサーバー エラーが発生しました。
>  更新可能なクエリであることが必要です。」
> となります。
>
> しかし、このサーバーに開発用のVisual Web Developer 2005 Express Edition
> を導入し、その中で実行(デバッグ無しで実行)をするとエラーは
> 発生しません。
>
> サーバー側で何か設定が必要なのか、それとも開発用の環境と
> 実際の環境に違いがあるのでSQL等の記述を変えなければならないのか
> わかりません。
> サーバーのバージョンは
> .NET Framework バージョン:2.0.50727.42; ASP.NET バージョン:2.0.50727.210
> となっていますが、.NET Frameworkは1.Xも導入されていました。
>
> 対処方法をご存知の方、アドバイスいただきたくお願い申し上げます。

これだけでは答えようがないでしょう。

> エラーの内容は
> 「アプリケーションでサーバー エラーが発生しました。
>  更新可能なクエリであることが必要です。」
> となります。

と書いてあるんだから、それなりの情報が出せると思います。
その前に自分で調べるのが普通だと思いますけどね。
> 開発用のPCでhttp://localhost/・・・・と実行するとエラーは無く
> GridViewでのデータの挿入、削除、更新ができます。
> しかし、サーバーで実行をすると選択(Select)はできますが
> 挿入、削除、更新ができません。

  サーバーって、Windows 2003 Server ですか?

  通常、IISの設定では、読み取りのみ許可ですので、エラーの通り
  select以外がダメと言うことですので。

  ファイルアクセスの権限設定を見直して下さい。
  その手の問題はよくありますので。

以上。
オショウ さま
ありがとうございます。

>>開発用のPCでhttp://localhost/・・・・と実行するとエラーは無く
>>GridViewでのデータの挿入、削除、更新ができます。
>>しかし、サーバーで実行をすると選択(Select)はできますが
>>挿入、削除、更新ができません。
>
>   サーバーって、Windows 2003 Server ですか?

はい、Windows 2003 Server を利用しています。

>
>   通常、IISの設定では、読み取りのみ許可ですので、エラーの通り
>   select以外がダメと言うことですので。

問題のWindows 2003 Server に
Visual Web Developer 2005 Express Editionを導入してこの中で実行
すると動くのに、http://localhost/・・・・とIEに入力するとエラーになる。
また、別のPC(WindowsXP)で同様にhttp://localhost/・・・・とすると
動作するのでPCによってSQL文を変えないといけない?!というのもおかしな
話ではないかと思っておりました。

>   ファイルアクセスの権限設定を見直して下さい。
>   その手の問題はよくありますので。

ファイルアクセスの権限設定というのがあるのですね。
Windows 2003 Server はまったく知識がありませんが
コントロールパネルのあたりにあるのでしょうか?
> 問題のWindows 2003 Server に
> Visual Web Developer 2005 Express Editionを導入してこの中で実行
> すると動くのに、http://localhost/・・・・とIEに入力するとエラーになる。
> また、別のPC(WindowsXP)で同様にhttp://localhost/・・・・とすると
> 動作するのでPCによってSQL文を変えないといけない?!というのもおかしな
> 話ではないかと思っておりました。

  動作環境の差異を、ご存知ないようで・・・
  マシン的に同一環境の上で動作させれているのに?と疑問を持っておられる
  ようですが、VisualWebDeveloper上で動作させるのと、http://localhost/〜
  で動作させた場合は、全く異なる動作環境の上で動作させていることになり
  ます。

  http://locLhost/〜で動作させた場合は、あくまでIIS上でのASPNETユーザー
  権限での動作ですので、当然、\inetpub\wwwroot\hogehogeのフォルダ上の
  ファイルアクセス権限は、ASPNETユーザーの権限に依存します。
  尚、IIS上でも、読み取りのみ許可設定になっているはずですので。

> ファイルアクセスの権限設定というのがあるのですね。
> Windows 2003 Server はまったく知識がありませんが
> コントロールパネルのあたりにあるのでしょうか?

  知識が無ければ、サーバーOS上でのASP.NETの動作は保障れたものとは
  なりません。
  ので、今回のトラブルに至ったと言うことです。

  OSもさることながら、権限を含めたIISの設定等も勉強して下さい。

以上。
オショウさん ご説明ありがとうございます。
>   マシン的に同一環境の上で動作させれているのに?と疑問を持っておられる
>   ようですが、VisualWebDeveloper上で動作させるのと、http://localhost/〜
>   で動作させた場合は、全く異なる動作環境の上で動作させていることになり
>   ます。
>
>   http://locLhost/〜で動作させた場合は、あくまでIIS上でのASPNETユーザー
>   権限での動作ですので、当然、\inetpub\wwwroot\hogehogeのフォルダ上の
>   ファイルアクセス権限は、ASPNETユーザーの権限に依存します。
>   尚、IIS上でも、読み取りのみ許可設定になっているはずですので。

同じマシンでも全く異なる動作環境なんですね。サーバーを組み立てた方からは
これで同じに動作します と言われていたので・・・。

知識不足で大変申し訳ありませんが、もう1点よろしければ
ご教授ください。
IISで\inetpub\wwwroot\hogehogeのフォルダをWebサイトに設定するときに
読み取り、書き込みのチェックは付けました。
(この設定は初回に行いましたので、ここに質問の書き込みをする前の話です)

なので、書き込みは可能になったとばかり思っていたのですが
それ以外に「ASPNETユーザーの権限」を設定する必要があるのですね。
プロパティ等を探したのですが「ASPNETユーザー権限の設定」というような
場所が見当たりません。探し方が悪いのかもしれませんが、
どの辺りにこの設定方法があるのかご教授いただけませんでしょうか?

>   知識が無ければ、サーバーOS上でのASP.NETの動作は保障れたものとは
>   なりません。
>   ので、今回のトラブルに至ったと言うことです。
>
>   OSもさることながら、権限を含めたIISの設定等も勉強して下さい。
>

今後、サーバーに関してもいろいろ勉強してみます。
アドバイスありがとうございます。
> 知識不足で大変申し訳ありませんが、もう1点よろしければ
> ご教授ください。
> IISで\inetpub\wwwroot\hogehogeのフォルダをWebサイトに設定するときに
> 読み取り、書き込みのチェックは付けました。
> (この設定は初回に行いましたので、ここに質問の書き込みをする前の話です)

  一般的には、書き込み権限をONにするとセキュリティーレベルが下がるので
  偽装と言う方法でASP.NETは行います。

  いろいろなサイトの掲示板で同様の書き込みに対し、回答がアップされてい
  るので、検索してみて下さい。

  ASP.NETの設定情報として存在します。

> なので、書き込みは可能になったとばかり思っていたのですが
> それ以外に「ASPNETユーザーの権限」を設定する必要があるのですね。
> プロパティ等を探したのですが「ASPNETユーザー権限の設定」というような
> 場所が見当たりません。探し方が悪いのかもしれませんが、
> どの辺りにこの設定方法があるのかご教授いただけませんでしょうか?

  偽装にも絡みますが、そのOSがサーバーOSなので、ドメインとしての機能が
  設定されていた場合と、いない場合とで操作方法が異なります。

  ドメインではない場合、コンピュータの管理で、ローカルユーザーとグルー
  プと言う項目の中にありますが、ASPNETユーザーの権限をアップさせると、
  当然、セキュリティーレベルが下がりますので、偽装させるのが得策でしょ
  う。

  尚、ドメインの場合・・・AcrtiveDirectoryが導入されていることになりま
  すので、偽装を使っても、もっと権限レベルは高度に管理されていることに
  なりますので、厄介と言うか・・・もっと広範囲な知識が無いとできないと
  思います。

  因みに、イントラネットのサーバーですか?インターネット公開のサーバー
  ですか?公開型のサーバーなら、AccessのMDBを使わず、SQL Server Express
  等を使って、ローカルサーバーしかログインできない設定にされた方が安全
  かと思います。
  どのみちMDBの場合、巨大なデータベースにはできないし、SQL Server Express
  なら、1GB未満のデータベースサイズであれば、フリーだし・・・

以上。

以上。
オショウさん

いろいろ詳細を教えてくださりありがとうございます。
>   いろいろなサイトの掲示板で同様の書き込みに対し、回答がアップされてい
>   るので、検索してみて下さい。
>
>   ASP.NETの設定情報として存在します。

さっそく検索してみます。


>   偽装にも絡みますが、そのOSがサーバーOSなので、ドメインとしての機能が
>   設定されていた場合と、いない場合とで操作方法が異なります。

これはサーバーを設定した方に、どちらで設定をされたのか今お聞きしています。

>   因みに、イントラネットのサーバーですか?インターネット公開のサーバー
>   ですか?

インターネットサーバーです。以前、イントラネットでASP
を作成したことがありその関係で
今回お手伝いしている状態です。ただ、ASP.NETは初めてなので
少しとまどいながら作業を行っています。

> 公開型のサーバーなら、AccessのMDBを使わず、SQL Server Express
>   等を使って、ローカルサーバーしかログインできない設定にされた方が安全
>   かと思います。

私もSQL Serverをお勧めしましたが、現在利用しているMDBをそのまま
使いたいということで、却下されました。
公開といっても一部の方だけで4名ほどで
利用されるそうなので使いなれているMDBの方が良いとのことでした。

ところで、SQL Server Expressは商用は禁止ではなかったですか?
どこかでそのようなことを見たような・・・。記憶違いでしょうか?
>>  偽装にも絡みますが、そのOSがサーバーOSなので、ドメインとしての機能が
>>  設定されていた場合と、いない場合とで操作方法が異なります。
>
> これはサーバーを設定した方に、どちらで設定をされたのか今お聞きしています。

  管理ツールにActiveDirectoryがあるのか無いのか見れば一目瞭然。

>>  因みに、イントラネットのサーバーですか?インターネット公開のサーバー
>>  ですか?
>
> インターネットサーバーです。以前、イントラネットでASP
> を作成したことがありその関係で
> 今回お手伝いしている状態です。ただ、ASP.NETは初めてなので
> 少しとまどいながら作業を行っています。

  インターネット公開サーバーですか・・・
  では尚更、MDBを\InetPub\wwwroot\〜に置くのは危険ですネ!

>> 公開型のサーバーなら、AccessのMDBを使わず、SQL Server Express
>>  等を使って、ローカルサーバーしかログインできない設定にされた方が安全
>>  かと思います。
>
> 私もSQL Serverをお勧めしましたが、現在利用しているMDBをそのまま
> 使いたいということで、却下されました。
> 公開といっても一部の方だけで4名ほどで
> 利用されるそうなので使いなれているMDBの方が良いとのことでした。

  何名でも同じことです。
  セキュリティー的に、外部から参照できないパスにMDBを置かれるのが
  良いかと思います。

> ところで、SQL Server Expressは商用は禁止ではなかったですか?
> どこかでそのようなことを見たような・・・。記憶違いでしょうか?

  http://www.microsoft.com/japan/msdn/vstudio/express/faq/

  こちらをご参照下さい。
  因みに、商用とは何を持って商用と言うのか・・・
  料金を頂く頂かないに関わらず、昔(?)と違って、かなりライセンス
  の扱いには変化がありますので、ご自身でよくお調べになればと思いま
  す。

以上。
オショウさん

いろいろありがとうございました。
SERVERの設定をしている方がその後、環境設定をしっかり
してくださいました。

その後、起動したらあっさり動作いたしました。

プログラムの方はまったく修正していないのでやはり
SERVER側の設定の問題だったようです。

そうそう、ちなみに
MDBは\InetPub\wwwroot\〜にはありませんのでご安心を。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板