搜索FILESTREAM内部信息


14

在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文件系统筛选器驱动程序,而对于在该卷上具有FILESTREAM数据容器的每个SQL Server版本,也都有一个驱动程序。对于使用特定版本的SQL Server的所有实例,每个筛选器驱动程序负责管理该卷的所有FILESTREAM数据容器。

例如,一个托管三个FILESTREAM数据容器(每个三个SQL Server 2008实例一个)的NTFS卷将只有一个SQL Server 2008 FILESTREAM文件系统筛选器驱动程序。

问题

  1. 很高兴知道SQL Server的所有功能都很好并且捆绑在一起,但是该共享实际上有什么作用?是所谓的“文件系统过滤器驱动程序”吗?
  2. 既然任何经过身份验证的用户都可以访问“共享”,那么对安全性有何影响?
  3. 设备RsFx0320是Windows Server 2012引入的弹性文件系统格式的前身吗?

如果您可以提供我的问题的答案,那么如果您可以提供参考源就很好。

Answers:


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文件共享的一半。您可以看到这是您查看共享的path属性。

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

2.看到任何经过身份验证的用户都可以访问“共享”,那么对安全性有何影响?

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

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

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

在此处输入图片说明

如果您可以提供我的问题的答案,那么如果您可以提供参考源就很好。

我没有相关资料,但已通过屏幕快照和更改设置的配置选项备份了我的信息。通过查看产品本身并了解窗口的工作原理(例如:过滤器驱动程序),可以找到此答案中的所有内容。


感谢您对1、2和3的回答。我特别感谢您对过滤器驱动程序的解释。您在开始时的发言已被适当注明,但我确实意识到,只有在激活FILESTREAM选项中的选项后,才会创建共享。我已经阅读了大量有关FILESTREAM配置/设置和内部内容的文档。
约翰又名hot2use '17

2

这是我对您的问题的看法:

1,很高兴知道SQL Server的所有功能都很好并且捆绑在一起,但是该共享实际上有什么作用?是所谓的“文件系统过滤器驱动程序”吗?

SQL Server文件流访问完全是关于文件的访问。共享通过文件共享提供该位置。

您可以使用OpenSqlFilestream在C#代码中轻松看到这一点

https://docs.microsoft.com/zh-cn/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权限的调整情况,但是我绝对不喜欢通用文件共享权限。来吧Microsoft,所有“经过身份验证的用户”?对与错,我认为Microsoft倾向于忽略对NTFS权限的共享/关注。

多年来,提供​​“经过身份验证的用户”一直是争论不休的话题。这是我在“经过身份验证的用户”中来回阅读的最好的博客之一。它在Windows中根深蒂固,我认为他们从来没有说过这是正当的风险-直到他们的新产品问世为止。

https://social.technet.microsoft.com/Forums/windowsserver/zh-CN/bb74fa7c-89bd-476d-88bf-e88cd66618e6/why-is-authenticated-users-in-the-local-users-group-by-默认值?forum = winserversecurity

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

看起来是基于SQL的,而不是基于O / S的。RsFx0320.sys是SQL2008。如下所示,SQL 2012是RsFx0201.sys,SQL 2014是RsFx0300.sys:

https://support.microsoft.com/zh-CN/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和3的回答。我确实对您的回答1表示,我可以通过该共享访问数据,但是我想知道如何使用,因此标题为“搜索FILESTREAM 内部信息 ”。
约翰又名hot2use
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.