web-dev-qa-db-ja.com

FILESTREAMインサイダー情報を求めて

FILESTREAM機能がMicrosoft SQL Server 2012でアクティブ化されると、SQL Serverはシステム上に「隠し」共有を作成します。シェアは次のように定義されます。

Sharename          FILESTREAM_SHARE
Path               \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE
Remark             SQL Server FILESTREAM share
Maximum users      unlimited
Users Caching      Manual caching of documents 
Permissions        NT-AUTHORITY\Authenticated Users, FULL

名前は、SQL Server構成マネージャーでFILESTREAMを最初に構成するときに指定する共有の名前です。しかし、それは何のためですか?

これまでのところ

利用可能なFILESTREAMドキュメントをすべて読みます。

...しかし、シェアとそれが何をするのか、何のためにあるのかについての言及はありませんでした。名前を入力すると、SQL Serverが内部で共有を作成します。

FILESTREAM対応のデータベース

FILESTREAM対応のデータベースを作成すると、データベースは、FILESTREAMの構成中に最初に作成された共有とはまったく関係のないディレクトリ(別のドライブで推奨)を参照するファイルグループを参照します。

スクリーンショットFILESTREAM対応のデータベーススクリプト

Script to Create FILESTREAM-enabled databaseはい、すべてのパスがC:にあることを理解しています。それは単なる例です

ポール・ランドールらによる白書。それを説明し続ける...

FILESTREAMデータは、データベース内の特別なファイルグループに対応する、データコンテナーと呼ばれる一連のNTFSディレクトリのファイルシステムに格納されます。 FILESTREAMデータへのトランザクションアクセスは、SQL Serverと、WindowsレベルでFILESTREAMを有効にする一環としてインストールされるファイルシステムフィルタードライバーによって制御されます。ファイルシステムフィルタードライバーを使用すると、UNCパスを介してFILESTREAMデータにリモートアクセスすることもできます。 SQL Serverは、テーブル行からそれに関連付けられているFILESTREAMファイルへの並べ替えのリンクを維持します。つまり、ファイルシステムを介してFILESTREAMファイルを直接削除または名前変更すると、データベースが破損します。

...文書(14ページ)のさらに下で...

FILESTREAMデータコンテナーを持つNTFSボリュームごとに1つのFILESTREAMファイルシステムフィルタードライバーがあり、ボリューム上にFILESTREAMデータコンテナーを持つSQL Serverのバージョンごとに1つあります。各フィルタードライバーは、特定のバージョンのSQL Serverを使用するすべてのインスタンスについて、そのボリュームのすべてのFILESTREAMデータコンテナーを管理します。

たとえば、3つのSQL Server 2008インスタンスのそれぞれに1つずつ、3つのFILESTREAMデータコンテナーをホストしているNTFSボリュームには、SQL Server 2008 FILESTREAMファイルシステムフィルタードライバーが1つだけあります。

ご質問

  1. SQL Serverにはすべての機能があり、拘束されていることを知ってよかったですが、その共有は実際には何をするのでしょうか。いわゆる「ファイルシステムフィルタードライバー」ですか?
  2. 認証されたユーザーが「共有」にアクセスできると考えると、セキュリティにどのような影響がありますか?
  3. デバイスRsFx0320は、Windows Server 2012で導入された復元力のあるファイルシステム形式の前身ですか?

私の質問への回答を提供できる場合は、ソース参照を提供できればいいでしょう。

14

FILESTREAM機能がMicrosoft SQL Server 2012でアクティブ化されると、SQL Serverはシステム上に「隠し」共有を作成します。

デフォルトではこれは行われません。共有を有効にするには、選択する必要があります。これは、SQL Server構成マネージャーを介して行われます。 Enable FILESTREAM for file I/O accessの選択を解除すると、共有は削除されます。

enter image description here

  1. SQL Serverにはすべての機能があり、拘束されていることを知ってよかったですが、その共有は実際には何をするのでしょうか。

共有により、クライアント(ローカルおよびリモート)が単一の共有場所を持ち、ストリーミングウィンドウAPIを使用してファイルストリームデータにアクセスできます。これは、Full Access EnabledのファイルストリームアクセスのSQL Serverインスタンスレベルの設定と連携して機能します。他のアクセス設定は、ストリーミングAPIでは機能しません。

enter image description here

  1. ...いわゆる「ファイルシステムフィルタードライバー」ですか?

いいえそうではありません。これは単なるファイル共有です。

私は水を濁さないように努めていましたが、あなたはできるだけ多くの情報を求めました。上記の取り消し線のテキストでは、実際には、これはフィルタードライバーではなかったと述べています。ただし、技術的には真実の半分です。はい、それは共有フォルダですが、実際にはフィルタドライバを介して共有します。私はこれについて本当に議論しました。それは、ソースコードがなければ絶対に下がることのできないうさぎの穴になり始めているからです(そして、正直に言うと、私の見解では、学術的以外の価値はほとんどありません)。

フィルタードライバーの要点はいくつかのことを行うことですが、その1つは、さまざまなインターフェイスを介してfilestreamターゲットに格納されたデータへのトランザクションアクセスを提供することです。 SQL Server、Transact SQL、Windows API。他のいくつかの項目も実行しますが、共有を介して与えられるアクセスは、フィルタードライバーを介して行われます。実際、ファイルストリーム内のファイルにアクセスしようとして、管理者でもSQL Serverでもない場合は、それらにアクセスできません。

つまり、これはフィルタードライバーであるではないです。フィルタードライバーを通じて公開されるのは、Windowsファイル共有の半分です。これは、共有のパスプロパティを表示していることを確認できます。

get-wmiobject -class Win32_share | where {$_.Description -like 'SQL Server*'} | ft name, path -autosize

2.認証されたユーザーが「共有」にアクセスできることを確認すると、セキュリティにどのような影響がありますか?

権限を変更でき、設定を適切に設定する必要があります。セキュリティへの影響は、他のファイル共有の影響です。

3.デバイスRsFx0320は、Windows Server 2012で導入された復元力のあるファイルシステム形式の前身ですか?

いいえ、これはフィルタードライバーの特定のバージョンの名前です。たとえば、こちらは2016がロードされたシステムですRsFx0410。 ReFSはファイルシステムです。これは、ファイルシステムとミニポートドライバーの間に位置するフィルタードライバーです。これは、高度の末尾にある.10で示されているレガシーフィルタードライバーであることに、かなり戸惑っています...うーん。 かなりのlowaltitude があることにも気づくでしょう。これは一般にサードパーティのフィルタードライバーでは受け入れられません。

enter image description here

私の質問への回答を提供できる場合は、ソース参照を提供できればいいでしょう。

私にはこれに関する情報源はありませんが、スクリーンショットと設定を変更する設定オプションを通じて情報をバックアップしています。この答えのすべては、製品自体を調べて、ウィンドウの一部がどのように機能するかを知ることで見つけることができます(例:フィルタードライバー)。

5
Sean Gallardy

これがあなたの質問に対する私の見解です:

1.SQL Serverにはすべての機能があり、拘束されていることを知ってうれしいですが、実際にはその共有は何をしますか?いわゆる「ファイルシステムフィルタードライバー」ですか?

SQL Serverのファイルストリームアクセスは、ファイルへのアクセスがすべてです。共有は、ファイル共有を介してその場所を提供します。

OpenSqlFilestreamを使用していくつかのC#コードでこれを簡単に確認できます。

https://docs.Microsoft.com/en-us/sql/relational-databases/blob/access-filestream-data-with-opensqlfilestream

ご覧のとおり、CreateFileのFILE_SHARE_READはなく、ファイルマジックもファイルストリームもありません。

try
    {
        if ( (srcHandle = CreateFile(
            srcFilePath,
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_FLAG_SEQUENTIAL_SCAN,
            NULL)) == INVALID_HANDLE_VALUE )
            throw szErrMsgSrc;

注:ローカルサーバー/共有なしのFILESTREAMオプションがない理由については、私には手掛かりがありません。一部の人々はその追加レベルのセキュリティを好むかもしれません。

2。すべての認証済みユーザーが「共有」にアクセスできるので、セキュリティにはどのような影響がありますか?

うわー、素晴らしい質問です。認証されたすべてのユーザーが共有のアクセス許可を使用できるようですが、基になるNTFSアクセス許可はセキュリティを微調整する必要があります。しかし、これはセキュリティホールのように思えます。 NTFSアクセス許可がどのように微調整されているかをさらに調査する必要がありますが、一般化されたファイル共有アクセス許可は確実に好きではありません。マイクロソフトに来て、すべての「認証済みユーザー」?正しいか間違っているか、マイクロソフトはNTFSアクセス許可の共有/フォーカスを無視する傾向があると思います。

「認証済みユーザー」の提供は、長年にわたって議論されてきたトピックです。これは、「認証済みユーザー」の前後で私が読んだ最高のブログの1つです。それはWindowsに非常に根付いているので、合法的なリスクであると彼らが言ったことはないと思います-新しい製品が出てそれを取り除くまで。

https://social.technet.Microsoft.com/Forums/windowsserver/en-US/bb74fa7c-89bd-476d-88bf-e88cd66618e6/why-is-authenticated-users-in-the-local-users- group-by-default?forum = winserversecurity

3。デバイスRsFx0320は、Windows Server 2012で導入された復元力のあるファイルシステムフォーマットの前身ですか?

O/SベースではなくSQLベースのように見えます。 RsFx0320.sysはSQL 2008です。以下に示すように、SQL 2012はRsFx0201.sysで、SQL 2014はRsFx0300.sysです。

https://support.Microsoft.com/en-us/help/2961258/fix-cannot-access-the-data-in-filetable-after-you-upgrade-from-sql-ser

Microsoftは、2012から2014にアップグレードするとどうなるかを示しています。

To work around this issue, change manually the path property of the resource <AvailabilityGroupName>_FSShare to point to the correct driver: From
'\\?\GLOBALROOT\Device\RsFx0201\<localmachine>\{AvailabilityGroupID}' to '\\?\GLOBALROOT\Device\RsFx0300\<localmachine>\{AvailabilityGroupID}'
2
Sting