Insertion en masse via le réseau

13

Quelqu'un peut-il m'aider?

BULK INSERT DATABESE01.dbo.TABLE01
FROM '\\COMPUTER01\FOLDER01\TextFile.txt'
WITH
(
    FIELDTERMINATOR = ' ',
    rowterminator = '\n',
    tablock
)

L'erreur indique, impossible d'ouvrir:

Impossible d'insérer en bloc car le fichier '\ SERVERNAME \ FOLDERNAME \ textFile.txt' n'a pas pu être ouvert. Code d'erreur 5 du système d'exploitation (l'accès est refusé.)

Le chemin se trouve sur un autre ordinateur du réseau.

Jonas Ivy V. Imperial
la source
8
Le compte sous lequel SQL Server s'exécute est-il autorisé à accéder '\\COMPUTER01\FOLDER01\TextFile.txt'? Notez que le compte sera généralement différent de votre compte.
Damien_The_Unbeliever
3
Pouvez-vous également ajouter l'erreur exacte que vous obtenez?
ypercubeᵀᴹ
en plus de @Damien_The_Unbeliever: "Pour spécifier un fichier de données partagé, utilisez son nom de convention de dénomination universelle (UNC), qui prend la forme générale, \\ Servername \ Sharename \ Path \ Filename"
JoseTeixeira
@ypercube - Impossible d'insérer en bloc car le fichier '\\ SERVERNAME \ FOLDERNAME \ textFile.txt' n'a pas pu être ouvert. Code d'erreur 5 du système d'exploitation (l'accès est refusé.). merci monsieur
Jonas Ivy V. Imperial
J'ai le même problème en utilisant le même domaine et le même domaine (code d'erreur 5 du système d'exploitation (l'accès est refusé.)). Fait intéressant, si j'utilise XP_CMDSHELL pour tester si le fichier existe ou si je peux même déplacer le fichier, mais l'insertion en bloc renvoie l'accès refusé. Le compte de service SQL et mon compte Windows ont tous deux des autorisations sur le dossier.

Réponses:

14

Je vais faire un acte de foi et supposer que vous vous connectez à SQL Server à l'aide de l'authentification Windows. Dans un tel cas, vous avez un double saut Kerberos: un saut est votre application cliente se connectant à SQL Server, un deuxième saut est le SQL Server se connectant à la télécommande \\COMPUTER01. Un tel double saut relève des restrictions de la délégation contrainte et vous finissez par accéder au partage en tant que connexion anonyme et donc accès refusé.

Pour résoudre le problème, vous devez activer la délégation contrainte pour le compte de service SQL Server. Ce blog How To: SQL Server Bulk Insert with Constrained Délégation (Access is Denied) a un exemple de la façon de le faire, et j'espère vraiment que l'étape sur la façon `` d'activer la délégation sans contrainte '' n'est qu'une faute de frappe, car la délégation sans contrainte est tout simplement le mal.

Dans le cas où j'ai sauté le pistolet et que vous vous connectez à SQL Server à l'aide de l'authentification SQL, vous devrez créer des informations d'identification pour votre connexion SQL et l'utiliser pour accéder aux ressources réseau. Tu vois CREATE CREDENTIAL.

Remus Rusanu
la source
1

Sql Server a tenté d'ouvrir le fichier, le serveur de fichiers lui a dit "Accès refusé" car le compte sous lequel SQL Server s'exécute n'a pas l'autorisation d'ouvrir le fichier. Modifiez les paramètres de sécurité du fichier en conséquence et cela fonctionnera.

TomTom
la source
1

Je voudrais exécuter le script sous une connexion SQL (avec l'autorisation bulkadmin) et laisser l'autorisation sur le dossier réseau s'authentifier auprès du compte de service SQL ou du compte de l'agent SQL Server.

Cozzaro Nero
la source
-2

Je vais vous dire ce qui fonctionne pour moi chaque fois que je reçois ce message. j'ouvre le fichier csv sous forme de texte dans un bloc-notes et supprime toutes les lignes d'espace dans le fichier, je ne peux pas voir ces lignes vides dans le fichier excel. Habituellement, c'est juste la dernière ligne qui semble apparaître même si son vide

Dimius
la source
Êtes-vous sûr que c'est la même erreur?
dezso
Cela n'a rien à voir avec les erreurs d'accès refusé. Cela corrige uniquement les erreurs de format de fichier.
Julien Vavasseur