Активация FILESTREAM происходит в двух точках:
Для того, чтобы FILESTREAM заработал необходимо произвести действия в обоих точках. Такая защита сделана специально, чтобы не позволить Windows или SQL Server администратору выполнить действия по включению FILESTREAM без взаимного согласования.
В SQL Server Configuration Manager в свойствах SQL Server выберите закладку FILESTREAM.
Выберите "Enable FILESTREAM for Transact-SQL access".
Если вы не хотите иметь доступ к данным FILESTREAM из локальной Windows системы (специального Win32 API), то на этом можно действия прекратить и перейти к настройке в SSMS, если же вы хотите получать доступ к этим данным используя Windows API, то вам необходимо продолжить настройки.
Выберите "Enable FILESTREAM for file I/O streaming access."
Введите имя общей папки в поле "Windows Share Name" box. Через эту папку будут перенаправляться запросы к файлам FILESTREAM. Об этом мы поговорим далее.
Если вы хотите разрешить доступ к этим файлам не только с локального сервера, но и с удаленных клиентских компьютеров, то выберите пунк "Allow remote clients to have streaming access to FILESTREAM data."
Примечание:Если это кластер выполните эти действия на всех узлах кластера. Имя, введенное в "Windows Share Name", должно быть одинаково на всех узлах кластера. В данном случае я использовал имя SQL2014_FileStream
Для включения FILESTREAM и разрешения доступа к нему через Transact-SQL - выполните EXEC sp_configure 'filestream_access_level', 1; RECONFIGURE
Для включения FILESTREAM и разрешения доступа к нему через Transact-SQL и Win32 - выполните - EXEC sp_configure 'filestream_access_level', 2; RECONFIGURE
Выполним команду EXEC sp_configure 'filestream_access_level', 2; RECONFIGURE в SSMS и посмотрим, что произошло в ОС. Для этого из командной строки ОС выполним команду FLTMC.EXE.
Для отключения FILESTREAM выполните - EXEC sp_configure 'filestream_access_level', 0; RECONFIGURE
Как видим в Windows появился новый фильтр с именем RsFx0300. Этот фильтр монтируется в Windows на "высоте" 4100х и перехватывает обращения клиентов Win32 API к файлам FILESTREAM (как это происходит будет показано далее). Это фильтр представляет собой мини-фильтр драйвер (minifilter driver). Обратите также внимание, что он устанавливается сразу же после Wof-драйвера представляющего собой "Windows Overlay File System Filter Driver".
Информация для установки этого минидрайвера взята из файла "C:\Program Files\Microsoft SQL Server\120\Shared\RsFxInstall\RsFx0300.inf", установка файла произведена в ""C:\WINDOWS\system32\Drivers\RsFx0300.sys", а информация об установке драйвера находится HKLM\System\CurrentControlSet\Services\RsFx0300.
Выполните "NET SHARE" в командной строке Windows, и вы должны увидеть
Share name Resource Remark
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
SQL2014_FileStream \\?\GLOBALROOT\Device\RsFx0300\\SQL2014_FileStream SQL Server FILESTREAM share
Имя SQL2014_FileStream это имя общего ресурса, которое вы ввели в "Windows Share Name"
Попробуйте подсоединиться \\localhost\SQL2014_FileStream у вас это должно получиться, но папка должна быть пуста. Она всегда пуста поскольку это виртуальная точка соединения для Win32 API клиентов (C#, VB)
Общее имя "\localhost\SQL2014_FileStream" регистрируется в HKLM\System\CurrentControlSet\Services\LanManServer\Shares
Как было описано выше RsFx0300 это имя фильтра (драйвера), который монтируется в стек Windows и будет перехватывать обращения клиентов работающих через Win32 API и обращающихся к файлам по имени полученном функцией .PathName(...).
Как видно из описания настроек и конфигурации, несмотря на то, что создается общая папка, разработчики не предполагали общего доступа к файлам FILESTREAM через оболочку Windows как к стандартным файлам. Если вам нужна такая возможность вы должны вместо FILESTREAM использовать файловые таблицы (File Table).
Мы произвели все подготовительные мероприятия для развертывания системы FILESTREAM.
Дальнейшее рассмотрение этой темы мы продолжим в наших следующих статьях.
Александр Каленик, Senior Premier Field Engineer (PFE), MSFT (Russia)
3 авг. 2017 г.