4

ネットからの答えを調べてみたが役に立たなかったという非常に奇妙な状況があります。SQL Server2008R2を使用しています。

TRUNCATE TABLE他のT-SQLステートメントの中でステートメントを含むストアドプロシージャを作成しました 。

これをSQLServerManagement Studioから実行すると、ストアドプロシージャはエラーなしで実行されます。

Windowsフォームアプリケーション(.NET Framework 4を使用してVB.Netで記述されている)から実行すると、エラーが発生します

オブジェクトtbl_Test1が存在しないか、権限がないため、オブジェクトが見つかりません

データベースへの接続はアプリケーション内で正しく設定されています。さらに奇妙なのは、他のストアドプロシージャをまったく同じ方法で作成し、独自のTRUNCATE TABLEステートメントを使用して、エラーなしで実行できることです。

User_Role呼び出し側アプリケーションがとしてログオンしている、へのストアドプロシージャに実行権限があります。

テーブルtbl_Test1は存在します。

私はいくつかのことを試みましたが、これを行うことで、この状況全体についてさらに混乱するようになりました。

  1. Select * from tbl_Test1の前にを付けるとTRUNCATE、ストアドプロシージャが機能します。

  2. 後でselectを返すので、これが存在しないことを望みます。だから私はステートメントのselect @Count = count(*) from tbl_Test1前に再コーディングして実行しました、そしてこれは存在しないか許可がないことTRUNCATEを示す上記の同じエラーで失敗します。tbl_Test1

なぜこれが起こるのか、私は完全に途方に暮れています。これとまったく同じ方法で作成された、切り捨てステートメントを含む他のいくつかのストアドプロシージャがあり、アプリケーションから呼び出されたときに正常に機能します。

誰かが私の問題を助けたり、光を当てたりできますか?

よろしくお願いします

4

1 に答える 1

9

所有権の連鎖は には適用されませんTRUNCATE TABLE

そのアクセス許可を明示的に付与する (必要な最小限のアクセス許可はALTERtable_nameにある) かEXECUTE AS、ストアド プロシージャで使用する必要があります。ストアド プロシージャに対するアクセス許可を与えるEXECだけでは不十分です。

于 2012-11-16T11:37:45.503 に答える