私はWindowsXP上のWinformsアプリからの「新しいSqlFileStream」の問題のテストケースを作成してきましたが、そうすることで、Windows7でテストケースアプリを実行するときに別の問題が発生しました。
いずれの場合も、接続文字列は統合セキュリティを使用しています。
以下の呼び出しは、管理者として実行した場合は機能しますが、「致命的なユーザー」として実行した場合は機能しません。
using (SqlFileStream sfs = new SqlFileStream(sqlFilePath, (byte[])transactionContextParm.Value,
SIO.FileAccess.Write))
{
//...
}
いずれの場合も、FILESTREAMの選択に使用されたのと同じ行から選択するストアドプロシージャの呼び出しが機能するため、ユーザーはデータベースにアクセスできます。
そして、上記の呼び出しを行う前に、ストアドプロシージャはPathNameとFileStreamトランザクションコンテキストを正常に返しました。
キャッチされた例外からキャプチャされたエラー情報は次のとおりです。
System.ComponentModel.Win32Exception (NativeErrorCode=5/ErrorCode=0x80004005): Access is denied
at System.Data.SqlTypes.SqlFileStream.OpenSqlFileStream(String path, Byte[] transactionContext, FileAccess access, FileOptions options, Int64 allocationSize)
at System.Data.SqlTypes.SqlFileStream..ctor(String path, Byte[] transactionContext, FileAccess access, FileOptions options, Int64 allocationSize)
at System.Data.SqlTypes.SqlFileStream..ctor(String path, Byte[] transactionContext, FileAccess access)
...
このコードは、SQLサーバーの管理者権限を持つユーザーとしてWin 7クライアントマシンで実行された場合は機能しますが、「致命的なユーザー」として実行された場合は機能しません。
元のアプリケーション(このテストケースが抽出されたもの)では、この特定の問題は発生していないため、このテストケースに設定したアクセス許可について何かを見逃しました。
必要な権限、またはこの問題を診断する方法についての提案をいただければ幸いです。