web-dev-qa-db-fra.com

Configurer une délégation non contrainte pour insert en vrac

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?

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.

12
Muh Fugen

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.

Solution 1 (compte personnel)

  1. Vérifiez que votre compte personnel Compte est autorisé à accéder au fichier sur la part du serveur de fichiers
    • Vos personnels Compte nécessite au moins les autorisations de lecture au niveau de l'autorisation d'actions ou dans la plupart des cas, vous pouvez voir que tout le monde a lu la permission.
    • Vos personnels Compte nécessite au moins des autorisations de lecture au niveau de l'autorisation du fichier
    • Vérifiez l'héritage de l'autorisation au niveau de fichier pour celui-ci
      • Redémarrez le serveur SQL après avoir modifié les autorisations de fichier ou cycle du service SQL Server.
    • Alternativement: Connectez-vous au serveur SQL avec Vos personnels Compte et connectez-vous au partage et ouvrez le fichier.
  2. Ouvrez SSMS avec Vos personnels Compte.
  3. Ouvrez une connexion à votre instance SQL Server avec authentification Windows.
    • Vérifiez que vous êtes connecté à votre instance avec le compte SQL Server Service avec le script que vous avez utilisé auparavant.
  4. Effectuer l'importation avec insert en vrac

Solution 2 (compte de service SQL Server)

  1. Vérifiez que le fichier SQL Server Service Le compte est autorisé à accéder au fichier sur la part du serveur de fichiers
    • le SQL Server Service Compte nécessite au moins les autorisations de lecture au niveau de l'autorisation d'actions ou dans la plupart des cas, vous pouvez voir que tout le monde a lu des autorisations.
    • le fichier SQL Server Service Compte nécessite au moins des autorisations de lecture au niveau de l'autorisation du fichier
    • Vérifiez l'héritage de l'autorisation au niveau de fichier pour celui-ci
      • Redémarrez le serveur SQL après avoir modifié les autorisations de fichier ou cycle du service SQL Server.
    • Sinon: Connectez-vous au serveur SQL avec le compte de service SQL Server et connectez-vous au partage et ouvrez le fichier.
  2. Ouvrez SSMS avec le service SQL Server Compte [.____]
    • Runas: votre_domain\ SQL_SERVER_SERVICE_Account
    • Fournir un mot de passe
  3. Ouvrez une connexion à votre serveur SQL avec authentification Windows. [.____]
    • Vérifiez que vous êtes connecté à votre instance avec le compte SQL Server Service avec le script que vous avez utilisé auparavant.
  4. Effectuer l'importation avec insert en vrac

Autorisations d'insertion en vrac

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)

1
John aka hot2use

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.

0
Chris Lumnah