Auf der Suche nach FILESTREAM-Insiderinformationen


14

Wenn die FILESTREAM-Funktion in Microsoft SQL Server 2012 aktiviert ist, erstellt SQL Server eine "versteckte" Freigabe auf dem System. Die Freigabe ist wie folgt definiert:

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

Der Name ist der Name der Freigabe, die Sie beim erstmaligen Konfigurieren von FILESTREAM im SQL Server-Konfigurations-Manager angeben . Aber wofür ist es?

Bisher

Ich habe die gesamte FILESTREAM-Dokumentation gelesen, beginnend mit:

... aber es wurde nicht erwähnt, was die Aktie macht oder wofür sie ist. Sie geben den Namen ein und SQL Server erstellt die Freigabe im Hintergrund.

FILESTREAM-fähige Datenbank

Wenn Sie eine FILESTREAM-fähige Datenbank erstellen, verweist die Datenbank auf eine Dateigruppe, die auf ein Verzeichnis verweist (empfohlen auf einem separaten Laufwerk), das absolut nichts mit der Freigabe zu tun hat, die ursprünglich während der FILESTREAM-Konfiguration erstellt wurde.

Screenshot FILESTREAM-fähiges Datenbankskript

Skript zum Erstellen einer FILESTREAM-fähigen Datenbank Ja, mir ist klar, dass alle Pfade auf C: sind; Es ist nur ein Beispiel

Das Weißbuch von Paul Randall et al. erklärt weiter, dass ...

FILESTREAM-Daten werden im Dateisystem in einer Reihe von NTFS-Verzeichnissen gespeichert, die als Datencontainer bezeichnet werden und speziellen Dateigruppen in der Datenbank entsprechen. Der Transaktionszugriff auf die FILESTREAM-Daten wird von SQL Server und einem Dateisystemfiltertreiber gesteuert, der im Rahmen der Aktivierung von FILESTREAM auf Windows-Ebene installiert wird. Die Verwendung eines Dateisystemfiltertreibers ermöglicht auch den Remotezugriff auf die FILESTREAM-Daten über einen UNC-Pfad. SQL Server verwaltet eine Art Link von Tabellenzeilen zu den damit verbundenen FILESTREAM-Dateien. Dies bedeutet, dass das Löschen oder Umbenennen von FILESTREAM-Dateien direkt über das Dateisystem zur Beschädigung der Datenbank führt.

... weiter unten im Dokument (Seite 14) machen sie weiter mit ...

Es gibt einen einzigen FILESTREAM-Dateisystemfiltertreiber für jedes NTFS-Volume mit einem FILESTREAM-Datencontainer und einen für jede Version von SQL Server mit einem FILESTREAM-Datencontainer auf dem Volume. Jeder Filtertreiber ist für die Verwaltung aller FILESTREAM-Datencontainer für dieses Volume verantwortlich, für alle Instanzen, die eine bestimmte Version von SQL Server verwenden.

Ein NTFS-Volume, auf dem sich drei FILESTREAM-Datencontainer befinden, einer für jede der drei SQL Server 2008-Instanzen, verfügt beispielsweise nur über einen SQL Server 2008-FILESTREAM-Dateisystemfiltertreiber.

Fragen

  1. Es ist schön zu wissen, dass in SQL Server alles schön und fest verbunden ist, aber was macht diese Freigabe tatsächlich? Ist es der sogenannte "Dateisystem-Filtertreiber"?
  2. Welche Auswirkungen hat die Sicherheit, wenn ein authentifizierter Benutzer auf die Freigabe zugreifen kann?
  3. Ist das Gerät RsFx0320 ein Vorgänger des mit Windows Server 2012 eingeführten ausfallsicheren Dateisystemformats?

Wenn Sie meine Fragen beantworten können, wäre es schön, wenn Sie eine Quellenangabe machen könnten.

Antworten:


5

Wenn die FILESTREAM-Funktion in Microsoft SQL Server 2012 aktiviert ist, erstellt SQL Server eine "versteckte" Freigabe auf dem System.

Dies geschieht nicht standardmäßig, Sie müssen AUSWÄHLEN, um die Freigabe zu aktivieren. Dies erfolgt über SQL Server Configuration Manager. Wenn Sie die Auswahl aufheben, wird Enable FILESTREAM for file I/O accessdie Freigabe entfernt.

Bildbeschreibung hier eingeben

  1. Es ist schön zu wissen, dass in SQL Server alles schön und fest verbunden ist, aber was macht diese Freigabe tatsächlich?

Die Freigabe ermöglicht es Clients (lokal und remote), über einen einzelnen freigegebenen Speicherort zu verfügen, um die Streaming-Windows-API für den Zugriff auf Dateistream-Daten zu verwenden. Dies funktioniert in Verbindung mit den Einstellungen der SQL Server-Instanzebene für den Dateistream-Zugriff. Alle Full Access Enabledanderen Zugriffseinstellungen sollten nicht mit der Streaming-API funktionieren.

Bildbeschreibung hier eingeben

  1. ... handelt es sich um den sogenannten "Dateisystem-Filtertreiber"?

Nein ist es nicht. Dies ist nur eine Dateifreigabe.

Ich habe versucht, das Wasser nicht zu trüben, aber Sie haben nach möglichst vielen Informationen gefragt. In dem oben durchgestrichenen Text habe ich tatsächlich gesagt, dass dies nicht der Filtertreiber war. Jedoch , dass technisch ist eine halbe Wahrheit. Ja, es ist ein freigegebener Ordner, der jedoch über den Filtertreiber freigegeben wird . Ich habe wirklich darüber debattiert, weil es zu einem Hasenloch wird, das man ohne den Quellcode wirklich nicht unterkriegen kann (und ehrlich gesagt ist es meiner Meinung nach von geringem Wert als akademisch).

Der ganze Zweck des Filtertreibers besteht darin, ein paar Dinge zu tun, aber eines dieser Dinge besteht darin, über eine Vielzahl von Schnittstellen transaktionalen Zugriff auf die im Dateistream-Ziel gespeicherten Daten zu gewähren. SQL Server-, Transact SQL- und Windows-APIs. Es führt auch eine Handvoll anderer Elemente aus - der Zugriff über die Freigabe erfolgt jedoch über den Filtertreiber. Wenn Sie versuchen, auf Dateien in einem Dateistream zuzugreifen und kein Administrator oder SQL Server sind, sollten Sie nicht in der Lage sein, auf diese Dateien zuzugreifen.

Ja, das ist und ist nicht der Filtertreiber. Es ist ein halbes Windows-Fileshare, das über einen Filtertreiber verfügbar gemacht wird. Sie können sehen, dass Sie die Pfadeigenschaft der Freigabe anzeigen.

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

2.Was sind die Auswirkungen auf die Sicherheit, wenn ein authentifizierter Benutzer auf die "Freigabe" zugreifen kann?

Sie können die Berechtigungen ändern und müssen die Einstellungen ordnungsgemäß vornehmen. Die Auswirkungen auf die Sicherheit betreffen alle anderen Dateifreigaben.

3.Ist das Gerät RsFx0320 ein Vorgänger des mit Windows Server 2012 eingeführten ausfallsicheren Dateisystemformats?

Nein, dies ist der Name einer bestimmten Version des Filtertreibers. Zum Beispiel ist hier ein System mit dem 2016 geladen RsFx0410. ReFS ist ein Dateisystem. Dies ist ein Filtertreiber, der sich zwischen dem Dateisystem und dem Miniporttreiber befindet. Es ist eigentlich ziemlich beunruhigend, dass dies ein älterer Filtertreiber ist, wie durch die .10 am Ende der Höhe angegeben ... hmm. Sie werden auch feststellen, dass es eine ziemlich geringe Höhe hat , was für Filtertreiber von Drittanbietern im Allgemeinen nicht akzeptabel ist.

Bildbeschreibung hier eingeben

Wenn Sie meine Fragen beantworten können, wäre es schön, wenn Sie eine Quellenangabe machen könnten.

Ich habe keine Quellen dafür, habe aber meine Informationen durch Screenshots und Konfigurationsoptionen gesichert, die Einstellungen ändern. Alles in dieser Antwort kann gefunden werden, indem Sie das Produkt selbst durchsehen und wissen, wie Windows-Komponenten funktionieren (z. B. Filtertreiber).


Vielen Dank für die Antworten auf 1, 2 und 3. Ich schätze besonders Ihre Erklärung des Filtertreibers. Ihre Bemerkung zu Beginn ist ordnungsgemäß vermerkt, aber mir ist klar, dass die Freigabe nur erstellt wird, wenn ich die Option in den FILESTREAM-Optionen aktiviere. Ich habe eine große Menge an Dokumentation zu FILESTREAM-Konfiguration / -Einstellungen und Interna gelesen.
John aka hot2use

2

Hier ist meine Meinung zu Ihren Fragen:

1. Es ist schön zu wissen, dass SQL Server alles schön und gebunden hat, aber was macht diese Freigabe eigentlich? Ist es der sogenannte "Dateisystem-Filtertreiber"?

Beim Zugriff auf SQL Server-Dateistreams geht es hauptsächlich um den Zugriff auf Dateien. Die Freigabe stellt diesen Speicherort über eine Dateifreigabe bereit.

Sie können dies leicht mit etwas C # -Code sehen, wenn Sie OpenSqlFilestream aktivieren

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

Wie Sie sehen, gibt es für CreateFile kein FILE_SHARE_READ und keine Dateizauber, keinen Dateistream:

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

Hinweis: Warum gibt es keine lokale Server / shareless FILESTREAM-Option - Ich habe keine Ahnung. Klingt so, als würden manche Leute diese zusätzliche Sicherheitsstufe mögen.

2.Was sind die Auswirkungen auf die Sicherheit, wenn ein authentifizierter Benutzer auf die "Freigabe" zugreifen kann?

Wow, tolle Frage. Es scheint, dass die Freigabeberechtigungen jedem authentifizierten Benutzer zur Verfügung stehen, die zugrunde liegenden NTFS-Berechtigungen sollten jedoch die Sicherheit optimieren. Aber das scheint mir eine Sicherheitslücke zu sein. Ich müsste weiter untersuchen, wie fein die NTFS-Berechtigungen eingestellt sind, aber ich mag die allgemeinen Dateifreigabeberechtigungen definitiv nicht. Komm schon Microsoft, ALLE "authentifizierten User"? Richtig oder falsch, ich denke, dass Microsoft dazu neigt, die Freigabe / den Fokus auf die NTFS-Berechtigungen zu ignorieren.

Die Bereitstellung "authentifizierter Benutzer" ist seit Jahren ein umstrittenes Thema. Hier ist einer der besten Blogs, die ich über "authentifizierte Benutzer" gelesen habe. Es ist so stark in Windows verankert, dass sie nicht glauben, dass es jemals ein legitimes Risiko ist - bis ihr neues Produkt herauskommt, das es beseitigt.

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

3.Ist das Gerät RsFx0320 ein Vorgänger des mit Windows Server 2012 eingeführten ausfallsicheren Dateisystemformats?

Scheint eher auf SQL als auf O / S zu basieren. RsFx0320.sys ist SQL 2008. Wie Sie unten sehen, ist SQL 2012 RsFx0201.sys und 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 zeigt, was beim Upgrade von 2012 auf 2014 passieren kann:

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}'

Danke für die Antworten auf meine Fragen 2 und 3. ich erkennt , für deine Antwort 1, dass ich die Daten durch diese Freigabe zugreifen kann, aber ich war auf dem , wie fragen, daher den Titel „In Search of FILESTREAM Insider - Informationen “.
John aka hot2use
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.