В поисках инсайдерской информации FILESTREAM


14

Когда функция 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

Имя - это имя общего ресурса, который вы предоставляете при первоначальной настройке FILESTREAM в диспетчере конфигурации SQL Server . Но для чего это нужно?

Слишком далеко

Я прочитал всю доступную документацию FILESTREAM, начиная с:

... но не было упоминания о доле и о том, что она делает или для чего она нужна. Вы вводите имя, и SQL Server создаст общий ресурс.

База данных с поддержкой FILESTREAM

Когда вы создаете базу данных с поддержкой FILESTREAM, база данных ссылается на файловую группу, которая ссылается на каталог (рекомендуется на отдельном диске), который не имеет абсолютно никакого отношения к общему ресурсу, который был изначально создан во время настройки FILESTREAM.

Скриншот сценария базы данных с поддержкой FILESTREAM

Скрипт для создания базы данных с поддержкой FILESTREAM Да, я понимаю, что все пути находятся на C :; это всего лишь пример

Белая книга Пола Рэндалла и соавторов. продолжает объяснять, что ...

Данные FILESTREAM хранятся в файловой системе в наборе каталогов NTFS, называемых контейнерами данных, которые соответствуют специальным группам файлов в базе данных. Транзакционный доступ к данным FILESTREAM контролируется SQL Server и драйвером фильтра файловой системы, который устанавливается как часть включения FILESTREAM на уровне Windows. Использование драйвера фильтра файловой системы также обеспечивает удаленный доступ к данным FILESTREAM по пути UNC. SQL Server поддерживает сортировку ссылок из строк таблицы на связанные с ними файлы FILESTREAM. Это означает, что удаление или переименование любых файлов FILESTREAM непосредственно через файловую систему приведет к повреждению базы данных.

... далее по документу (стр. 14) они продолжают ...

Существует один драйвер фильтра файловой системы FILESTREAM для каждого тома NTFS, в котором имеется контейнер данных FILESTREAM, а также один для каждой версии SQL Server, в которой имеется контейнер данных FILESTREAM в томе. Каждый драйвер фильтра отвечает за управление всеми контейнерами данных FILESTREAM для этого тома для всех экземпляров, которые используют конкретную версию SQL Server.

Например, том NTFS, на котором размещены три контейнера данных FILESTREAM, по одному для каждого из трех экземпляров SQL Server 2008, будет иметь только один драйвер фильтра файловой системы FILESTREAM для SQL Server 2008.

Вопросов

  1. Приятно знать, что в SQL Server все хорошо и тесно связано, но что делает этот общий ресурс на самом деле? Это так называемый «драйвер фильтра файловой системы»?
  2. Видя, как любой аутентифицированный пользователь может получить доступ к «общему ресурсу», каковы последствия для безопасности?
  3. Является ли устройство RsFx0320 предшественником формата отказоустойчивой файловой системы, который был представлен в Windows Server 2012?

Если вы можете дать ответы на мои вопросы, было бы хорошо, если бы вы могли предоставить ссылку на источник.

Ответы:


5

Когда функция FILESTREAM активирована в Microsoft SQL Server 2012, SQL Server создаст «скрытый» общий ресурс в системе.

Это не делает это по умолчанию, вы должны выбрать, чтобы включить общий ресурс. Это делается с помощью диспетчера конфигурации SQL Server. Если вы отмените выбор, Enable FILESTREAM for file I/O accessдоля будет удалена.

введите описание изображения здесь

  1. Приятно знать, что в SQL Server все хорошо и тесно связано, но что делает этот общий ресурс на самом деле?

Общий ресурс позволяет клиентам (локальным и удаленным) иметь единый общий ресурс для использования потоковых окон api для доступа к данным файлового потока. Это работает в сочетании с настройками уровня SQL Server Instance для FileStream доступа 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.После того, как любой прошедший проверку пользователь может получить доступ к «общему ресурсу», каковы последствия для безопасности?

Вы можете изменить разрешения и требует, чтобы настройки были установлены правильно. Последствия для безопасности связаны с любым другим общим файлом.

3. Является ли устройство RsFx0320 предшественником формата отказоустойчивой файловой системы, который был представлен в Windows Server 2012?

Нет, это имя конкретной версии драйвера фильтра. Например, вот система с загруженной системой 2016 года RsFx0410. ReFS - это файловая система, это драйвер фильтра, который находится между файловой системой и драйвером минипорта. Это на самом деле весьма смущает, что это устаревший драйвер фильтра, обозначенный как .10 в конце высоты ... хмм. Вы также заметите, что он имеет довольно низкую высоту , что, как правило, неприемлемо для драйверов фильтров сторонних производителей.

введите описание изображения здесь

Если вы можете дать ответы на мои вопросы, было бы хорошо, если бы вы могли предоставить ссылку на источник.

У меня нет источников для этого, но я сделал резервную копию моей информации с помощью снимков экрана и параметров конфигурации, которые меняют настройки. Все в этом ответе можно найти, просмотрев сам продукт и зная, как работают части окон (например, драйверы фильтров).


Спасибо за ответы на 1, 2 и 3. Я особенно ценю ваше объяснение драйвера фильтра. Ваше замечание в начале должным образом отмечено, но я понимаю, что общий ресурс будет создан, только если я активирую опцию в опциях FILESTREAM. Я прочитал большое количество документации, касающейся конфигурации / настроек FILESTREAM и внутренних компонентов.
Джон aka hot2use

2

Вот мой взгляд на ваши вопросы:

1. Приятно осознавать, что в SQL Server все хорошо и тесно связано, но что на самом деле делает этот ресурс? Это так называемый «драйвер фильтра файловой системы»?

SQL Server Доступ к потоку файлов - это, в общем, доступ к файлам. Общий ресурс предоставляет это местоположение через общий файловый ресурс.

Вы можете легко увидеть это с помощью некоторого кода на C #, используя OpenSqlFilestream на

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

Как вы можете видеть, нет FILE_SHARE_READ для CreateFile и нет волшебства файла, нет файлового потока:

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/en-US/bb74fa7c-89bd-476d-88bf-e88cd66618e6/why-is-authenticated-users-in-the-local-users-group-by- по умолчанию? форум = winserversecurity

3. Является ли устройство RsFx0320 предшественником формата отказоустойчивой файловой системы, который был представлен в Windows Server 2012?

Похоже, что на основе SQL, а не O / S. 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 и 3. Для вашего ответа 1 я понимаю, что могу получить доступ к данным через этот общий ресурс, но мне было интересно, как, отсюда и название «В поисках инсайдерской информации FILESTREAM ».
Джон aka hot2use
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.