0

バックエンドにAccess2003データベースを使用する古いプログラムにデータをプッシュする必要があるASP.NETページがあります。これを行うために接続文字列をすべて設定しましたが(DBのローカルコピーに成功しました)、ネットワーク共有の場所にあるデータベースから読み取ろうとすると、次のエラーが発生します。

レコードを読み取ることはできません。'tblDevice'に読み取り権限がありません。

データベースにはパスワードやセキュリティがないので、これはネットワークに関連していると確信しています。接続文字列にネットワークログイン/パスワードを含める方法を知りません。フォルダーに特定のユーザーを追加する必要があると思います。ただし、そのフォルダーが機能するために(Visual StudioとIISの両方から)そのフォルダーへのアクセス許可が必要なユーザーがわかりません。このタイプのエラーの経験がある人、またはフォルダへのアクセス許可を与える必要がある「ユーザー」を知っている人はいますか?


参照用の私のコード:

接続文字列にアクセスします

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\\srv.local\SHAREDOCS\data.mdb;
    User Id=admin;Password=;

選択コード

public static DataTable GetDevices(string serialNum)
{
    var conn = new OleDbConnection();
    var builder = new OleDbConnectionStringBuilder();
    builder.ConnectionString = ConfigurationManager.ConnectionStrings["development"].ToString();
    conn = builder.ConnectionString;

    var sqlString = "SELECT DeviceID, SN FROM tblDevice WHERE Active=True AND SN=@serialNum ORDER BY SN, DeviceID; "

    using (var cmd = new OleDbCommand(sqlString, conn))
    {
        cmd.Parameters.AddWithValue("@serialNum", serialNum);
        var ds = new DataSet();
        var da = new OleDbDataAdapter(cmd);

        da.Fill(ds);

        return ds.Tables[0];
    }
}
4

2 に答える 2

1

最終的にこれを理解しましたが、私が期待したものにはほど遠いものでした。奇妙な理由で、データベースにはさまざまなテーブルの権限がランダムに異なっていました。(一部はフルアクセス、一部はなし、一部は混合...プログラムの動作について私が知っていることから、韻や理由はありません。) アクセス許可を取得するには、ここに移動する必要がありました(アクセス 2010 ですが、2003 MDB ファイル) :

File -> Info -> Users and Permissions -> User and Group Permissions...

これにより、次のオプションが提示されました。

ここに画像の説明を入力

私がしなければならなかったのは、各オブジェクトの適切なアクセス許可を確認することだけで、今では機能しています。

于 2013-03-04T19:40:47.560 に答える
0

アプリケーション プールが実行されているサービス アカウントにデータベースへのアクセス許可があることを確認します。サービス アカウントが権限を持っていない状態で実行されている場合、このような問題が発生する可能性が高くなります。

于 2013-03-04T17:42:59.563 に答える