Quando o recurso FILESTREAM é ativado no Microsoft SQL Server 2012, o SQL Server criará um compartilhamento "oculto" no sistema. A participação é definida da seguinte forma:
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
O nome é o nome do compartilhamento que você fornece ao configurar inicialmente FILESTREAM no SQL Server Configuration Manager . Mas para que serve?
Até aqui
Eu li toda a documentação disponível do FILESTREAM começando em:
- FILESTREAM (SQL Server)
- Ativar e configurar FILESTREAM
- Criar um banco de dados habilitado para FILESTREAM
- Criar uma tabela para armazenar dados FILESTREAM
- ... e tudo relacionado
- Compatibilidade do FILESTREAM com outros recursos do SQL Server
- FILESTREAM DDL, Funções, Procedimentos Armazenados e Visualizações
- Acesse dados FILESTREAM com OpenSqlFilestream
- o artigo SQL Server 2008 - Armazenamento FILESTREAM no SQL Server 2008
- e o artigo FILESTREAM (OLTP) --- um guia de referência técnica para projetar soluções OLTP de missão crítica que faz referência a muitos outros materiais
...mas não houve menção ao compartilhamento e o que ele faz ou para que serve. Você insere o nome e o SQL Server criará o compartilhamento sob o capô.
Banco de dados habilitado para FILESTREAM
Quando você cria um banco de dados habilitado para FILESTREAM, o banco de dados faz referência a um grupo de arquivos que faz referência a um diretório (recomendado em uma unidade separada) que não tem absolutamente nada a ver com o compartilhamento, que foi criado inicialmente durante a configuração de FILESTREAM.
Captura de tela Script de banco de dados habilitado para FILESTREAM
Sim, eu percebo que todos os caminhos estão em C:; é apenas um exemplo
O white paper de Paul Randall et al. continua explicando isso...
Os dados FILESTREAM são armazenados no sistema de arquivos em um conjunto de diretórios NTFS chamados contêineres de dados, que correspondem a grupos de arquivos especiais no banco de dados. O acesso transacional aos dados FILESTREAM é controlado pelo SQL Server e um driver de filtro do sistema de arquivos que é instalado como parte da habilitação do FILESTREAM no nível do Windows. O uso de um driver de filtro do sistema de arquivos também permite acesso remoto aos dados FILESTREAM por meio de um caminho UNC. O SQL Server mantém um link de classificação das linhas da tabela para os arquivos FILESTREAM associados a elas. Isso significa que excluir ou renomear qualquer arquivo FILESTREAM diretamente pelo sistema de arquivos resultará em corrupção do banco de dados.
... mais abaixo no documento (página 14) eles continuam com ...
Há um único driver de filtro do sistema de arquivos FILESTREAM para cada volume NTFS que possui um contêiner de dados FILESTREAM e também há um para cada versão do SQL Server que possui um contêiner de dados FILESTREAM no volume. Cada driver de filtro é responsável por gerenciar todos os contêineres de dados FILESTREAM desse volume, para todas as instâncias que usam uma versão específica do SQL Server.
Por exemplo, um volume NTFS que hospeda três contêineres de dados FILESTREAM, um para cada uma das três instâncias do SQL Server 2008, terá apenas um driver de filtro do sistema de arquivos FILESTREAM do SQL Server 2008.
Perguntas
- É bom saber que o SQL Server tem tudo de bom e amarrado, mas o que esse compartilhamento realmente faz? É o chamado "driver de filtro do sistema de arquivos"?
- Visto que qualquer usuário autenticado pode acessar o "compartilhamento", quais são as implicações de segurança?
- O dispositivo RsFx0320 é um predecessor do formato de sistema de arquivos resiliente que foi introduzido com o Windows Server 2012?
Se você puder fornecer respostas às minhas perguntas, seria bom se você pudesse fornecer uma referência de fonte.
Ele não faz isso por padrão, você tem que ESCOLHER para habilitar o compartilhamento. Isso é feito por meio do SQL Server Configuration Manager. Se você desmarcar o
Enable FILESTREAM for file I/O access
compartilhamento será removido.O compartilhamento permite que os clientes (locais e remotos) tenham um único local compartilhado para usar a API do Windows de streaming para acesso aos dados do fluxo de arquivos. Isso funciona em conjunto com as configurações de nível de instância do SQL Server para acesso ao fluxo de arquivos de
Full Access Enabled
, qualquer outra configuração de acesso não deve funcionar com a API de streaming.Não não é. Este é apenas um compartilhamento de arquivos.Eu estava tentando não turvar as águas, mas você pediu o máximo de informações possível. No texto tachado acima, de fato, disse que esse não era o driver do filtro. No entanto, isso tecnicamente é uma meia verdade. Sim, é uma pasta compartilhada , mas na verdade é compartilhada por meio do driver de filtro. Eu realmente debati sobre isso porque começa a se tornar um buraco de coelho que você realmente não pode descer sem o código-fonte (e para ser honesto, é de pouco valor além de acadêmico na minha opinião).
O objetivo principal do driver de filtro é fazer algumas coisas, mas uma dessas coisas é fornecer acesso transacional aos dados armazenados no destino do fluxo de arquivos por meio de uma variedade de interfaces; SQL Server, Transact SQL, APIs do Windows. Ele também faz um punhado de outros itens - no entanto, o acesso dado através do compartilhamento é feito através do driver de filtro. Na verdade, se você tentar acessar arquivos em um fluxo de arquivos e não for um administrador ou SQL Server, não poderá acessá-los.
Então, sim, isso é e não é o driver do filtro. É metade de um compartilhamento de arquivos do Windows que é exposto por meio de um driver de filtro. Você pode ver isso ao visualizar a propriedade do caminho do compartilhamento.
Você pode alterar as permissões e requer que as configurações sejam definidas corretamente. As implicações de segurança são as de qualquer outro compartilhamento de arquivos.
Não, este é o nome de uma versão específica do driver de filtro. Por exemplo, aqui está um sistema com o 2016 carregado
RsFx0410
. ReFS é um sistema de arquivos, este é um driver de filtro que fica entre o sistema de arquivos e o driver de miniporta. Na verdade, é bastante desconcertante que este seja um driver de filtro herdado, conforme indicado pelo .10 no final da altitude... hmm. Você também notará que tem uma altitude bastante baixa , o que geralmente não é aceitável para drivers de filtro de terceiros.Não tenho fontes para isso, mas fiz backup de minhas informações por meio de capturas de tela e opções de configuração que alteram as configurações. Tudo nesta resposta pode ser encontrado examinando o próprio produto e sabendo como funcionam as janelas (ex: drivers de filtro).
Aqui está minha opinião sobre suas perguntas:
1.É bom saber que o SQL Server tem tudo de bom e amarrado, mas o que esse compartilhamento realmente faz? É o chamado "driver de filtro do sistema de arquivos"?
O acesso ao fluxo de arquivos do SQL Server tem tudo a ver com acesso a arquivos. O compartilhamento fornece esse local por meio de um compartilhamento de arquivos.
Você pode ver isso facilmente com algum código C# usando OpenSqlFilestream em
https://learn.microsoft.com/en-us/sql/relational-databases/blob/access-filestream-data-with-opensqlfilestream
Como você pode ver, não há FILE_SHARE_READ para CreateFile e não há mágica de arquivos, nem fluxo de arquivos:
Nota: Quanto ao motivo pelo qual não há opção de servidor local / FILESTREAM sem compartilhamento - não tenho idéia. Parece que algumas pessoas podem gostar desse nível extra de segurança.
2.Vendo como qualquer usuário autenticado pode acessar o "compartilhamento", quais são as implicações de segurança?
Nossa, ótima pergunta. Parece que as permissões de compartilhamento estão disponíveis para qualquer usuário autenticado, mas as permissões NTFS subjacentes devem ajustar a segurança. Mas, isso parece uma falha de segurança para mim. Eu teria que investigar mais quão bem ajustadas são as permissões NTFS, mas definitivamente não estou gostando das permissões generalizadas de compartilhamento de arquivos. Vamos Microsoft, TODOS "usuários autenticados"? Certo ou errado, acho que a Microsoft tende a ignorar o compartilhamento/foco nas permissões NTFS.
Fornecer "usuários autenticados" é um tema debatido há anos. Aqui está um dos melhores blogs que li sobre "usuários autenticados". Está tão fortemente enraizado no Windows que acho que eles nunca diriam que é um risco legítimo - até que seu novo produto seja lançado e o elimine.
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. O dispositivo RsFx0320 é um predecessor do formato de sistema de arquivos resiliente que foi introduzido com o Windows Server 2012?
Parece ser baseado em SQL em vez de baseado em O/S. RsFx0320.sys é SQL 2008. Como visto abaixo, 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
A Microsoft mostra o que pode acontecer quando você atualiza de 2012 para 2014: