リモート共有を指す仮想フォルダーを介してデータベースにアクセスするにはどうすればよいですか
-
19-08-2019 - |
質問
リモートサーバー上にあるデータベースへのアクセスに問題があります。
データベースに接続しようとしているASP.NET 2.0 Webページがあります。
データベースには、仮想フォルダー(IISで設定)を介してアクセスします。
仮想フォルダーは、データベースを含むリモート共有を指します。
(Webアプリのルートディレクトリにある)仮想フォルダーは、UNCパスを介してリモートサーバー上の共有を指しています。
\\databaseServerName\databaseFolder$\
仮想フォルダーの「読み取り」および「参照」権限が「true」に設定されています。
接続文字列をweb.configの「appSettings」セクションに保存します:
<add key="conStrVirtual" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source=http://webAppServerName/virtualFolderName/databaseName.MDB;Jet OLEDB:Database Password=dumbPassword;"/>
接続オブジェクトは、.aspxページで宣言されています:
Dim objConnVirtual As New OleDbConnection(ConfigurationManager.AppSettings("conStrVirtual"))
接続オブジェクトを使用しようとするコードは次のとおりです:
Public Sub Test()
If objConnVirtual.State <> ConnectionState.Open Then
objConnVirtual.Open()
End If
Dim cmd As OleDbCommand = New OleDbCommand("SELECT * FROM TableName", objConnVirtual)
objDR = cmd.ExecuteReader()
If objDR.Read() Then
response.write("Shazaam! Data shows up here")
End If
objDR.Close()
objConnVirtual.Close()
End Sub
上記のコードを実行すると、次のエラーが表示されます(コードのこの行 'objConnVirtual.Open()':
例外の詳細:System.Data.OleDb.OleDbException:有効なファイル名ではありません。
データベース名を確認しましたが、正しいことを確認します(コピーして貼り付けても確認できます)
接続文字列の「データソース」セクションをブラウザのアドレスバーに配置すると、リモートサーバー上の共有のコンテンツを正常に表示できます。
これが権限の問題なのかコードの問題なのかわからない。
私はこれからがらくたをグーグルで調べましたが、解決策を見つけることができませんでした。
ご協力いただければ幸いです。
解決 5
更新
まず、回答を送信してくれたすべての人に感謝します。
ただし、「仮想フォルダーを介してリモートデータベースに接続する」方法を使用しない ことになりました。 UNCパスを接続文字列に戻します。これはこれを行うための最良の方法ではないかもしれませんが、私たちのために働いています。
他のヒント
リモートアクセスMDBデータベースにアクセスする場合、\\ remoteMachine \ Share \ test.mdbなどのUNCパスを指定する必要があります。
アプリケーションプールIDに、リモート共有に接続するための適切なアクセス許可があることを確認します。 IIS 6のデフォルトでは、ネットワークサービスアカウントで作業しています。デフォルトでは、リモート共有へのアクセスは許可されていません。
最良の方法は、専用のサービスユーザーでAppPoolを実行することです。
Webアプリがdbファイルを読み取ろうとするときにサーバーで使用されているアカウントは何ですか?このユーザーアカウントが何であっても、そのフォルダー/ファイルを読み取るためのアクセス許可が必要です。 IIS6では、任意のユーザーアカウントを使用するように仮想フォルダーを構成できます。[ディレクトリセキュリティ]タブの[認証とアクセス制御]の下に[編集]ボタンがあります。
エラーメッセージは単なる一般的なエラーメッセージであり、権限の問題が実際の問題である可能性が高いようです。
2つのサーバーが相互に内部アクセスできることを確認し、ip <!> ampも指定します。接続文字列のdbサーバーのポート。
更新
私のマシンで動作する(次のようにweb.configの「appSettings」セクションで接続文字列を宣言した場合、実稼働ボックスに一度ロードされたわけではありません)
<add key="conStrVirtual" value="Provider=Microsoft.Jet.OleDb.4.0;Data Source=\\databaseServerName\databaseFolder$\databaseName.MDB;Jet OLEDB:Database Password=dumbPassword;"/>
これにより、ローカルIUSERアカウント以外のドメイン資格情報を使用する必要があるという問題が発生する可能性があると考えるようになります。