4

有効にして実行SQL Server 2012しています。FILESTREAM読み取り専用権限 ( ) を持つユーザーとしてログオンしdb_datareader、次のコードを正常に実行しました。filePathとは、filestream オプションを使用して SQL Server 2008 にファイルを保存するでtransactionContext説明されているように取得されます。

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 データを読み取り専用にするにはどうすればよいですか?

つまり、書き込みアクセスでファイルを開くことを禁止したい!

4

2 に答える 2

3

SqlFileStream内部では通常FileStreamを使用するため、基本的に、SQL セキュリティ コンテキストから外れています。NTFS ファイルのアクセス許可を使用しています。

最も簡単な解決策は、SQL サーバーに Windows 認証を使用し、同じ Windows アカウントを SQL の db_datareader グループに配置し、UNC 共有で読み取り専用権限を付与することです。

于 2013-03-20T11:16:55.977 に答える
0

ラッパーを書き、メソッドを実現しないWrite()

于 2013-02-21T11:48:55.957 に答える