J'ai une paire de nœuds de Microsoft SQL Server 2016 dans un groupe Toujours sur la disponibilité. J'essaie d'effectuer un BULK INSERT
(Utilisation d'une requête SQL Server 2016 Management Studio) dans un fichier situé sur un cluster de basculement de serveur de fichiers Windows Server 2016, mais je reçois l'erreur suivante:
MSG 4861, niveau 16, état 1
ne peut pas charger en vrac car le fichier "\ nas2.my.domain\Microsoft SQL Server 2016 Enterprise\Test.txt" n'a pas pu être ouvert. Code d'erreur du système d'exploitation 5 (l'accès est refusé.).
Cela se produira, si j'utilise le nom du nœud actif (nas2.my.domain
) ou l'auditeur de cluster de basculement (nas.my.domain
).
Après avoir regardé autour de moi, j'ai découvert que cela était dû au serveur SQL incapable d'imiter le compte d'utilisateur que je suis connecté à cause de nuances avec BULK INSERT
.
Si vous vous connectez au serveur SQL à l'aide de l'authentification Windows, le compte de service SQL Server tente d'imiter votre compte d'utilisateur lors de la connexion au serveur de fichiers. Si vous vous connectez à l'aide de l'authentification SQL Server, il vous connectera au serveur de fichiers en tant que compte SQL Server Service.
Si la délégation et l'impersonnation ne sont pas configurées correctement (l'état par défaut), le service SQL Server ne pourra pas imiter votre compte d'utilisateur et tombera à essayer de vous connecter au serveur de fichiers en tant qu'utilisateur anonyme.
Cela peut être confirmé en examinant via le journal des événements de sécurité sur le serveur de fichiers. Ces faits avec un guide sur la configuration de la délégation non contrainte et contrainte sont documentés dans ces liens:
J'ai essayé de suivre les instructions de Thesqldede Guide de la situation, mais cela ne fonctionne toujours pas.
La base de données que j'essaie de BULK INSERT
Pour ne pas faire partie du groupe de disponibilité, il ne faut donc que le nœud MSSQL1 devrait être pertinent. Le serveur de fichiers était actif sur le nœud NAS2. Vérification du journal des événements sur le serveur de fichiers montre qu'il souffre toujours de ce problème et que le serveur SQL tente d'authentifier sur le serveur de fichiers en tant qu'utilisateur anonyme plutôt que d'imiter mon compte d'utilisateur.
Est-ce que quelqu'un sait ce qui se passe mal? Ou si quelque chose a changé dans SQL Server 2016 pour rendre ces guides obsolètes?
sys.dm_exec_connections
- Kerberos Je peux confirmer que cela GPO a été appliqué à MSSQL1 via gpresult.exe /R
, et les nœuds SQL et Server de fichiers ont été redémarrés ensuite pour que les caches ont été rinçues.
Votre configuration semble solide. Les SPNS et la délégation sont configurés comme je l'aurais fait moi-même.
La seule chose que vous n'avez pas expliquée sont les autorisations de fichiers/actions. C'est là que ma solution interne.
Délégation de compte de sécurité (impersonnation)
Si un utilisateur utilise une connexion SQL Server, le profil de sécurité du compte de processus SQL Server est utilisé. Un identifiant utilisant l'authentification SQL Server ne peut pas être authentifié en dehors du moteur de base de données. Par conséquent, lorsqu'une commande d'insertion en vrac est initiée par une connexion à l'aide de l'authentification SQL Server, la connexion aux données est effectuée à l'aide du contexte de sécurité du compte de processus SQL Server (le Compte utilisé par le service de moteur de base de données SQL Server). Pour réussir Lisez les données source Vous devez Accordez le compte utilisé par le moteur de base de données SQL Server, accédez aux données source. En revanche, si un serveur SQL Connexion utilisateur On utilise Authentification Windows, l'utilisateur ne peut lire que ces fichiers accessibles par le compte d'utilisateur, quel que soit le profil de sécurité du processus SQL Server.
Référence: insert en vrac (transact-sql)
Dans mon expérience avec la délégation, le compte de service SQL Server nécessite des autorisations appropriées à la part qui tente d'accéder au nom de votre nom. Avez-vous ajusté ces autorisations? Je penserais que la lecture ne suffirait que d'abandon.