W poszukiwaniu informacji poufnych FILESTREAM

14

Gdy funkcja FILESTREAM zostanie aktywowana na Microsoft SQL Server 2012, wówczas SQL Server utworzy „ukryty” udział w systemie. Udział jest zdefiniowany w następujący sposób:

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

Nazwa to nazwa udziału udostępnianego podczas początkowej konfiguracji FILESTREAM w SQL Server Configuration Manager . Ale po co to jest?

Jak dotąd

Przeczytałem całą dostępną dokumentację FILESTREAM od:

... ale nie było wzmianki o udziale i co robi lub do czego służy. Podaj nazwę, a SQL Server utworzy udział pod maską.

Baza danych z obsługą FILESTREAM

Podczas tworzenia bazy danych obsługującej FILESTREAM baza danych odwołuje się do grupy plików, która odwołuje się do katalogu (zalecanego na osobnym dysku), który absolutnie nie ma nic wspólnego z udziałem, który został początkowo utworzony podczas konfiguracji FILESTREAM.

Zrzut ekranu Skrypt bazy danych obsługujący FILESTREAM

Skrypt do utworzenia bazy danych obsługującej FILESTREAM Tak, zdaję sobie sprawę, że wszystkie ścieżki są w C :; to tylko przykład

Biała księga Paula Randalla i in. wyjaśnia dalej, że ...

Dane FILESTREAM są przechowywane w systemie plików w zestawie katalogów NTFS zwanych kontenerami danych, które odpowiadają specjalnym aplikacjom w bazie danych. Transakcyjny dostęp do danych FILESTREAM jest kontrolowany przez SQL Server i sterownik filtru systemu plików, który jest instalowany w ramach włączania FILESTREAM na poziomie Windows. Zastosowanie sterownika filtra systemu plików umożliwia również zdalny dostęp do danych FILESTREAM przez ścieżkę UNC. SQL Server utrzymuje link z wierszy tabeli do powiązanych z nimi plików FILESTREAM. Oznacza to, że usunięcie lub zmiana nazw plików FILESTREAM bezpośrednio przez system plików spowoduje uszkodzenie bazy danych.

... w dalszej części dokumentu (strona 14), którą kontynuują ...

Istnieje jeden sterownik filtru systemu plików FILESTREAM dla każdego woluminu NTFS, który ma kontener danych FILESTREAM, a także jeden dla każdej wersji SQL Server, która ma kontener danych FILESTREAM na woluminie. Każdy sterownik filtra jest odpowiedzialny za zarządzanie wszystkimi kontenerami danych FILESTREAM dla tego woluminu, dla wszystkich instancji korzystających z określonej wersji programu SQL Server.

Na przykład wolumin NTFS, który obsługuje trzy kontenery danych FILESTREAM, po jednym dla każdej z trzech instancji programu SQL Server 2008, będzie miał tylko jeden sterownik filtru systemu plików FILESTREAM programu SQL Server 2008.

pytania

  1. Miło jest wiedzieć, że SQL Server ma wszystko fajnie i powiązane, ale co tak naprawdę robi ten udział? Czy jest to tak zwany „sterownik filtra systemu plików”?
  2. Widząc, że każdy uwierzytelniony użytkownik może uzyskać dostęp do „udziału”, jakie są konsekwencje dla bezpieczeństwa?
  3. Czy urządzenie RsFx0320 jest poprzednikiem odpornego formatu systemu plików, który został wprowadzony w systemie Windows Server 2012?

Jeśli możesz podać odpowiedzi na moje pytania, byłoby miło, gdybyś mógł podać źródło.

John aka hot2use
źródło

Odpowiedzi:

5

Gdy funkcja FILESTREAM zostanie aktywowana na Microsoft SQL Server 2012, wówczas SQL Server utworzy „ukryty” udział w systemie.

Nie robi tego domyślnie, musisz WYBRAĆ, aby włączyć udział. Odbywa się to za pomocą programu SQL Server Configuration Manager. Jeśli usuniesz zaznaczenie, Enable FILESTREAM for file I/O accessudział zostanie usunięty.

wprowadź opis zdjęcia tutaj

  1. Miło jest wiedzieć, że SQL Server ma wszystko fajnie i powiązane, ale co tak naprawdę robi ten udział?

Udostępnianie pozwala klientom (lokalnym i zdalnym) na wspólną lokalizację umożliwiającą korzystanie z interfejsu Windows API do przesyłania strumieniowego danych. Działa to w połączeniu z ustawieniami poziomu wystąpienia SQL Server dla dostępu do strumienia plików Full Access Enabled, żadne inne ustawienie dostępu nie powinno działać z interfejsem API przesyłania strumieniowego.

wprowadź opis zdjęcia tutaj

  1. ... Czy jest to tak zwany „sterownik filtra systemu plików”?

Nie, nie jest. To tylko udział plików.

Starałem się nie brudzić wód, ale poprosiłeś o jak najwięcej informacji. W powyższym przekreślonym tekście powiedziałem w rzeczywistości, że nie był to sterownik filtra. Jednak technicznie jest to połowa prawdy. Tak, jest to folder współdzielony, ale w rzeczywistości jest udostępniany przez sterownik filtra. Naprawdę debatowałem na ten temat, ponieważ zaczyna się to królicza nora, której tak naprawdę nie można zejść bez kodu źródłowego (i szczerze mówiąc, moim zdaniem nie ma ona większej wartości niż akademicka).

Głównym celem sterownika filtru jest zrobienie kilku rzeczy, ale jedną z nich jest zapewnienie transakcyjnego dostępu do danych przechowywanych w celu strumienia danych za pośrednictwem różnych interfejsów; SQL Server, Transact SQL, Windows API. Robi też garść innych elementów - jednak dostęp przyznany przez udział odbywa się za pośrednictwem sterownika filtra. W rzeczywistości, jeśli próbujesz uzyskać dostęp do plików w strumieniu plików i nie jesteś administratorem ani programem SQL Server, nie powinieneś mieć do nich dostępu.

Tak, tak, to jest i nie jest sterownik filtra. Jest to połowa udostępniania plików w systemie Windows, która jest udostępniana przez sterownik filtra. Możesz zobaczyć, czy przeglądasz właściwość ścieżki udziału.

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

2. Widząc, że każdy uwierzytelniony użytkownik może uzyskać dostęp do „udziału”, jakie są konsekwencje dla bezpieczeństwa?

Możesz zmienić uprawnienia i wymaga poprawnego ustawienia. Implikacje bezpieczeństwa dotyczą każdego innego udziału plików.

3.Czy urządzenie RsFx0320 jest poprzednikiem odpornego formatu systemu plików, który został wprowadzony w systemie Windows Server 2012?

Nie, to nazwa konkretnej wersji sterownika filtra. Na przykład tutaj jest system z załadowanym systemem z 2016 roku RsFx0410. ReFS to system plików, jest to sterownik filtra, który znajduje się między systemem plików a sterownikiem miniportu. W rzeczywistości dość niepokojące jest to, że jest to starszy sterownik filtra, jak oznaczono przez .10 na końcu wysokości ... hmm. Zauważysz również, że ma dość niską wysokość , co jest ogólnie nie do przyjęcia dla sterowników filtrów innych firm.

wprowadź opis zdjęcia tutaj

Jeśli możesz podać odpowiedzi na moje pytania, byłoby miło, gdybyś mógł podać źródło.

Nie mam na to źródeł, ale utworzyłem kopię zapasową moich informacji za pomocą zrzutów ekranu i opcji konfiguracji, które zmieniają ustawienia. Wszystko w tej odpowiedzi można znaleźć, przeglądając sam produkt i wiedząc, jak działają fragmenty systemu Windows (np. Sterowniki filtrów).

Sean Gallardy
źródło
Dzięki za odpowiedzi na 1, 2 i 3. Szczególnie doceniam twoje wyjaśnienie sterownika filtra. Twoja uwaga na początku jest należycie odnotowana, ale zdaję sobie sprawę, że udział zostanie utworzony tylko wtedy, gdy aktywuję opcję w opcjach FILESTREAM. Przeczytałem dużą ilość dokumentacji dotyczącej konfiguracji / ustawień FILESTREAM i wewnętrznych elementów.
John aka hot2use
2

Oto moje zdanie na twoje pytania:

1. Miło wiedzieć, że SQL Server ma wszystko fajnie i powiązane, ale co tak naprawdę robi ten udział? Czy jest to tak zwany „sterownik filtra systemu plików”?

Dostęp do strumienia plików programu SQL Server dotyczy dostępu do plików. Udział udostępnia tę lokalizację za pośrednictwem udziału plików.

Możesz to łatwo zobaczyć za pomocą kodu C #, używając OpenSqlFilestream

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

Jak widać, nie ma FILE_SHARE_READ dla CreateFile i nie ma magii plików, nie ma strumienia plików:

try
    {
        if ( (srcHandle = CreateFile(
            srcFilePath,
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_FLAG_SEQUENTIAL_SCAN,
            NULL)) == INVALID_HANDLE_VALUE )
            throw szErrMsgSrc;

Uwaga: dlaczego nie ma opcji lokalnego serwera / opcji udostępniania FILESTREAM - nie mam pojęcia. Wygląda na to, że niektórzy ludzie mogą polubić ten dodatkowy poziom bezpieczeństwa.

2. Widząc, że każdy uwierzytelniony użytkownik może uzyskać dostęp do „udziału”, jakie są konsekwencje dla bezpieczeństwa?

Wow, świetne pytanie. Wygląda na to, że uprawnienia do udziału są dostępne dla każdego uwierzytelnionego użytkownika, ale podstawowe uprawnienia NTFS powinny dostosować zabezpieczenia. Ale wydaje mi się to luką bezpieczeństwa. Muszę dokładniej zbadać, jak dobrze dostrojone są uprawnienia NTFS, ale zdecydowanie nie podoba mi się uogólnione uprawnienia do udostępniania plików. Przyjdź na Microsoft, WSZYSCY „uwierzytelnieni użytkownicy”? Dobrze czy źle, myślę, że Microsoft zwykle ignoruje udział / koncentrację na uprawnieniach NTFS.

Dostarczanie „uwierzytelnionych użytkowników” było przedmiotem dyskusji od lat. Oto jeden z najlepszych blogów, które czytałem na stronach „uwierzytelnionych użytkowników”. Jest tak mocno zakorzeniony w systemie Windows, że nie sądzę, by kiedykolwiek powiedzieli, że to uzasadnione ryzyko - dopóki nie pojawi się ich nowy produkt, który się go pozbędzie.

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

3.Czy urządzenie RsFx0320 jest poprzednikiem odpornego formatu systemu plików, który został wprowadzony w systemie Windows Server 2012?

Wygląda na oparty na SQL, a nie O / S. RsFx0320.sys to SQL 2008. Jak widać poniżej SQL 2012 to RsFx0201.sys, a SQL 2014 to RsFx0300.sys:

https://support.microsoft.com/en-us/help/2961258/fix-cannot-access-the-data-in-filetable-after-you-upgrade-from-sql-ser

Microsoft pokazuje, co może się stać po uaktualnieniu z 2012 do 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}'
Żądło
źródło
Dzięki za odpowiedzi na moje pytania 2 i 3. Zdaję sobie sprawę z twojej odpowiedzi 1, że mogę uzyskać dostęp do danych za pośrednictwem tego udziału, ale zastanawiałem się, w jaki sposób, stąd tytuł „W poszukiwaniu informacji poufnych FILESTREAM ”.
John aka hot2use