我一直在为 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 服务器管理员权限的用户运行时有效,但在作为“普通用户”运行时无效。
在原始应用程序(从中提取此测试用例)中,没有此特定问题,因此我错过了有关为此测试用例设置的权限的一些信息。
任何有关所需权限或如何诊断此问题的建议将不胜感激!