在启用FILESTREAM的情况下运行SQL Server 2012.以具有只读权限的用户身份登录(db_datareader)我成功运行了以下代码.如storing files in sql server 2008 using the filestream option中所述获得filePath和transactionContext.
using (var transaction = new TransactionScope())
{
// filePath and transactionContext are obtained as described here:
// https://*.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用户能够修改文件!可以通过存储过程添加文件,这没关系.但从那时起,文件被认为是只读的.
如何将FILESTREAM数据设为只读?
即我想禁止打开具有写访问权限的文件!
解决方法:
SqlFileStream使用普通的FileStream,所以基本上,你不在SQL安全上下文中.您正在使用NTFS文件权限.
最简单的解决方案是对SQL服务器使用Windows身份验证,并将相同的Windows帐户放在SQL中的db_datareader组中,并在UNC共享上为其提供只读权限.