Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dotyczy:SQL Server — tylko system Windows
FUNKCJA FILESTREAM umożliwia aplikacjom opartym na programie SQL Server przechowywanie danych bez struktury, takich jak dokumenty i obrazy, w systemie plików. Aplikacje mogą używać zaawansowanych interfejsów API przesyłania strumieniowego i wydajności systemu plików, a jednocześnie zachować spójność transakcyjną między danymi bez struktury i odpowiednimi danymi ustrukturyzowanymi.
FUNKCJA FILESTREAM integruje aparat bazy danych programu SQL Server z systemami plików NTFS lub ReFS, przechowując dane binarne o dużych obiektach binarnych (MAX) jako pliki w systemie plików. Transact-SQL instrukcje mogą wstawiać, aktualizować, wykonywać zapytania, przeszukiwać i tworzyć kopie zapasowe danych FILESTREAM. Interfejsy systemu plików Win32 zapewniają dostęp strumieniowy do danych.
FILESTREAM używa pamięci podręcznej systemu NT do buforowania danych plików. Buforowanie plików w pamięci podręcznej systemu pomaga zmniejszyć wpływ danych FILESTREAM na wydajność aparatu bazy danych. Pula programu SQL Server nie jest używana; dlatego ta pamięć jest dostępna do przetwarzania zapytań.
Funkcja FILESTREAM nie jest automatycznie włączona podczas instalowania ani uaktualniania programu SQL Server. Należy włączyć usługę FILESTREAM przy użyciu programu SQL Server Configuration Manager i programu SQL Server Management Studio. Aby użyć funkcji FILESTREAM, należy utworzyć lub zmodyfikować bazę danych, aby zawierała specjalny typ grupy plików. Następnie utwórz lub zmodyfikuj tabelę tak, aby zawierała kolumnę varbinary(max) z atrybutem FILESTREAM. Po wykonaniu tych zadań można zarządzać danymi FILESTREAM przy użyciu Transact-SQL i Win32.
Kiedy należy używać funkcji FILESTREAM
W programie SQL Server obiekty BLOB mogą być standardowymi danymi varbinary(max), które przechowują dane w tabelach, lub obiektami varbinary(max) FILESTREAM, które przechowują dane w systemie plików. Rozmiar i użycie danych określa, czy należy używać magazynu bazy danych, czy magazynu systemu plików. Jeśli spełnione są następujące warunki, należy rozważyć użycie funkcji FILESTREAM:
- Przechowywane obiekty są średnio większe niż 1 MB.
- Szybki dostęp do odczytu jest ważny.
- Tworzysz aplikacje korzystające z warstwy środkowej dla logiki aplikacji.
W przypadku mniejszych obiektów przechowywanie obiektów varbinary(max) w bazie danych często zapewnia lepszą wydajność przesyłania strumieniowego.
FILESTREAM Storage
Magazyn FILESTREAM jest implementowany jako kolumna varbinary(max), w której dane są przechowywane jako BLOB w systemie plików. Rozmiary obiektów BLOB są ograniczone tylko przez rozmiar woluminu systemu plików. Standardowe ograniczenie varbinary(max) rozmiarów plików 2 GB nie ma zastosowania do BLOB przechowywanych w systemie plików.
Aby określić, że kolumna powinna przechowywać dane w systemie plików, określ atrybut FILESTREAM w kolumnie varbinary(max). Ten atrybut powoduje, że aparat bazy danych przechowuje wszystkie dane dla tej kolumny w systemie plików, ale nie w pliku bazy danych.
Dane FILESTREAM muszą być przechowywane w grupach plików FILESTREAM. FileSTREAM filegroup to specjalna grupa plików zawierająca katalogi systemu plików zamiast samych plików. Te katalogi systemu plików są nazywane kontenerami danych. Kontenery danych to interfejs między magazynem aparatu bazy danych i magazynem systemu plików.
W przypadku korzystania z magazynu FILESTREAM należy wziąć pod uwagę następujące kwestie:
- Jeśli tabela zawiera kolumnę FILESTREAM, każdy wiersz musi mieć unikatowy identyfikator wiersza o wartości innej niż null.
- Do grupy plików FILESTREAM można dodać wiele kontenerów danych.
- Nie można zagnieżdżać kontenerów danych FILESTREAM.
- W przypadku korzystania z klastra trybu failover grupy plików FILESTREAM muszą znajdować się w zasobach dysku udostępnionego.
- Grupy plików FILESTREAM mogą znajdować się na skompresowanych woluminach.
Zintegrowane zarządzanie
Ponieważ funkcja FILESTREAM jest implementowana jako kolumna varbinary(max) i zintegrowana bezpośrednio z aparatem bazy danych, większość narzędzi i funkcji zarządzania programu SQL Server działa bez modyfikacji danych FILESTREAM. Można na przykład użyć wszystkich modeli tworzenia kopii zapasowych i odzyskiwania z danymi FILESTREAM, a kopia zapasowa danych FILESTREAM jest tworzona przy użyciu danych ustrukturyzowanych w bazie danych. Jeśli nie chcesz tworzyć kopii zapasowych danych FILESTREAM z danymi relacyjnymi, możesz użyć częściowej kopii zapasowej, aby wykluczyć grupy plików FILESTREAM.
Zabezpieczenia zintegrowane
W programie SQL Server dane FILESTREAM są zabezpieczone tak samo jak inne dane: udzielając uprawnień na poziomach tabeli lub kolumny. Jeśli użytkownik ma uprawnienia do kolumny FILESTREAM w tabeli, może otworzyć skojarzone pliki.
Uwaga / Notatka
Szyfrowanie nie jest obsługiwane w danych FILESTREAM.
Tylko konto, na którym działa konto usługi PROGRAMU SQL Server, ma przyznane uprawnienia do kontenera FILESTREAM. Zalecamy, aby żadne inne konto nie otrzymało uprawnień do kontenera danych.
Uwaga / Notatka
Identyfikatory logowania SQL nie będą działać z kontenerami FILESTREAM. Tylko uwierzytelnianie NTFS lub ReFS będzie działać z kontenerami FILESTREAM.
Uzyskiwanie dostępu do danych obiektów blOB za pomocą dostępu do przesyłania strumieniowego Transact-SQL i systemu plików
Po przechowywaniu danych w kolumnie FILESTREAM można uzyskać dostęp do plików przy użyciu Transact-SQL transakcji lub przy użyciu interfejsów API Win32.
Transact-SQL Access
Za pomocą języka Transact-SQL można wstawiać, aktualizować i usuwać dane FILESTREAM:
- Za pomocą operacji wstawiania można wstępnie wypełniać pole FILESTREAM z wartością null, pustą wartością lub stosunkowo krótkimi danymi wbudowanymi. Jednak duża ilość danych jest wydajniej przesyłana strumieniowo do pliku korzystającego z interfejsów Win32.
- Podczas aktualizowania pola FILESTREAM należy zmodyfikować bazowe dane obiektu BLOB w systemie plików. Gdy pole FILESTREAM jest ustawione na
NULLwartość , dane obiektu BLOB skojarzone z polem zostaną usunięte. Nie można użyć aktualizacji fragmentowanej Transact-SQL zaimplementowanej jakoUPDATE.**Write(), aby wykonać częściowe aktualizacje danych. - Usunięcie wiersza lub usunięcie lub obcięcie tabeli zawierającej dane FILESTREAM powoduje usunięcie podstawowych danych obiektu BLOB w systemie plików.
Dostęp do przesyłania strumieniowego systemu plików
Obsługa przesyłania strumieniowego Win32 działa w kontekście transakcji programu SQL Server. W ramach transakcji można użyć funkcji FILESTREAM, aby uzyskać logiczną ścieżkę systemu plików UNC pliku. Następnie użyjesz interfejsu API OpenSqlFilestream, aby uzyskać dojście do pliku. Ten uchwyt może być następnie używany przez interfejsy przesyłania strumieniowego plików Win32, takie jak ReadFile() i WriteFile(), aby uzyskać dostęp do pliku i zaktualizować go za pomocą systemu plików.
Ponieważ operacje na plikach są transakcyjne, nie można usunąć ani zmienić nazwy plików FILESTREAM za pośrednictwem systemu plików.
Ostrzeżenie
Kontener FILESTREAM jest folderem zarządzanym przez program SQL Server. Nie dodawaj ani nie usuwaj plików w folderze FILESTREAM ręcznie ani za pośrednictwem innych aplikacji. Jeśli to zrobisz, spowoduje to błędy tworzenia kopii zapasowej i niespójności. Aby uzyskać więcej informacji, zobacz MSSQLSERVER_3056, MSSQLSERVER_7908 i MSSQLSERVER_7906.
Model instrukcji
System plików FILESTREAM modeluje Transact-SQL instrukcji przy użyciu otwierania i zamykania pliku. Instrukcja rozpoczyna się po otwarciu dojścia do pliku i kończy się po zamknięciu dojścia. Na przykład po zamknięciu uchwytu zapisu każdy możliwy AFTER wyzwalacz zarejestrowany w tabeli jest uruchamiany tak, jakby UPDATE instrukcja została ukończona.
Przestrzeń nazw magazynu
W pliku FILESTREAM aparat bazy danych kontroluje przestrzeń nazw fizycznego systemu plików BLOB. Nowa funkcja wewnętrzna PathName udostępnia logiczną ścieżkę UNC obiektu BLOB odpowiadającej każdej komórce FILESTREAM w tabeli. Aplikacja używa tej ścieżki logicznej, aby uzyskać dojście Win32 i działać na danych obiektów blOB przy użyciu zwykłych interfejsów systemu plików Win32. Funkcja zwraca NULL wartość , jeśli wartość kolumny FILESTREAM to NULL.
Dostęp do transaktoryzowanego systemu plików
Nowa funkcja wewnętrzna, GET_FILESTREAM_TRANSACTION_CONTEXT, udostępnia token reprezentujący bieżącą transakcję, z którą jest skojarzona sesja. Transakcja musi zostać uruchomiona i nie została jeszcze przerwana lub zatwierdzona. Dzięki uzyskaniu tokenu aplikacja wiąże operacje przesyłania strumieniowego systemu plików FILESTREAM z uruchomioną transakcją. Funkcja zwraca NULL wartość w przypadku braku jawnie uruchomionej transakcji.
Wszystkie dojścia plików muszą zostać zamknięte przed zatwierdzeniem lub przerwania transakcji. Jeśli dojście pozostanie otwarte poza zakresem transakcji, dodatkowe operacje odczytu względem dojścia powodują awarię; dodatkowe zapisy względem dojścia kończą się powodzeniem, ale rzeczywiste dane nie są zapisywane na dysku. Podobnie, jeśli baza danych lub wystąpienie aparatu bazy danych zostanie zamknięta, wszystkie otwarte dojścia zostaną unieważnione.
Trwałość transakcyjna
Dzięki funkcji FILESTREAM po zatwierdzeniu transakcji aparat bazy danych zapewnia trwałość transakcji dla danych OBIEKTÓW BLOB FILESTREAM zmodyfikowanych z dostępu strumieniowego systemu plików.
Semantyka izolacji
Semantyka izolacji podlega poziomom izolacji aparatu bazy danych. Poziom izolacji zatwierdzonej do odczytu jest obsługiwany w przypadku dostępu Transact-SQL i systemu plików. Obsługiwane są powtarzalne operacje odczytu, serializacji i izolacji migawki. Brudny odczyt nie jest obsługiwany.
Operacje otwierania dostępu do systemu plików nie czekają na żadne blokady. Zamiast tego operacje otwierania kończą się niepowodzeniem natychmiast, jeśli nie będą mogły uzyskać dostępu do danych z powodu izolacji transakcji. Wywołania interfejsu API przesyłania strumieniowego kończą się niepowodzeniem z ERROR_SHARING_VIOLATION, jeśli operacja otwierania nie może kontynuować z powodu naruszenia izolacji.
Aby umożliwić wykonywanie częściowych aktualizacji, aplikacja może wydać kontrolkę fs urządzenia (FSCTL_SQL_FILESTREAM_FETCH_OLD_CONTENT), aby pobrać starą zawartość do pliku, do którego odwołuje się otwarta obsługa. Spowoduje to wyzwolenie starej kopii zawartości po stronie serwera. Aby uzyskać lepszą wydajność aplikacji i uniknąć potencjalnych limitów czasu podczas pracy z bardzo dużymi plikami, zalecamy użycie asynchronicznych operacji we/wy.
Jeśli fsCTL jest wystawiany po zapisaniu dojścia do, ostatnia operacja zapisu będzie trwała, a wcześniejsze zapisy, które zostały wykonane do uchwytu zostaną utracone.
Interfejsy API systemu plików i obsługiwane poziomy izolacji
Gdy interfejs API systemu plików nie może otworzyć pliku z powodu naruszenia izolacji, zwracany jest wyjątek ERROR_SHARING_VIOLATION. To naruszenie izolacji występuje, gdy dwie transakcje próbują uzyskać dostęp do tego samego pliku. Wynik operacji dostępu zależy od trybu, w którym został otwarty plik, a wersja programu SQL Server, na którym jest uruchomiona transakcja. W poniższej tabeli przedstawiono możliwe wyniki dla dwóch transakcji, które uzyskują dostęp do tego samego pliku.
| Transakcja 1 | Transakcja 2 | Wynik w programie SQL Server 2008 (10.0.x) | Wynik w programie SQL Server 2008 R2 (10.50.x) i nowszych wersjach |
|---|---|---|---|
| Otwórz plik do odczytu. | Otwórz plik do odczytu. | Oba te elementy kończą się powodzeniem. | Oba te elementy kończą się powodzeniem. |
| Otwórz plik do odczytu. | Otwórz plik do zapisu. | Oba te elementy kończą się powodzeniem. Operacje zapisu w ramach transakcji 2 nie wpływają na operacje odczytu wykonywane w transakcji 1. | Oba te elementy kończą się powodzeniem. Operacje zapisu w ramach transakcji 2 nie wpływają na operacje odczytu wykonywane w transakcji 1. |
| Otwórz plik do zapisu. | Otwórz plik do odczytu. | Otwarcie transakcji 2 kończy się niepowodzeniem z wyjątkiem ERROR_SHARING_VIOLATION. | Oba te elementy kończą się powodzeniem. |
| Otwórz plik do zapisu. | Otwórz plik do zapisu. | Otwarcie transakcji 2 kończy się niepowodzeniem z wyjątkiem ERROR_SHARING_VIOLATION. | Otwarcie transakcji 2 kończy się niepowodzeniem z wyjątkiem ERROR_SHARING_VIOLATION. |
| Otwórz plik do odczytu. | Otwórz plik dla SELECTelementu . |
Oba te elementy kończą się powodzeniem. | Oba te elementy kończą się powodzeniem. |
| Otwórz plik do odczytu. | Otwórz plik dla UPDATE lub DELETE. |
Oba te elementy kończą się powodzeniem. Operacje zapisu w ramach transakcji 2 nie wpływają na operacje odczytu wykonywane w transakcji 1. | Oba te elementy kończą się powodzeniem. Operacje zapisu w ramach transakcji 2 nie wpływają na operacje odczytu wykonywane w transakcji 1. |
| Otwórz plik do zapisu. | otwórz plik dla SELECT. |
Transakcja 2 blokuje się do momentu zatwierdzenia transakcji 1 lub zakończenia transakcji lub limitu czasu blokady transakcji. | Oba te elementy kończą się powodzeniem. |
| Otwórz plik do zapisu. | Otwórz plik dla UPDATE lub DELETE. |
Transakcja 2 blokuje się do momentu zatwierdzenia transakcji 1 lub zakończenia transakcji lub limitu czasu blokady transakcji. | Transakcja 2 blokuje się do momentu zatwierdzenia transakcji 1 lub zakończenia transakcji lub limitu czasu blokady transakcji. |
Otwórz plik dla SELECTelementu . |
Otwórz plik do odczytu. | Oba te elementy kończą się powodzeniem. | Oba te elementy kończą się powodzeniem. |
Otwórz plik dla SELECTelementu . |
Otwórz plik do zapisu. | Oba te elementy kończą się powodzeniem. Operacje zapisu w ramach transakcji 2 nie mają wpływu na transakcję 1. | Oba te elementy kończą się powodzeniem. Operacje zapisu w ramach transakcji 2 nie mają wpływu na transakcję 1. |
Otwórz plik dla UPDATE lub DELETE. |
Otwórz plik do odczytu. | Operacja otwierania transakcji 2 kończy się niepowodzeniem z wyjątkiem ERROR_SHARING_VIOLATION. | Oba te elementy kończą się powodzeniem. |
Otwórz plik dla UPDATE lub DELETE. |
Otwórz plik do zapisu. | Operacja otwierania transakcji 2 kończy się niepowodzeniem z wyjątkiem ERROR_SHARING_VIOLATION. | Operacja otwierania transakcji 2 kończy się niepowodzeniem z wyjątkiem ERROR_SHARING_VIOLATION. |
Otwórz element dla SELECT elementu z powtarzalnym odczytem. |
Otwórz plik do odczytu. | Oba te elementy kończą się powodzeniem. | Oba te elementy kończą się powodzeniem. |
Otwórz element dla SELECT elementu z powtarzalnym odczytem. |
Otwórz plik do zapisu. | Operacja otwierania transakcji 2 kończy się niepowodzeniem z wyjątkiem ERROR_SHARING_VIOLATION. | Operacja otwierania transakcji 2 kończy się niepowodzeniem z wyjątkiem ERROR_SHARING_VIOLATION. |
Zapis z klientów zdalnych
Zdalny dostęp systemu plików do danych FILESTREAM jest włączony za pośrednictwem protokołu bloku komunikatów serwera (SMB). Jeśli klient jest zdalny, żadne operacje zapisu nie są buforowane po stronie klienta. Operacje zapisu będą zawsze wysyłane na serwer. Dane można buforować po stronie serwera. Zalecamy, aby aplikacje działające na klientach zdalnych konsolidować małe operacje zapisu w większych operacjach. Celem jest wykonanie mniejszej liczby operacji zapisu.
Tworzenie zamapowanych widoków pamięci (zamapowanych we/wy pamięci) przy użyciu dojścia FILESTREAM nie jest obsługiwane. Jeśli mapowanie pamięci jest używane dla danych FILESTREAM, aparat bazy danych nie może zagwarantować spójności i trwałości danych ani integralności bazy danych.
Zalecenia i wytyczne dotyczące poprawy wydajności funkcji FILESTREAM
Funkcja SQL Server FILESTREAM umożliwia przechowywanie binarnych danych dużych obiektów varbinary(max) jako plików w systemie plików. Jeśli masz dużą liczbę wierszy w kontenerach FILESTREAM, które są podstawowym magazynem dla kolumn FILESTREAM i FileTables, można utworzyć wolumin systemu plików zawierający dużą liczbę plików. Aby osiągnąć najlepszą wydajność podczas przetwarzania zintegrowanych danych z bazy danych i systemu plików, należy upewnić się, że system plików jest dostrojony optymalnie. Poniżej przedstawiono niektóre opcje dostrajania dostępne z perspektywy systemu plików:
Sprawdzanie wysokości dla sterownika filtru FILESTREAM programu SQL Server (na przykład
rsfx0100.sys). Oceń wszystkie sterowniki filtrów załadowane dla stosu magazynu skojarzonego z woluminem, w którym funkcja FILESTREAM przechowuje pliki i upewnij się, że sterownik rsfx znajduje się w dolnej części stosu. Za pomocą programu sterowania FLTMC.EXE można wyliczyć sterowniki filtrów dla określonego woluminu. Oto przykładowe dane wyjściowe z narzędzia FLTMC:C:\Windows\System32>fltMC.exefiltryNazwa filtru Liczba wystąpień Wysokość Ramka Sftredir 1 406000 0 Filtr MpFilter 9 328000 0 luafv 1 135000 0 FileInfo 9 45000 0 RsFx0103 1 41001.03 0 Sprawdź, czy serwer ma właściwość "czas ostatniego dostępu" wyłączoną dla plików. Ten atrybut systemu plików jest utrzymywany w rejestrze: Nazwa klucza:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemNazwa: NtfsDisableLastAccessUpdate Typ: REG_DWORD Wartość: 1Sprawdź, czy serwer ma wyłączoną nazwę 8.3. Ten atrybut systemu plików jest utrzymywany w rejestrze: Nazwa klucza:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystemNtfsDisable8dot3NameUtwórz typ: REG_DWORD wartość: 1Sprawdź, czy kontenery katalogów FILESTREAM nie mają włączonego szyfrowania systemu plików ani kompresji systemu plików, ponieważ mogą one wprowadzać poziom obciążenia podczas uzyskiwania dostępu do tych plików.
W wierszu polecenia z podwyższonym poziomem uprawnień uruchom wystąpienia fltmc i upewnij się, że żadne sterowniki filtrów nie są dołączone do woluminu, w którym próbujesz przywrócić.
Sprawdź, czy kontenery katalogów FILESTREAM nie mają więcej niż 300 000 plików. Możesz użyć informacji z
sys.database_fileswidoku wykazu, aby dowiedzieć się, które katalogi w systemie plików przechowująFILESTREAM-relatedpliki. Może to być uniemożliwione przez posiadanie wielu kontenerów. (Zobacz następny element punktor, aby uzyskać więcej informacji).W przypadku tylko jednej grupy plików FILESTREAM wszystkie pliki danych są tworzone w tym samym folderze. Na tworzenie plików o bardzo dużej liczbie plików może mieć wpływ duże indeksy NTFS, co może również zostać rozdrobnione.
Posiadanie wielu grup plików zwykle powinno pomóc (aplikacja używa partycjonowania lub ma wiele tabel, z których każda przechodzi do własnej grupy plików).
W programie SQL Server 2012 (11.x) i nowszych wersjach można mieć wiele kontenerów lub plików w grupie plików FILESTREAM, a zostanie zastosowana schemat alokacji działania okrężnego. W związku z tym liczba plików NTFS na katalog jest mniejsza.
Tworzenie kopii zapasowych i przywracanie może stać się szybsze dzięki wielu kontenerom FILESTREAM, jeśli jest używanych wiele woluminów przechowujących kontenery.
Program SQL Server 2012 (11.x) obsługuje wiele kontenerów na grupę plików i może ułatwić wykonywanie tych czynności. Do zarządzania większą liczbą plików może być konieczne żadne skomplikowane schematy partycjonowania.
Jeśli w wystąpieniu SQL istnieje bardzo duża liczba kontenerów FILESTREAM, uruchomienie baz danych z wieloma kontenerami FILESTREAM może zająć dużo czasu, aby zarejestrować je w sterowniku filtru FILESTREAM. Rozłożenie ich w wielu różnych woluminach pomaga w poprawie czasu uruchamiania bazy danych.
System NTFS MFT może zostać pofragmentowany i może powodować problemy z wydajnością. Rozmiar zarezerwowany MFT zależy od rozmiaru woluminu, więc może wystąpić taka sytuacja.
Fragmentację MFT można sprawdzić za pomocą
defrag /A /V C:(zmień wartość C: na rzeczywistą nazwę woluminu).Więcej miejsca MFT można zarezerwować przy użyciu fsutil zachowanie zestawu mftzone 2.
Pliki danych FILESTREAM należy wykluczyć ze skanowania oprogramowania antywirusowego.
Uwaga / Notatka
System Windows Server 2016 automatycznie włącza usługę Windows Defender. Upewnij się, że usługa Windows Defender jest skonfigurowana do wykluczania plików strumienia plików. Wykonanie tej czynności może spowodować zmniejszenie wydajności operacji tworzenia kopii zapasowych i przywracania.
Aby uzyskać więcej informacji, zobacz Konfigurowanie i weryfikowanie wykluczeń na potrzeby skanowania programu antywirusowego Windows Defender.
Powiązane zadania
- Włączanie i konfigurowanie FILESTREAM
- Tworzenie bazy danych FILESTREAM-Enabled
- Tworzenie tabeli do przechowywania danych FILESTREAM
- Uzyskiwanie dostępu do danych FILESTREAM za pomocą języka Transact-SQL
- Tworzenie aplikacji klienckich dla danych FILESTREAM
- Uzyskiwanie dostępu do danych FILESTREAM za pomocą elementu OpenSqlFilestream
- Wprowadzanie częściowych aktualizacji danych FILESTREAM
- Unikanie konfliktów z operacjami bazy danych w aplikacjach FILESTREAM
- Przenoszenie bazy danych z obsługą funkcji FILESTREAM
- Konfigurowanie funkcji FILESTREAM w klastrze trybu failover
- Konfigurowanie zapory dla dostępu FILESTREAM