Quando o recurso FILESTREAM é ativado no Microsoft SQL Server 2012, o SQL Server cria um compartilhamento "oculto" no sistema. O compartilhamento é definido da seguinte maneira:
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?
Tão longe
Eu li toda a documentação FILESTREAM disponível, começando em:
- FILESTREAM (SQL Server)
- Habilitar e configurar FILESTREAM
- Criar um banco de dados ativado para FILESTREAM
- Criar uma tabela para armazenar dados FILESTREAM
- ... e tudo relacionado
- Compatibilidade com FILESTREAM com outros recursos do SQL Server
- DDL FILESTREAM, funções, procedimentos armazenados e visualizações
- Acesse os dados FILESTREAM com o 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 referencia muitos outros materiais
... mas não houve menção ao compartilhamento e o que ele faz ou para que serve. Você digita o nome e o SQL Server cria o compartilhamento oculto.
Banco de dados ativado por FILESTREAM
Quando você cria um banco de dados ativado 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.
Script do banco de dados ativado para FILESTREAM
Sim, percebo que todos os caminhos estão em C :; é apenas um exemplo
O white paper de Paul Randall et al. passa a explicar que ...
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 do FILESTREAM é controlado pelo SQL Server e um driver de filtro do sistema de arquivos instalado como parte da ativaçã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 através de um caminho UNC. O SQL Server mantém um link das sortes das linhas da tabela para os arquivos FILESTREAM associados a eles. Isso significa que excluir ou renomear qualquer arquivo FILESTREAM diretamente através do sistema de arquivos resultará em corrupção do banco de dados.
... mais abaixo no documento (página 14) que 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 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 SQL Server 2008 FILESTREAM.
Questões
- É bom saber que o SQL Server tem tudo de bom e funcional, mas o que esse compartilhamento realmente faz? É o chamado "driver de filtro do sistema de arquivos"?
- Como qualquer usuário autenticado pode acessar o "compartilhamento", quais são as implicações de segurança?
- O dispositivo RsFx0320 é um antecessor do formato de sistema de arquivos resiliente que foi introduzido no Windows Server 2012?
Se você puder fornecer respostas para minhas perguntas, seria bom se você pudesse fornecer uma referência de origem.
fonte
Aqui está a minha opinião sobre suas perguntas:
1.É bom saber que o SQL Server tem tudo de bom e funcional, 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 trata-se, bem, do 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 o OpenSqlFilestream em
https://docs.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 arquivo, nem fluxo de arquivos:
Nota: Por que não há opção FILESTREAM para servidor local / sem compartilhamento - não faço 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?
Uau, ó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 me parece uma brecha de segurança. Eu teria que investigar mais detalhadamente como as permissões de NTFS estão ajustadas, mas definitivamente não estou gostando das permissões de compartilhamento de arquivos generalizadas. Vamos lá Microsoft, TODOS "usuários autenticados"? Certo ou errado, acho que a Microsoft tende a ignorar o compartilhamento / foco nas permissões NTFS.
O fornecimento de "usuários autenticados" é um tópico debatido há anos. Aqui está um dos melhores blogs que eu já li sobre "usuários autenticados". Ele está tão arraigado no Windows que acho que eles nunca diriam que é um risco legítimo - até o lançamento do novo produto, que o livra.
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 antecessor do formato de sistema de arquivos resiliente que foi introduzido no Windows Server 2012?
Parece ser baseado em SQL e não em O / S. RsFx0320.sys é o SQL 2008. Como visto abaixo, o SQL 2012 é RsFx0201.sys e o 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:
fonte