我一直在为Windows XP上的Winforms应用程序中的“新SqlFileStream”问题编写测试用例,这样做在Windows 7上运行测试用例时遇到了另一个问题。
在所有情况下,连接字符串都使用集成安全性。
当以管理员身份运行时,以下调用有效,但在以“凡人用户”身份运行时无效:
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)
...
代码在Win 7客户端计算机上作为具有SQL服务器管理员权限的用户运行时有效,但在作为“凡人用户”运行时则无效。
在原始应用程序中(从中提取此测试用例),没有这个特定问题,所以我错过了我为此测试用例设置的权限。
非常感谢有关所需权限或如何诊断此问题的任何建议!