0

リモート サーバー上にあるデータベースへのアクセスに問題があります。

データベースに接続しようとしている 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()' のこの行:
Exception Details: System.Data.OleDb.OleDbException: Not a valid file name.

データベース名を確認しましたが、正しいです(確認するためにコピー/貼り付けしても)

接続文字列の「データ ソース」セクションをブラウザのアドレス バーに入力すると、リモート サーバー上の共有の内容を正常に表示できます。

これが権限の問題なのか、コードの問題なのかはわかりません。
私はこれからがらくたをグーグルで検索しましたが、解決策を見つけることができませんでした。

どんな助けでも大歓迎です。

4

5 に答える 5

1

Webアプリがdbファイルを読み取ろうとしたときにサーバーで使用されているアカウントは何ですか?このユーザーアカウントが何であれ、そのフォルダー/ファイルを読み取るためのアクセス許可が必要です。IIS6では、任意のユーザーアカウントを使用するように仮想フォルダを構成できます...[ディレクトリセキュリティ]タブの[認証とアクセス制御]の下に[編集]ボタンがあります。

エラーメッセージは単なる一般的なエラーメッセージである可能性が高く、権限の問題が実際の問題です。

于 2008-12-04T17:56:46.120 に答える
1

リモート Access MDB データベースにアクセスする場合、\\remoteMachine\Share\test.mdb のような UNC パスを指定する必要があります。

アプリケーション プール ID に、リモート共有に接続するための適切なアクセス許可があることを確認してください。IIS 6 では、デフォルトで Network Service アカウントを使用して作業していますが、これはデフォルトでリモート共有へのアクセスを許可されていません。

最善の方法は、AppPool を専用のサービス ユーザーで実行することです。

于 2008-12-04T06:25:24.610 に答える
0

アップデート

まず、回答を提出してくださった皆様に感謝します。

しかし、「仮想フォルダーを介してリモート データベースに接続する」方法を使用しないことになりました。これを機能させるために必要なアクセス許可の複雑さが、必要以上に多くの問題を引き起こしたためです。UNC パスを接続文字列に戻します。これは最適な方法ではないかもしれませんが、うまく機能しています。

于 2008-12-05T05:17:58.910 に答える
0

2 つのサーバーが相互に内部アクセスできることを確認し、接続文字列で db サーバーの IP とポートを指定します。

于 2008-12-04T06:20:52.513 に答える
0

アップデート

また、次のように 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 アカウント以外のドメイン資格情報を使用する必要がある場合に問題になる可能性があると思います。

于 2008-12-04T06:27:12.360 に答える