À la recherche d'informations privilégiées FILESTREAM

14

Lorsque la fonction FILESTREAM est activée sur Microsoft SQL Server 2012, SQL Server crée un partage «masqué» sur le système. La part est définie comme suit:

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

Le nom est le nom du partage que vous fournissez lors de la configuration initiale de FILESTREAM dans le Gestionnaire de configuration SQL Server . Mais à quoi ça sert?

Jusque là

J'ai lu toute la documentation FILESTREAM disponible à partir de:

... mais il n'y avait aucune mention de l'action et ce qu'elle fait ou à quoi elle sert. Vous entrez le nom et SQL Server créera le partage sous le capot.

Base de données compatible FILESTREAM

Lorsque vous créez une base de données compatible FILESTREAM, la base de données fait référence à un groupe de fichiers qui fait référence à un répertoire (recommandé sur un lecteur distinct) qui n'a absolument rien à voir avec le partage, qui a été initialement créé lors de la configuration de FILESTREAM.

Capture d'écran Script de base de données compatible FILESTREAM

Script pour créer une base de données compatible FILESTREAM Oui, je me rends compte que tous les chemins sont sur C :; ce n'est qu'un exemple

Le livre blanc de Paul Randall et al. poursuit en expliquant que ...

Les données FILESTREAM sont stockées dans le système de fichiers dans un ensemble de répertoires NTFS appelés conteneurs de données, qui correspondent à des groupes de fichiers spéciaux dans la base de données. L'accès transactionnel aux données FILESTREAM est contrôlé par SQL Server et un pilote de filtre de système de fichiers installé dans le cadre de l'activation de FILESTREAM au niveau Windows. L'utilisation d'un pilote de filtre de système de fichiers permet également d'accéder à distance aux données FILESTREAM via un chemin UNC. SQL Server conserve un lien de tri des lignes de table vers les fichiers FILESTREAM qui leur sont associés. Cela signifie que la suppression ou le changement de nom de tout fichier FILESTREAM directement via le système de fichiers entraînera une corruption de la base de données.

... plus bas dans le document (page 14), ils poursuivent ...

Il existe un seul pilote de filtre de système de fichiers FILESTREAM pour chaque volume NTFS qui a un conteneur de données FILESTREAM, et il y en a également un pour chaque version de SQL Server qui a un conteneur de données FILESTREAM sur le volume. Chaque pilote de filtre est responsable de la gestion de tous les conteneurs de données FILESTREAM pour ce volume, pour toutes les instances qui utilisent une version particulière de SQL Server.

Par exemple, un volume NTFS qui héberge trois conteneurs de données FILESTREAM, un pour chacune des trois instances SQL Server 2008, n'aura qu'un seul pilote de filtre de système de fichiers FILESTREAM SQL Server 2008.

Des questions

  1. C'est agréable de savoir que SQL Server a tout ce qu'il y a de bien et de lié, mais que fait ce partage? S'agit-il du soi-disant "pilote de filtre du système de fichiers"?
  2. Étant donné que tout utilisateur authentifié peut accéder au «partage», quelles sont les implications en matière de sécurité?
  3. Le périphérique RsFx0320 est-il un prédécesseur du format de système de fichiers résilient introduit avec Windows Server 2012?

Si vous pouvez fournir des réponses à mes questions, ce serait bien si vous pouviez fournir une référence source.

John aka hot2use
la source

Réponses:

5

Lorsque la fonction FILESTREAM est activée sur Microsoft SQL Server 2012, SQL Server crée un partage «masqué» sur le système.

Il ne le fait pas par défaut, vous devez CHOISIR pour activer le partage. Cela se fait via SQL Server Configuration Manager. Si vous désélectionnez le Enable FILESTREAM for file I/O accesspartage, il sera supprimé.

entrez la description de l'image ici

  1. C'est agréable de savoir que SQL Server a tout ce qu'il y a de bien et de lié, mais que fait ce partage?

Le partage permet aux clients (locaux et distants) d'avoir un emplacement partagé unique pour utiliser l'API Windows de streaming pour accéder aux données du flux de fichiers. Cela fonctionne en conjonction avec les paramètres de niveau d'instance SQL Server pour l'accès filestream deFull Access Enabled , tout autre paramètre d'accès ne devrait pas fonctionner avec l'API de streaming.

entrez la description de l'image ici

  1. ... S'agit-il du soi-disant "pilote de filtre du système de fichiers"?

Non, ça ne l'est pas. Ce n'est qu'un partage de fichiers.

J'essayais de ne pas brouiller les eaux, mais vous avez demandé autant d'informations que possible. Dans le texte barré ci-dessus, j'ai en fait dit que ce n'était pas le pilote de filtre. Cependant, techniquement une demi-vérité. Oui, c'est un dossier partagé, mais il partage en fait via le pilote de filtre. J'ai vraiment débattu à ce sujet parce que cela commence à devenir un trou de lapin que vous ne pouvez vraiment pas descendre sans le code source (et pour être honnête, cela a peu de valeur autre que académique à mon avis).

L'intérêt du pilote de filtre est de faire quelques choses, mais l'une de ces choses est de donner un accès transactionnel aux données stockées dans la cible du flux de fichiers via une variété d'interfaces; SQL Server, Transact SQL, API Windows. Il fait également une poignée d'autres éléments - mais l'accès donné via le partage se fait via le pilote de filtre. En fait, si vous tentez d'accéder à des fichiers dans un flux de fichiers et que vous n'êtes pas administrateur ou SQL Server, vous ne devriez pas pouvoir y accéder.

Donc, oui, c'est et n'est pas le pilote de filtre. C'est un demi-partage de fichiers Windows qui est exposé via un pilote de filtre. Vous pouvez voir ceci en affichant la propriété path du partage.

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

2.Voir que tout utilisateur authentifié peut accéder au "partage", quelles sont les implications pour la sécurité?

Vous pouvez modifier les autorisations et nécessite que les paramètres soient correctement définis. Les implications pour la sécurité sont celles de tout autre partage de fichiers.

3.Le périphérique RsFx0320 est-il un prédécesseur du format de système de fichiers résilient introduit avec Windows Server 2012?

Non, il s'agit du nom d'une version spécifique du pilote de filtre. Par exemple, voici un système avec celui de 2016 chargé RsFx0410. ReFS est un système de fichiers, c'est un pilote de filtre qui se situe entre le système de fichiers et le pilote de miniport. Il est en fait assez déconcertant qu'il s'agisse d'un pilote de filtre hérité comme l'indique le .10 à la fin de l'altitude ... hmm. Vous remarquerez également qu'il a une altitude assez basse , ce qui n'est généralement pas acceptable pour les pilotes de filtre tiers.

entrez la description de l'image ici

Si vous pouvez fournir des réponses à mes questions, ce serait bien si vous pouviez fournir une référence source.

Je n'ai aucune source pour cela, mais j'ai sauvegardé mes informations via des captures d'écran et des options de configuration qui modifient les paramètres. Tout dans cette réponse peut être trouvé en regardant à travers le produit lui-même et en sachant comment fonctionnent les morceaux de fenêtres (ex: pilotes de filtre).

Sean dit de retirer Sara Chipps
la source
Merci pour les réponses à 1, 2 et 3. J'apprécie particulièrement votre explication du pilote de filtre. Votre remarque au début est dûment notée, mais je me rends compte que le partage ne sera créé que si j'active l'option dans les options FILESTREAM. J'ai lu une grande quantité de documentation concernant la configuration / les paramètres FILESTREAM et les éléments internes.
John aka hot2use
2

Voici mon point de vue sur vos questions:

1.Il est bon de savoir que SQL Server a tout ce qu'il y a de bien et de lié, mais que fait réellement ce partage? S'agit-il du soi-disant "pilote de filtre du système de fichiers"?

L'accès au flux de fichiers SQL Server est avant tout un accès aux fichiers. Le partage fournit cet emplacement via un partage de fichiers.

Vous pouvez facilement voir cela avec du code C # en utilisant OpenSqlFilestream sur

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

Comme vous pouvez le voir, pas de FILE_SHARE_READ pour CreateFile et il n'y a pas de magie de fichier, pas de flux de fichiers:

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

Remarque: pourquoi il n'y a pas de serveur local / option FILESTREAM sans partage - je n'ai aucune idée. On dirait que certaines personnes pourraient aimer ce niveau de sécurité supplémentaire.

2.Voir que tout utilisateur authentifié peut accéder au "partage", quelles sont les implications pour la sécurité?

Wow, grande question. Il semble que les autorisations de partage soient disponibles pour tout utilisateur authentifié, mais les autorisations NTFS sous-jacentes devraient affiner la sécurité. Mais cela me semble être une faille de sécurité. Je devrais enquêter davantage sur la précision des autorisations NTFS, mais je n'aime vraiment pas les autorisations de partage de fichiers généralisées. Allez Microsoft, TOUS les "utilisateurs authentifiés"? À tort ou à raison, je pense que Microsoft a tendance à ignorer le partage / focus sur les autorisations NTFS.

Fournir des «utilisateurs authentifiés» est un sujet débattu depuis des années. Voici l'un des meilleurs blogs que j'ai lus dans les deux sens des «utilisateurs authentifiés». Il est tellement ancré dans Windows que je ne pense pas qu'ils diraient jamais que c'est un risque légitime - jusqu'à ce que leur nouveau produit sorte qui s'en débarrasse.

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

3.Le périphérique RsFx0320 est-il un prédécesseur du format de système de fichiers résilient introduit avec Windows Server 2012?

Semble être basé sur SQL plutôt que sur O / S. RsFx0320.sys est SQL 2008. Comme indiqué ci-dessous, SQL 2012 est RsFx0201.sys et SQL 2014 est RsFx0300.sys:

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

Microsoft montre ce qui peut se produire lorsque vous effectuez une mise à niveau de 2012 à 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}'
Piquer
la source
Merci pour les réponses à mes questions 2 et 3. Je réalise pour votre réponse 1 que je peux accéder aux données via ce partage, mais je me demandais comment, d'où le titre "A la recherche des informations privilégiées de FILESTREAM ".
John aka hot2use