寻找 FILESTREAM 内幕信息

Joh*_* N. 14 sql-server-2008 sql-server database-internals sql-server-2012 filestream

在 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
Run Code Online (Sandbox Code Playgroud)

该名称是您在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 数据容器的 NTFS 卷(三个 SQL Server 2008 实例中的每一个实例一个)将只有一个 SQL Server 2008 FILESTREAM 文件系统筛选器驱动程序。

问题

  1. 很高兴知道 SQL Server 拥有一切美好且紧密联系的东西,但是这种共享实际上有什么作用呢?它是所谓的“文件系统过滤器驱动程序”吗?
  2. 看到任何经过身份验证的用户都可以访问“共享”,安全隐患是什么?
  3. 设备 RsFx0320 是 Windows Server 2012 中引入的弹性文件系统格式的前身吗?

如果您能回答我的问题,那么如果您能提供参考资料就好了。

Sea*_*ser 5

在 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
Run Code Online (Sandbox Code Playgroud)

2.既然任何经过身份验证的用户都可以访问“共享”,那么安全隐患是什么?

您可以更改权限并要求正确设置设置。安全隐患与任何其他文件共享相同。

3. 设备 RsFx0320 是 Windows Server 2012 中引入的弹性文件系统格式的前身吗?

不,这是过滤器驱动程序特定版本的名称。例如,这是一个加载了 2016 年的系统RsFx0410。ReFS 是一个文件系统,这是一个位于文件系统和微型端口驱动程序之间的过滤器驱动程序。实际上,令人不安的是,这是一个传统的过滤器驱动程序,如高度末尾的 .10 所示......嗯。您还会注意到它有一个相当低的高度,这是一般不用于第三方筛选器驱动程序可以接受的。

在此处输入图片说明

如果您能回答我的问题,那么如果您能提供参考资料就好了。

我没有这方面的来源,但通过屏幕截图和更改设置的配置选项备份了我的信息。通过查看产品本身并了解窗口部分的工作原理(例如:过滤器驱动程序),可以找到此答案中的所有内容。