web-dev-qa-db-fra.com

Impossible de charger en masse. Code d'erreur 5 du système d'exploitation (l'accès est refusé.)

Pour des raisons étranges, j'ai des problèmes pour exécuter une insertion en bloc.

BULK INSERT customer_stg
FROM 'C:\Users\Michael\workspace\pydb\data\andrew.out.txt'
WITH
(
    FIRSTROW=0,
    FIELDTERMINATOR='\t',
    ROWTERMINATOR='\n'
)

Je suis convaincu qu'après avoir lu ceci que j'ai correctement configuré mon rôle d'utilisateur, car il est indiqué ...

Les membres du rôle serveur fixe bulkadmin peuvent exécuter l'instruction BULK INSERT.

J'ai défini le Login Properties pour l'authentification Windows correctement (comme indiqué ci-dessous) .. pour accorder des autorisations sur l'ensemble du serveur sur bulkadmin

authentification Windows http://iforce.co.nz/i/daaqcasj.vo1.png

Et la commande EXEC sp_helpsrvrolemember 'bulkadmin' m'indique que les informations ci-dessus ont abouti et que l'utilisateur actuel Michael-PC\Michael dispose des autorisations bulkadmin.

bulkadmin http://iforce.co.nz/i/bou0uklk.wdj.png

Mais même si j'ai tout configuré correctement, autant que je sache, je reçois toujours l'erreur. l'exécution de l'insertion en bloc directement à partir de SQL Server Management Studio.

Msg 4861, niveau 16, état 1, ligne 2
Chargement en bloc impossible car le fichier "C:\Utilisateurs\Michael\espace de travail\pydb\data\andrew.out.txt" n'a pas pu être ouvert. Code d'erreur du système d'exploitation 5 (Accès refusé.).

ce qui n'a pas de sens parce qu'apparemment bulkadmins peut exécuter l'instruction, dois-je reconfigurer le fonctionnement de bulkadmin? (Je suis tellement perdu). Des idées sur la façon de résoudre ce problème?

22
Killrawr

Cette erreur apparaît lorsque vous utilisez l'authentification SQL Server et que SQL Server n'est pas autorisé à accéder au dossier de chargement en bloc.

Donc, donner l’accès du serveur SQL au dossier résoudra le problème .enter image description here

Voici comment procéder: Accédez au dossier clic droit -> propriétés -> onglet Sécurité -> Edition -> Ajouter (dans la nouvelle fenêtre) -> Avancé -> Rechercher maintenant. Sous la liste des utilisateurs dans les résultats de la recherche, recherchez quelque chose comme SQLServerMSSQLUser $ UserName $ SQLExpress et cliquez sur ok pour accéder à toutes les boîtes de dialogue ouvertes.

17
antew

Je ne pense pas que la réinstallation de SQL Server va résoudre ce problème, cela va juste faire perdre un peu de temps. 

  1. Confirmez que votre compte d'utilisateur a lu les privilèges du dossier en question.
  2. Utilisez un outil tel que Process Monitor pour voir quel utilisateur tente réellement d'accéder au fichier.
  3. Mon hypothèse est que ce n'est pas Michael-PC\Michael qui tente d'accéder au fichier, mais plutôt le compte de service SQL Server. Si tel est le cas, vous avez au moins trois options (mais probablement d'autres):

    une. Définissez le service SQL Server pour s'exécuter en tant que vous .
    b. Accordez au compte de service SQL Server un accès explicite à ce dossier .
    c. Placez les fichiers dans un endroit plus logique où SQL Server a accès ou peut être configuré pour y avoir accès (par exemple, C:\bulk\).

Je suggère ces choses en supposant qu'il s'agit d'un poste de travail local contenu. Lorsqu’il s’agit d’une machine de production, l’accès au système de fichiers local à partir de SQL Server pose assurément des problèmes de sécurité plus graves. Bien entendu, cela peut encore être largement atténué par l’utilisation de c. ci-dessus - et en ne donnant au compte de service qu’un accès aux dossiers souhaités être capable de toucher.

12
Aaron Bertrand

Essayez de donner aux dossiers contenant les autorisations de lecture CSV et Format de fichier pour l’utilisateur ‘MSSQLSERVER’ (ou l’utilisateur quelconque, le service SQL Server est défini sur Log On As in Windows Services )

3
j3rbrown

parfois, cela peut être un message d'erreur fictif, essayé d'ouvrir le fichier avec le même compte qu'il exécute le processus. J'avais le même problème dans mon environnement et quand j'ai ouvert le fichier (avec les mêmes informations d'identification exécutant le processus), il a été ajouté qu'il devait être associé à un programme connu. processus sans aucune erreur.

2
dianabeta
  1. Allez au début de l'exécution => services.msc => SQL SERVER (MSSQLSERVER) arrêtez le service 
  2. Faites un clic droit sur SQL SERVER (MSSQLSERVER) => propriétés => onglet LogOn => compte système local => OK
  3. Redémarrez le serveur SQL Management Studio.
2
Vinay Patel

J'ai eu le même problème SSIS 2012 et la solution consistait à utiliser l'authentification Windows. J'utilisais l'authentification SQL avec l'utilisateur sa.

2
alduar

1) Ouvrez SQL 2) Dans le Gestionnaire des tâches, vous pouvez vérifier quel compte exécute le code SQL - ce n’est probablement pas Michael-PC\Michael comme l’a écrit Jan.

Le compte qui exécute SQL doit avoir accès au dossier partagé.

1
md27

Assurez-vous que le fichier que vous utilisez ('C:\Users\Michael\workspace\pydb\data\andrew.out.txt') se trouve sur la machine serveur SQL et non sur la machine cliente exécutant MSSMS.

1
grunt

Je suis arrivé à une question similaire lorsque j'exécute l'insertion en bloc dans SSMS, mais cela a échoué et renvoyé avec "Code d'incident du système d'exploitation 5" lors de la conversion de la tâche en agent SQL Server. 

Après avoir parcouru de nombreuses solutions déjà publiées, cette solution a résolu mon problème en accordant à NT SERVER/SQLSERVERAGENT le droit de "contrôle total" sur le dossier source . J'espère que cela éclairera un peu la lumière sur ces personnes qui luttent encore avec ce problème. le message d'erreur. 

0
Xing.Shan