Alla ricerca di informazioni privilegiate FILESTREAM


14

Quando la funzionalità FILESTREAM è attivata su Microsoft SQL Server 2012, SQL Server creerà una condivisione "nascosta" sul sistema. La condivisione è definita come segue:

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

Il nome è il nome della condivisione fornita durante la configurazione iniziale di FILESTREAM in Gestione configurazione SQL Server . Ma a cosa serve?

Finora

Ho letto tutta la documentazione FILESTREAM disponibile a partire da:

... ma non si faceva menzione della condivisione e di ciò che fa oa cosa serve. Immettere il nome e SQL Server creerà la condivisione sottotitoli.

Database abilitato a FILESTREAM

Quando si crea un database abilitato per FILESTREAM, il database fa riferimento a un filegroup che fa riferimento a una directory (consigliata su un'unità separata) che non ha assolutamente nulla a che fare con la condivisione, inizialmente creata durante la configurazione di FILESTREAM.

Screenshot Script di database abilitato a FILESTREAM

Script per creare un database abilitato a FILESTREAM Sì, mi rendo conto che tutti i percorsi sono su C :; è solo un esempio

Il libro bianco di Paul Randall et al. continua spiegando che ...

I dati FILESTREAM sono archiviati nel file system in un set di directory NTFS chiamate contenitori di dati, che corrispondono a filegroup speciali nel database. L'accesso transazionale ai dati FILESTREAM è controllato da SQL Server e da un driver di filtro del file system installato come parte dell'abilitazione di FILESTREAM a livello di Windows. L'uso di un driver di filtro del file system consente anche l'accesso remoto ai dati FILESTREAM attraverso un percorso UNC. SQL Server mantiene un collegamento di sorta dalle righe della tabella ai file FILESTREAM ad essi associati. Ciò significa che l'eliminazione o la ridenominazione di qualsiasi file FILESTREAM direttamente attraverso il file system comporterà il danneggiamento del database.

... più in basso nel documento (pagina 14) che continuano con ...

Esiste un singolo driver di filtro del file system FILESTREAM per ogni volume NTFS che ha un contenitore di dati FILESTREAM e ce n'è uno per ogni versione di SQL Server che ha un contenitore di dati FILESTREAM sul volume. Ogni driver di filtro è responsabile della gestione di tutti i contenitori di dati FILESTREAM per quel volume, per tutte le istanze che utilizzano una particolare versione di SQL Server.

Ad esempio, un volume NTFS che ospita tre contenitori di dati FILESTREAM, uno per ciascuna delle tre istanze di SQL Server 2008, avrà un solo driver di filtro del file system FILESTREAM di SQL Server 2008.

Domande

  1. È bello sapere che SQL Server ha tutto ciò che è bello e collegato, ma cosa fa effettivamente quella condivisione? È il cosiddetto "driver del filtro del file system"?
  2. Visto che qualsiasi utente autenticato può accedere alla "condivisione", quali sono le implicazioni per la sicurezza?
  3. Device RsFx0320 è un predecessore del formato di file system resiliente introdotto con Windows Server 2012?

Se riesci a fornire risposte alle mie domande, sarebbe bello poter fornire un riferimento alla fonte.

Risposte:


5

Quando la funzionalità FILESTREAM è attivata su Microsoft SQL Server 2012, SQL Server creerà una condivisione "nascosta" sul sistema.

Non lo fa per impostazione predefinita, è necessario SCEGLI per abilitare la condivisione. Questo viene fatto tramite Gestione configurazione SQL Server. Se si deseleziona, la Enable FILESTREAM for file I/O accesscondivisione verrà rimossa.

inserisci qui la descrizione dell'immagine

  1. È bello sapere che SQL Server ha tutto ciò che è bello e collegato, ma cosa fa effettivamente quella condivisione?

La condivisione consente ai client (locali e remoti) di disporre di un'unica posizione condivisa per utilizzare l'API Windows di streaming per l'accesso ai dati di filestream. Funziona insieme alle impostazioni del livello dell'istanza di SQL Server per l'accesso filestream di Full Access Enabled, qualsiasi altra impostazione di accesso non dovrebbe funzionare con l'API di streaming.

inserisci qui la descrizione dell'immagine

  1. ... È il cosiddetto "driver del filtro del file system"?

No non lo è. Questa è solo una condivisione di file.

Stavo cercando di non confondere le acque ma mi hai chiesto quante più informazioni possibili. Nel testo barrato sopra ho, infatti, affermato che questo non era il driver del filtro. Tuttavia, tecnicamente questa è una mezza verità. Sì, è una cartella condivisa ma in realtà condivide tramite il driver del filtro. Ne ho davvero discusso perché inizia a diventare una tana di coniglio che non si può davvero fare a meno del codice sorgente (e, a dire il vero, secondo me è di poco valore oltre a quello accademico).

Il punto centrale del driver del filtro è fare alcune cose, ma una di queste è dare accesso transazionale ai dati archiviati nel target filestream tramite una varietà di interfacce; SQL Server, Transact SQL, API di Windows. Fa anche una manciata di altri elementi, tuttavia l'accesso fornito tramite la condivisione avviene tramite il driver del filtro. In effetti, se si tenta di accedere ai file in un filestream e non si è un amministratore o SQL Server, non si dovrebbe essere in grado di accedervi.

Quindi sì, entrambi sono e non sono i driver del filtro. È mezzo file sharehare di Windows che viene esposto attraverso un driver di filtro. Puoi vederlo se visualizzi la proprietà path della condivisione.

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

2. Visto che qualsiasi utente autenticato può accedere alla "condivisione", quali sono le implicazioni per la sicurezza?

È possibile modificare le autorizzazioni e richiede che le impostazioni siano impostate correttamente. Le implicazioni di sicurezza sono quelle di qualsiasi altra condivisione di file.

3. Il dispositivo RsFx0320 è un predecessore del formato di file system resiliente introdotto con Windows Server 2012?

No, questo è il nome di una versione specifica del driver del filtro. Ad esempio, ecco un sistema con quello 2016 caricato RsFx0410. ReFS è un file system, questo è un driver di filtro che si trova tra il file system e il driver miniport. In realtà è abbastanza sconcertante che questo è un driver di filtro legacy come indicato dal .10 alla fine dell'altitudine ... hmm. Noterai anche che ha un'altitudine piuttosto bassa , il che non è generalmente accettabile per i driver di filtro di terze parti.

inserisci qui la descrizione dell'immagine

Se riesci a fornire risposte alle mie domande, sarebbe bello poter fornire un riferimento alla fonte.

Non ho fonti per questo, ma ho eseguito il backup delle mie informazioni tramite schermate e opzioni di configurazione che cambiano le impostazioni. Tutto in questa risposta può essere trovato guardando attraverso il prodotto stesso e sapendo come funzionano i pezzi di Windows (es: driver del filtro).


Grazie per le risposte a 1, 2 e 3. Apprezzo in particolare la tua spiegazione del driver del filtro. La tua osservazione all'inizio è debitamente annotata, ma mi rendo conto che la condivisione verrà creata solo se attivo l'opzione nelle opzioni FILESTREAM. Ho letto una grande quantità di documentazione relativa alla configurazione / impostazioni di FILESTREAM e roba interna.
John aka hot2use

2

Ecco la mia opinione sulle tue domande:

1.È bello sapere che SQL Server ha tutto ciò che è bello e collegato, ma cosa fa effettivamente quella condivisione? È il cosiddetto "driver del filtro del file system"?

L'accesso al flusso di file di SQL Server si basa sull'accesso ai file. La condivisione fornisce tale posizione tramite una condivisione file.

Puoi facilmente vederlo con un po 'di codice C # usando OpenSqlFilestream su

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

Come puoi vedere, nessun FILE_SHARE_READ per CreateFile e nessun file magic, nessun filestream:

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

Nota: perché non esiste un'opzione FILESTREAM senza server locale / shareless - non ne ho idea. Sembra che alcune persone potrebbero apprezzare quel livello di sicurezza in più.

2. Visto che qualsiasi utente autenticato può accedere alla "condivisione", quali sono le implicazioni per la sicurezza?

Wow, ottima domanda. Sembra che le autorizzazioni di condivisione siano disponibili per qualsiasi utente autenticato, ma le autorizzazioni NTFS sottostanti dovrebbero perfezionare la sicurezza. Ma questo mi sembra un buco nella sicurezza. Dovrei indagare ulteriormente su quanto siano ottimizzate le autorizzazioni NTFS, ma non mi piacciono le autorizzazioni di condivisione file generalizzate. Dai Microsoft, TUTTI gli "utenti autenticati"? Giusto o sbagliato, penso che Microsoft tenda a ignorare la condivisione / focus sulle autorizzazioni NTFS.

Fornire "utenti autenticati" è stato un argomento dibattuto per anni. Ecco uno dei migliori blog che ho letto avanti e indietro di "utenti autenticati". È così fortemente radicato in Windows che non credo che avrebbero mai detto che è un rischio legittimo - fino a quando non esce il loro nuovo prodotto che lo elimina.

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. Il dispositivo RsFx0320 è un predecessore del formato di file system resiliente introdotto con Windows Server 2012?

Sembra essere basato su SQL anziché su O / S. RsFx0320.sys è SQL 2008. Come illustrato di seguito, SQL 2012 è RsFx0201.sys e 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 mostra cosa può succedere quando esegui l'aggiornamento dal 2012 al 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}'

Grazie per le risposte alle mie domande 2 e 3. Realizzo per la tua risposta 1 che posso accedere ai dati attraverso quella condivisione, ma mi chiedevo come, da qui il titolo "Alla ricerca di informazioni privilegiate su FILESTREAM ".
John aka hot2use,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.