2

我一直在为 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 服务器管理员权限的用户运行时有效,但在作为“普通用户”运行时无效。

在原始应用程序(从中提取此测试用例)中,没有此特定问题,因此我错过了有关为此测试用例设置的权限的一些信息。

任何有关所需权限或如何诊断此问题的建议将不胜感激!

4

0 回答 0