在启用SQL Server 2012
的情况下运行FILESTREAM
。以具有只读权限(db_datareader
)的用户身份登录我成功运行以下代码。 filePath
和transactionContext
的获取方式如storing files in sql server 2008 using the filestream option中所述。
using (var transaction = new TransactionScope())
{
// filePath and transactionContext are obtained as described here:
// https://stackoverflow.com/questions/6463343/storing-files-in-sql-server-2008-using-the-filestream-option
using (var stream = new SqlFileStream(filePath, transactionContext, FileAccess.Write, FileOptions.SequentialScan, 0))
{
var b = System.Text.Encoding.Unicode.GetBytes("OVERWRITE");
stream.Write(b, 0, b.Length);
}
}
出于性能原因,我想使用SqlFileStream
,但我不希望我的db_datareader
用户能够修改文件! 可以通过存储过程添加文件,这没关系。但从那时起,文件被认为是只读的。
即。我想禁止打开具有写访问权限的文件!
答案 0 :(得分:3)
SqlFileStream
使用普通的FileStream
,所以基本上,你不在SQL安全上下文中。您正在使用NTFS文件权限。
最简单的解决方案是使用 Windows身份验证用于SQL服务器并将相同的Windows帐户放在SQL中的db_datareader组中,并在UNC共享上为其提供只读权限。
答案 1 :(得分:0)
编写包装器而不实现方法Write()