Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

FILESTREAM a uprawnienia NTFS

Termin Definicja
FILESTREAM a uprawnienia NTFS

FILESTREAM a uprawnienia NTFS opisuje interakcję między zabezpieczeniami bazy danych a uprawnieniami systemu plików Windows.

Rozdzielenie uprawnień SQL Server i systemu plików

FILESTREAM w SQL Server łączy dwa różne modele zabezpieczeń. Uprawnienia SQL Server określają, kto może połączyć się z bazą danych, odczytać tabelę, wykonać zapytanie oraz zmienić wiersz zawierający kolumnę typu varbinary(max) z atrybutem FILESTREAM. Uprawnienia NTFS dotyczą natomiast plików znajdujących się w kontenerze FILESTREAM na woluminie sformatowanym w systemie plików NTFS. Kontener jest zarządzanym obszarem danych, a jego zawartość nie powinna być traktowana jak zwykły katalog przeznaczony do ręcznego przeglądania.

Użytkownik, który ma uprawnienie SELECT do tabeli, nie otrzymuje automatycznie prawa do otwierania plików w kontenerze przez Eksplorator Windows. Z kolei samo nadanie uprawnień NTFS do katalogu nie daje poprawnego dostępu do rekordów FILESTREAM ani nie zastępuje autoryzacji SQL Server. Kontrola dostępu musi więc uwzględniać zarówno tożsamość użytkownika w SQL Server, jak i sposób, w jaki aplikacja uzyskuje dostęp do danych binarnych.

Kontener FILESTREAM i rola usługi SQL Server

Kontener FILESTREAM wskazuje miejsce przechowywania danych binarnych zarządzanych przez konkretną bazę danych. SQL Server zapisuje w nim obiekty powiązane z wierszami tabel, utrzymuje ich relację z metadanymi oraz zapewnia spójność między tabelą a plikami. Nazwy i struktura wewnętrzna kontenera są elementem implementacji silnika, dlatego ręczne kopiowanie, przenoszenie, zmiana nazw lub kasowanie plików może doprowadzić do niespójności albo utraty możliwości odczytu danych.

Podczas konfiguracji FILESTREAM SQL Server tworzy lub wykorzystuje określony obszar danych i nadaje wymagane prawa kontu usługi instancji. Zakres tych praw zależy od modelu uruchomienia usługi, między innymi od tego, czy SQL Server działa pod kontem domenowym, kontem wirtualnym czy innym kontem usługi. Zmiana konta usługi bez odpowiedniego przygotowania uprawnień może spowodować błędy dostępu do kontenera, problemy z uruchomieniem bazy albo nieudane operacje odczytu i zapisu. Uprawnień do kontenera nie należy naprawiać przez udostępnianie go wszystkim użytkownikom systemu.

Transakcyjny dostęp przez OpenSqlFilestream

Typowy dostęp do wartości FILESTREAM z poziomu aplikacji może odbywać się przez zwykłe zapytanie T-SQL albo przez mechanizm strumieniowy OpenSqlFilestream. W drugim przypadku aplikacja najpierw pobiera z SQL Server logiczną ścieżkę do danych oraz kontekst transakcji, a następnie otwiera uchwyt do strumienia. Operacja wymaga odpowiedniej transakcji i użycia uwierzytelniania Windows; nie jest to zwykłe otwarcie fizycznego pliku na podstawie ścieżki znalezionej na dysku.

Przy otwieraniu strumienia SQL Server weryfikuje kontekst dostępu, transakcję oraz uprawnienia użytkownika wynikające z operacji na tabeli. Jeżeli użytkownik nie może odczytać danego wiersza w SQL Server, prawidłowo skonstruowana ścieżka FILESTREAM nie powinna służyć do obejścia tej kontroli. Błąd może pojawić się także wtedy, gdy aplikacja działa pod innym kontem Windows niż zakładano, używa nieważnego tokenu transakcji albo próbuje korzystać z dostępu strumieniowego poza wymaganym cyklem transakcji.

Diagnostyka błędów uprawnień FILESTREAM

Analizę problemu należy rozpocząć od ustalenia, którego rodzaju dostępu brakuje. Jeżeli nie działa zapytanie T-SQL, trzeba sprawdzić logowanie do instancji, użytkownika bazy danych, role oraz uprawnienia do tabeli i kolumny. Jeżeli zapytanie działa, lecz OpenSqlFilestream zwraca błąd, należy prześledzić tożsamość procesu aplikacji, sposób przekazania kontekstu transakcji, ustawienia FILESTREAM instancji oraz dostęp do udziału FILESTREAM. Nie należy zaczynać od przypadkowego nadawania szerokich praw NTFS.

W praktyce warto także sprawdzić, czy baza jest online, czy kolumna ma właściwy typ i atrybut FILESTREAM, czy tabela zawiera wymagany identyfikator ROWGUIDCOL, a aplikacja korzysta z transakcji obejmującej odczyt lub zapis. Przy zapisie znaczenie ma również poprawne użycie metod dostępu do strumienia oraz zakończenie transakcji. Ręczne zmiany w katalogu kontenera, kopiowanie plików poza SQL Server i nadawanie użytkownikom bezpośredniego dostępu do jego podkatalogów nie są właściwą metodą usuwania błędów uprawnień. Diagnostyka powinna zachować rozdział między konfiguracją silnika, autoryzacją SQL Server, tożsamością Windows i kontrolą NTFS.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę