- PR -

ASP.NETでdBaseファイルに接続したい

1
投稿者投稿内容
ジャックスケリントン
会議室デビュー日: 2006/09/20
投稿数: 2
投稿日時: 2006-09-20 13:41
初めて書き込みます。長文になりますがよろしくお願い致します。

ASP.NET2.0(C#)でファイルサーバー内のdBaseファイル(Visual dBase 7で作成されたテーブルファイル(*.dbf))にOdbc接続(System.Data.Odbcで)したいのですが、不明な点が多いため質問させてください。

以下開発環境です。
---------------------------------------------------
クライアント兼Webサーバー
OS:WindowsXP SP2
開発ソフト:VisualStudio2005pro ASP.NET C#
その他:IIS,BDE5.01

ファイルサーバー
OS:Windows2000Server SP3
---------------------------------------------------

色々調べたり試した結果、ファイルdsnと接続文字列の両方で(システムdsnでは何故かダメでした。)OdbcConnection接続しデータ操作できることを条件付で確認できました。

ファイルdsnをメモ帳で開いたものです。
[ODBC]
DRIVER=Microsoft dBase Driver (*.dbf)
UID=admin
UserCommitSync=Yes
Threads=3
Statistics=0
SafeTransactions=0
PageTimeout=600
MaxScanRows=8
MaxBufferSize=2048
FIL=dBase 5.0
DriverId=533
Deleted=1
DefaultDir=\\サーバー名\共有フォルダ名
CollatingSequence=ASCII

条件とは、web.configで<identity impersonate = "true" userName="test" password="test">とし、このユーザーtestに対してクライアントPCのAdmin権限を与えた場合です。

以下すべて接続できませんでした
・testの権限がAdmin以外の場合
・<identity impersonate = "false">つまりASP.NETアカウントの場合、さらにASP.NETアカウントにAdmin権限を与えた場合
・<identity impersonate = "true">つまりIUSER_****アカウントの場合、さらにIUSER_****にAdmin権限を与えた場合

以下がその時発生したエラーです。
ERROR [HY000] [Microsoft][ODBC dBase Driver]一般エラー レジストリ キー 'Temporary (volatile) Jet DSN for process 0x778 Thread 0x708 DBC 0x397ca4 Xbase' を開くことができません。
ERROR [IM006] [Microsoft][ODBC Driver Manager] ドライバの SQLSetConnectAttr は失敗しました。
ERROR [HY000] [Microsoft][ODBC dBase Driver]一般エラー レジストリ キー 'Temporary (volatile) Jet DSN for process 0x778 Thread 0x708 DBC 0x397ca4 Xbase' を開くことができません。
ERROR [HY024] [Microsoft][ODBC dBase Driver] パス '(不明)' は正しくありません。パス名に間違いがないことと、ファイルが置かれたサーバーに接続していることを確認してください。
ERROR [HY000] [Microsoft][ODBC dBase Driver]一般エラー レジストリ キー 'Temporary (volatile) Jet DSN for process 0x778 Thread 0x708 DBC 0x397ca4 Xbase' を開くことができません。
ERROR [HY000] [Microsoft][ODBC dBase Driver]一般エラー レジストリ キー 'Temporary (volatile) Jet DSN for process 0x778 Thread 0x708 DBC 0x397ca4 Xbase' を開くことができません。
ERROR [HY024] [Microsoft][ODBC dBase Driver] パス '(不明)' は正しくありません。パス名に間違いがないことと、ファイルが置かれたサーバーに接続していることを確認してください。

これによりレジストリが怪しいと思ったので、ネットで調べてHKEY_LOCAL_MACHINE\SOFTWARE\ODBCのアクセス権設定で上記の各アカウントに対してフルコントロール許可をつけてを実行してみたところ、レジストリに関するエラーはでなくなりましたが、それ以外のエラーはなくなりませんでした。

以下についてお聞かせください。

やはりレジストリか、それ以外のフォルダのアクセス権設定に問題があるような気がしているのですが、それであれば最小限のアクセス権設定で接続できるとよいので、どこを確認すればよいでしょうか?

またこのエラーの原因について、アクセス権設定以外の理由で考えられることはありますでしょうか?
(そもそもdBase7で作成されたファイルはASP.NET+ADO.NETで使用できないと考えるべきでしょうか・・・?現在稼動しているアプリケーションがdelphi+BDEでdBaseを利用して作られているので、そのまま利用したいのですが・・・。)

他にdBaseファイルに接続する方法がないでしょうか?
 (TabeleAdapterでの接続では、INSERTすると文字化けしました。これが使えれば一番楽なのですが・・・)

長文失礼しました。よろしくお願いします。

[ メッセージ編集済み 編集者: ジャックスケリントン 編集日時 2006-09-20 14:21 ]
ジャックスケリントン
会議室デビュー日: 2006/09/20
投稿数: 2
投稿日時: 2006-09-29 17:15
引き続き自分で調べた結果を報告しておきます。

質問内容のまとめ
開発中のASP.NET2.0アプリケーションにおいて、Webサーバーとは別サーバー内のdBaseファイル(Visual dBase 7で作成されたファイル)に対して、ローカルのAdmin権限を持ったユーザーで偽装しない限り、ODBC接続できない。適切な解決方法はあるか?

この件に関しては、dBase特有の問題というより、ASP.NETでODBC接続する際には(例えばAccessファイルなど)同様のエラーが発生する可能性があるようです。

↓自分自身で調べた中で最も適切な解決方法↓

プログラム内で、Admin権限を持ったユーザーに一時的に偽装します。

プログラム内での一時的な偽装:ASP.NET2.0で偽装と委任を使用する方法
http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000023.aspx

WindowsIdentityオブジェクトにWin32 LogonUser APIが返すログオントークンを渡す方法です。LogonUserに渡すAdmin権限を持ったアカウントの情報は、web.configに暗号化して保存します。

Web.configの特定セクションを暗号化する:RSA を使用して ASP.NET 2.0 内の構成セクションを暗号化する方法
http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000006.aspx


しかし、例えこの方法を取ったとしても、一時的にAdmin権限を持ったユーザーがデータアクセスするわけですので、セキュリティには不安が残ります。
またマイクロソフトは、開かれたWebアプリケーションで使用するデータベースにAccessデータベースを使用しないようにと言っているので、dBaseなんて以ての外でしょう。実運用には使えませんよね・・・。まあ今回の件で色々勉強になりました。


あと、この件に関して読んだMSDN資料のURLを載せておきます。
同じような悩みの方の参考になればと思います。

※特に「ASP.NET からリモート アクセス データベースに接続するために必要なアクセス許可」についてはそのものズバリでしたが、これ通りに最低限のアクセス許可を設定したとしても、”ディスクまたはネットワークのエラーです”というODBCエラーはなくなりませんでした。

[PRB] エラー メッセージ : 0x80004005: 一般エラー レジストリ キーを開けませんでした
http://support.microsoft.com/default.aspx?scid=kb;ja;295297

ASP.NET からリモート アクセス データベースに接続するために必要なアクセス許可
http://support.microsoft.com/default.aspx?scid=kb;ja;307901

セキュリティ保護された ASP.NET アプリケーションの構築 : 認証、認定、および通信のセキュリティ保護
第 12 章 データ アクセス セキュリティ
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdnaspp/htm/SecNetHT01.asp

How To: ASP.NET 2.0 アプリケーション用のサービス アカウントを作成する方法
http://www.microsoft.com/japan/msdn/enterprise/pag/securityguidance/paght000009.aspx

以上です。

[ メッセージ編集済み 編集者: ジャックスケリントン 編集日時 2006-09-29 17:32 ]
1

スキルアップ/キャリアアップ(JOB@IT)