防止FILESTREAM上的写操作?

时间:2013-02-21 11:45:40

标签: c# sql-server filestream

在启用SQL Server 2012的情况下运行FILESTREAM。以具有只读权限(db_datareader)的用户身份登录我成功运行以下代码。 filePathtransactionContext的获取方式如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用户能够修改文件! 可以通过存储过程添加文件,这没关系。但从那时起,文件被认为是只读的。

如何将FILESTREAM数据设为只读?

即。我想禁止打开具有写访问权限的文件!

2 个答案:

答案 0 :(得分:3)

SqlFileStream使用普通的FileStream,所以基本上,你不在SQL安全上下文中。您正在使用NTFS文件权限。

最简单的解决方案是使用 Windows身份验证用于SQL服务器并将相同的Windows帐户放在SQL中的db_datareader组中,并在UNC共享上为其提供只读权限。

答案 1 :(得分:0)

编写包装器而不实现方法Write()