Sql-Server

尋找 FILESTREAM 內幕資訊

  • October 14, 2017

在 Microsoft SQL Server 2012 上啟動 FILESTREAM 功能後,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 的數據庫腳本

創建啟用 FILESTREAM 的數據庫的腳本 是的,我確實意識到所有路徑都在 C:; 這只是一個例子

Paul Randall 等人的白皮書。繼續解釋…

FILESTREAM 數據儲存在文件系統中一組稱為數據容器的 NTFS 目錄中,這些目錄對應於數據庫中的特殊文件組。對 FILESTREAM 數據的事務訪問由 SQL Server 和作為在 Windows 級別啟用 FILESTREAM 的一部分而安裝的文件系統篩選器驅動程序控制。使用文件系統過濾器驅動程序還允許通過 UNC 路徑遠端訪問 FILESTREAM 數據。SQL Server 維護從表行到與其關聯的 FILESTREAM 文件的排序連結。這意味著直接通過文件系統刪除或重命名任何 FILESTREAM 文件將導致數據庫損壞。

…在文件(第 14 頁)的更下方,他們繼續進行…

每個具有 FILESTREAM 數據容器的 NTFS 卷都有一個 FILESTREAM 文件系統篩選器驅動程序,並且每個版本的 SQL Server 都有一個在卷上具有 FILESTREAM 數據容器的驅動程序。每個篩選器驅動程序負責管理該卷的所有 FILESTREAM 數據容器,以及使用特定 SQL Server 版本的所有實例。

例如,託管三個 FILESTREAM 數據容器(三個 SQL Server 2008 實例各一個)的 NTFS 卷將只有一個 SQL Server 2008 FILESTREAM 文件系統篩選器驅動程序。

問題

  1. 很高興知道 SQL Server 的一切都很好並且捆綁在一起,但是這個共享實際上有什麼作用呢?它是所謂的“文件系統過濾驅動程序”嗎?
  2. 看到任何經過身份驗證的使用者都可以訪問“共享”,安全隱患是什麼?
  3. 設備 RsFx0320 是 Windows Server 2012 引入的彈性文件系統格式的前身嗎?

如果您可以提供我的問題的答案,那麼如果您可以提供源參考,那就太好了。

在 Microsoft SQL Server 2012 上啟動 FILESTREAM 功能後,SQL Server 將在系統上創建一個“隱藏​​”共享。

預設情況下它不這樣做,您必須選擇啟用共享。這是通過 SQL Server 配置管理器完成的。如果您取消選擇Enable FILESTREAM for file I/O access,共享將被刪除。

在此處輸入圖像描述

  1. 很高興知道 SQL Server 的一切都很好並且捆綁在一起,但是這個共享實際上有什麼作用呢?

該共享允許客戶端(本地和遠端)擁有一個單一的共享位置,以使用流式 Windows api 訪問文件流數據。這與用於文件流訪問的 SQL Server 實例級別設置結合使用Full Access Enabled,任何其他訪問設置都不應與流 API 一起使用。

在此處輸入圖像描述

  1. …是所謂的“文件系統過濾驅動程序”嗎?

不它不是。這只是一個文件共享。

我試圖不弄混水,但您確實要求提供盡可能多的資訊。實際上,在上面的刪除線文本中,我確實說這不是過濾器驅動程序。然而,這在技術上是半真半假的。是的,它是一個共享文件夾,但它實際上是通過過濾器驅動程序共享的。我真的對此進行了辯論,因為它開始變成一個沒有原始碼的兔子洞,你真的不能下去(老實說,在我看來,除了學術之外,它沒有什麼價值)。

過濾器驅動程序的重點是做一些事情,但其中之一是通過各種介面對儲存在文件流目標中的數據進行事務訪問;SQL Server、Transact SQL、Windows API。它還執行一些其他項目 - 但是通過共享提供的訪問權限是通過過濾器驅動程序完成的。事實上,如果您嘗試訪問文件流中的文件並且不是管理員或 SQL Server,您應該無法訪問它們。

所以,是的,這既是也不是**過濾器驅動程序。它是通過過濾器驅動程序公開的一半 Windows 文件共享。您可以看到這是您查看共享的路徑屬性。

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

2.看到任何經過身份驗證的使用者都可以訪問“共享”,有什麼安全隱患?

您可以更改權限並要求正確設置設置。安全隱患是任何其他文件共享的安全隱患。

  1. 設備 RsFx0320 是 Windows Server 2012 引入的彈性文件系統格式的前身嗎?

不,這是特定版本的過濾器驅動程序的名稱。例如,這是一個載入 2016 的系統RsFx0410。ReFS 是一個文件系統,這是一個位於文件系統和微型埠驅動程序之間的過濾器驅動程序。實際上,令人不安的是,這是一個遺留過濾器驅動程序,由高度末端的 .10 表示……嗯。您還會注意到它的高度相當,這對於 3rd 方過濾器驅動程序通常是不可接受的。

在此處輸入圖像描述

如果您可以提供我的問題的答案,那麼如果您可以提供源參考,那就太好了。

我沒有這方面的來源,但通過螢幕截圖和更改設置的配置選項備份了我的資訊。通過查看產品本身並了解視窗的工作原理(例如:過濾器驅動程序),可以找到此答案中的所有內容。

引用自:https://dba.stackexchange.com/questions/180142