Tengo un par de nodos de Microsoft SQL Server 2016 en un grupo de disponibilidad siempre activo. Estoy tratando de realizar un BULK INSERT
(usando una consulta SQL Server 2016 Management Studio) en un archivo ubicado en un clúster de conmutación por error del servidor de archivos de Windows Server 2016, pero aparece el siguiente error:
Msg 4861, Nivel 16, Estado 1
No se puede cargar en bloque porque el archivo "\ nas2.my.domain \ Microsoft SQL Server 2016 Enterprise \ test.txt" no se pudo abrir. Código de error del sistema operativo 5 (acceso denegado).
Esto ocurrirá independientemente de si uso el nombre de nodo activo ( nas2.my.domain
) o el escucha de clúster de conmutación por error ( nas.my.domain
).
Después de mirar alrededor, descubrí que esto se debía a que SQL Server no podía suplantar la cuenta de usuario con la que estoy conectado debido a matices BULK INSERT
.
Si se conecta a SQL Server mediante la autenticación de Windows, la cuenta de servicio de SQL Server intenta suplantar su cuenta de usuario cuando se conecta al servidor de archivos. Si se conecta utilizando la autenticación de SQL Server, se conectará al servidor de archivos como la cuenta de servicio de SQL Server.
Si la delegación y la suplantación no están configuradas correctamente (el estado predeterminado), el servicio SQL Server no podrá suplantar su cuenta de usuario y volverá a intentar conectarse al servidor de archivos como un usuario anónimo.
Esto puede confirmarse mirando a través del registro de eventos de seguridad en el servidor de archivos. Estos hechos junto con una guía sobre la configuración de la delegación restringida y sin restricciones se documenta en estos enlaces:
He intentado seguir las instrucciones de la guía de SQLdude pero todavía no funciona.
La base de datos a la que estoy intentando BULK INSERT
acceder no forma parte del grupo de disponibilidad, por lo que solo el nodo MSSQL1 debería ser relevante. El servidor de archivos estaba activo en el nodo NAS2. La comprobación del registro de eventos en el servidor de archivos muestra que todavía está sufriendo este problema y que SQL Server está intentando autenticarse en el servidor de archivos como un usuario anónimo en lugar de suplantar mi cuenta de usuario.
¿Alguien sabe qué va mal? ¿O si algo cambió en SQL Server 2016 para hacer que estas guías sean obsoletas?
- Entrada del registro de eventos de seguridad del servidor de archivos
- Delegación de cuenta de servicio
- SPN de cuenta de servicio
- SQL Server # 1 Delegación de cuenta de computadora
- SPN de cuenta de computadora del servidor de archivos n. ° 2
- Objetos de directiva de grupo
sys.dm_exec_connections
- Kerberos
Puedo confirmar que este GPO se ha aplicado a MSSQL1 a través de gpresult.exe /R
, y tanto los nodos de SQL como del servidor de archivos se reiniciaron después para garantizar que las cachés se hayan vaciado.
Respuestas:
Su configuración se ve sólida. Los SPN y la Delegación están configurados como lo habría hecho yo mismo.
Lo único que no ha explicado son los permisos de archivo / recurso compartido. Aquí es donde entra mi solución.
Solución 1 (cuenta personal)
Solución 2 (Cuenta de servicio de SQL Server)
Permisos de INSERTAR A GRANEL
Referencia: BULK INSERT (Transact-SQL)
fuente
En mi experiencia con la delegación, la cuenta de servicio de SQL Server necesita los permisos adecuados para el recurso compartido al que intenta acceder en su nombre. ¿Has ajustado esos permisos? Creo que leer solo sería suficiente por adelantado.
fuente