Cuando la función FILESTREAM está activada en Microsoft SQL Server 2012, SQL Server creará un recurso compartido "oculto" en el sistema. El recurso compartido se define de la siguiente manera:
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
El nombre es el nombre del recurso compartido que proporciona cuando configura inicialmente FILESTREAM en el Administrador de configuración de SQL Server . Pero para que sirve?
Hasta aquí
Leí toda la documentación disponible de FILESTREAM desde:
- FILESTREAM (SQL Server)
- Habilitar y configurar FILESTREAM
- Crear una base de datos habilitada para FILESTREAM
- Crear una tabla para almacenar datos de FILESTREAM
- ... y todo lo relacionado
- Compatibilidad de FILESTREAM con otras características de SQL Server
- FILESTREAM DDL, funciones, procedimientos almacenados y vistas
- Acceda a los datos de FILESTREAM con OpenSqlFilestream
- the paper SQL Server 2008 - Almacenamiento FILESTREAM en SQL Server 2008
- y el artículo FILESTREAM (OLTP) --- una guía de referencia técnica para diseñar soluciones OLTP de misión crítica que hace referencia a muchos otros materiales
... pero no se mencionó la participación y lo que hace o para qué sirve. Ingrese el nombre y SQL Server creará el recurso compartido bajo el capó.
Base de datos habilitada para FILESTREAM
Cuando crea una base de datos habilitada para FILESTREAM, la base de datos hace referencia a un grupo de archivos que hace referencia a un directorio (recomendado en una unidad separada) que no tiene absolutamente nada que ver con el recurso compartido, que se creó inicialmente durante la configuración de FILESTREAM.
Captura de pantalla del script de base de datos habilitado para FILESTREAM
Sí, me doy cuenta de que todas las rutas están en C :; es solo un ejemplo
El libro blanco de Paul Randall et al. continúa explicando que ...
Los datos de FILESTREAM se almacenan en el sistema de archivos en un conjunto de directorios NTFS llamados contenedores de datos, que corresponden a grupos de archivos especiales en la base de datos. El acceso transaccional a los datos de FILESTREAM está controlado por SQL Server y un controlador de filtro del sistema de archivos que se instala como parte de la habilitación de FILESTREAM a nivel de Windows. El uso de un controlador de filtro del sistema de archivos también permite el acceso remoto a los datos de FILESTREAM a través de una ruta UNC. SQL Server mantiene un tipo de enlace desde las filas de la tabla a los archivos FILESTREAM asociados con ellos. Esto significa que eliminar o renombrar cualquier archivo FILESTREAM directamente a través del sistema de archivos provocará daños en la base de datos.
... más abajo en el documento (página 14) continúan con ...
Hay un único controlador de filtro del sistema de archivos FILESTREAM para cada volumen NTFS que tiene un contenedor de datos FILESTREAM, y también hay uno para cada versión de SQL Server que tiene un contenedor de datos FILESTREAM en el volumen. Cada controlador de filtro es responsable de administrar todos los contenedores de datos de FILESTREAM para ese volumen, para todas las instancias que usan una versión particular de SQL Server.
Por ejemplo, un volumen NTFS que aloja tres contenedores de datos FILESTREAM, uno para cada una de las tres instancias de SQL Server 2008, solo tendrá un controlador de filtro del sistema de archivos FILESTREAM de SQL Server 2008.
Preguntas
- Es bueno saber que SQL Server tiene todo lo bueno y atado, pero ¿qué hace realmente ese recurso compartido? ¿Es el llamado "controlador de filtro del sistema de archivos"?
- Dado que cualquier usuario autenticado puede acceder al "recurso compartido", ¿cuáles son las implicaciones de seguridad?
- ¿El dispositivo RsFx0320 es un predecesor del formato de sistema de archivos resistente que se introdujo con Windows Server 2012?
Si puede proporcionar respuestas a mis preguntas, entonces sería bueno si pudiera proporcionar una fuente de referencia.
fuente
Aquí está mi opinión sobre sus preguntas:
1. Es bueno saber que SQL Server tiene todo lo bueno y atado, pero ¿qué hace realmente ese recurso compartido? ¿Es el llamado "controlador de filtro del sistema de archivos"?
El acceso a la secuencia de archivos de SQL Server se trata, bueno, del acceso a los archivos. El recurso compartido proporciona esa ubicación a través de un recurso compartido de archivos.
Puede ver esto fácilmente con un código C # usando OpenSqlFilestream en
https://docs.microsoft.com/en-us/sql/relational-databases/blob/access-filestream-data-with-opensqlfilestream
Como puede ver, no hay FILE_SHARE_READ para CreateFile y no hay archivos mágicos, ni archivos stream:
Nota: En cuanto a por qué no hay un servidor local / opción de FILESTREAM sin compartir, no tengo idea. Parece que a algunas personas les gustaría ese nivel adicional de seguridad.
2. Considerando que cualquier usuario autenticado puede acceder al "recurso compartido", ¿cuáles son las implicaciones de seguridad?
Wow, gran pregunta. Parece que los permisos compartidos están disponibles para cualquier usuario autenticado, pero los permisos NTFS subyacentes deberían ajustar la seguridad. Pero, esto me parece un agujero de seguridad. Tendría que investigar más a fondo qué tan bien ajustados están los permisos NTFS, pero definitivamente no me gustan los permisos de uso compartido de archivos generalizados. Vamos Microsoft, TODOS los "usuarios autenticados"? Bien o mal, creo que Microsoft tiende a ignorar el recurso compartido / enfoque en los permisos NTFS.
El suministro de "usuarios autenticados" ha sido un tema debatido durante años. Este es uno de los mejores blogs que he leído sobre "usuarios autenticados". Está tan arraigado en Windows que no creo que digan que es un riesgo legítimo, hasta que salga su nuevo producto que lo 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
¿Es el dispositivo RsFx0320 un predecesor del formato de sistema de archivos resistente que se introdujo con Windows Server 2012?
Parece estar basado en SQL en lugar de O / S. RsFx0320.sys es SQL 2008. Como se ve a continuación, SQL 2012 es RsFx0201.sys y SQL 2014 es RsFx0300.sys:
https://support.microsoft.com/en-us/help/2961258/fix-cannot-access-the-data-in-filetable-after-you-upgrade-from-sql-ser
Microsoft muestra lo que puede suceder cuando actualiza de 2012 a 2014:
fuente