AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 180142
Accepted
John K. N.
John K. N.
Asked: 2017-07-19 07:20:21 +0800 CST2017-07-19 07:20:21 +0800 CST 2017-07-19 07:20:21 +0800 CST

Em busca de informações privilegiadas do FILESTREAM

  • 772

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

Script para criar 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

  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"?
  2. Visto que qualquer usuário autenticado pode acessar o "compartilhamento", quais são as implicações de segurança?
  3. 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.

sql-server sql-server-2008
  • 2 2 respostas
  • 1860 Views

2 respostas

  • Voted
  1. Best Answer
    Sean Gallardy
    2017-07-28T15:03:09+08:002017-07-28T15:03:09+08:00

    Quando o recurso FILESTREAM é ativado no Microsoft SQL Server 2012, o SQL Server criará um compartilhamento "oculto" no sistema.

    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 accesscompartilhamento será removido.

    insira a descrição da imagem aqui

    1. É bom saber que o SQL Server tem tudo de bom e amarrado, mas o que esse compartilhamento realmente faz?

    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.

    insira a descrição da imagem aqui

    1. ... É o chamado "driver de filtro do sistema de arquivos"?

    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.

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

    2.Vendo como qualquer usuário autenticado pode acessar o "compartilhamento", quais são as implicações de segurança?

    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.

    3. O dispositivo RsFx0320 é um predecessor do formato de sistema de arquivos resiliente que foi introduzido com o Windows Server 2012?

    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.

    insira a descrição da imagem aqui

    Se você puder fornecer respostas às minhas perguntas, seria bom se você pudesse fornecer uma referência de fonte.

    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).

    • 5
  2. Sting
    2017-07-28T08:20:08+08:002017-07-28T08:20:08+08:00

    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:

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

    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:

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

relate perguntas

  • Quais são as principais causas de deadlocks e podem ser evitadas?

  • Quanto "Padding" coloco em meus índices?

  • Existe um processo do tipo "práticas recomendadas" para os desenvolvedores seguirem para alterações no banco de dados?

  • Como determinar se um Índice é necessário ou necessário

  • Downgrade do SQL Server 2008 para 2005

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host

    • 12 respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Jin conectar ao servidor PostgreSQL: FATAL: nenhuma entrada pg_hba.conf para o host 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve