0

C# アプリケーションがあり、以下は Web.config ファイルからの抜粋です。

  <connectionStrings>
    <add name="MyDB" connectionString="Data Source=MACHINENAME\\SQLEXPRESS;Initial Catalog=DBName;Integrated Security=True;MultipleActiveResultSets=true" providerName="System.Data.SqlClient"/>
  </connectionStrings>
  <system.web>
    <authentication mode="Windows" />
    <identity impersonate="false" />
  </system.web>

コード自体には、次のようなクエリがあります。

[WebMethod]
public string InsertField(string str1, string str2, string str3)
{

    string sql = @"
          UPDATE DBNAME.dbo.TableName SET Field2 = '{2}', Modified_At=GETDATE() WHERE Field1 = '{0}' AND Field2 = '{1}';

          IF @@ROWCOUNT = 0
              INSERT INTO DBNAME.dbo.TableName (Field1, Field2, Field3, Modified_At)
              VALUES('{0}', '{1}', '{2}', GETDATE())
            ";

    sql = String.Format(sql, str1, str2, str3);

    try
    {
          string ConString = Constants.connString;
          con = new SqlConnection(ConString);

          cmd = new SqlCommand(sql, con);
          con.Open();
          cmd.ExecuteNonQuery();
          return "Success";
    }
    catch (Exception x)
    {
          return x.Message;
          //Response.Write(x);
     }

}

Web アプリケーションをデバッグすると問題なく動作しますが、公開するとクエリが失敗します。Firebug でデバッグすると、次のエラーが発生します。

{
    "d": "The UPDATE permission was denied on the object "TableName", database "DBName", schema "dbo".\r\nThe INSERT permission was denied on the object "TableName", database "DBName", schema "dbo"."
}

これを修正する方法について何か提案はありますか?

4

2 に答える 2

2

はい、これはかなり明白なエラーです。Web が実行するように設定されているアカウントが、特定のテーブルを更新/挿入するためのアクセス権を持っていることを確認する必要があります。

ユーザーが接続文字列に設定されていないようです。Web メソッドが実行されているものは何でも使用します。そのため、そのアカウントが何であるかを調べて、適切な権限を付与してください。おそらくあなたのアカウントで実行されていたため、おそらく開発データベースに完全にアクセスできたため、開発中に機能しました。

于 2012-04-19T04:03:20.800 に答える
1

ユーザーには、本番環境で更新を実行するための十分な権限がありません。実行しているユーザーに更新権限を付与する必要があります

于 2012-04-19T04:03:36.090 に答える