Quelles sont les autorisations nécessaires à l'instruction bulk insert en SQL Serveur à partir d'un partage réseau avec l'authentification Windows?
Je suis en train de travailler sur une application qui s'en vrac charge les données dans une base de données SQL Server 2008. Il écrit un fichier CSV vers un partage réseau, puis appelle une procédure stockée qui contient une commande d'INSERTION en bloc.
Je suis la migration de l'application de ce qui équivaut à un nouveau réseau. Dans ce nouveau monde en vrac insertion échoue avec ce message d'erreur:
Msg 4861, Level 16, State 1, Line 1
Cannot bulk load because the file "\\myserver\share\subfolder\filename" could not be opened. Operating system error code 5(failed to retrieve text for this error. Reason: 15105).
- Je me connecter à la base de données à l'aide de l'Authentification Windows, en utilisant le même compte qui a écrit le fichier. Le fichier et le dossier dans lequel il se trouve, subvention de lire et de modifier les droits d'accès à mon compte d'utilisateur et le serveur de base de données du compte de service de domaine. Ce compte de service a apparemment la délégation contrainte, et qui est mentionné sur MSDN. Toujours pas bon. Si je le connecte à l'aide d'un compte SQL Server, puis en vrac insertion réussit, mais nous essayons de nous en tenir exclusivement à l'Authentification Windows.
Quelqu'un avez une poignée sur ce qui doit être fait pour faire ce travail? Comment fonctionne exactement SQL Serveur aller sur l'accès aux données sur les partages réseau, sautillant entre son compte de service et de celui de l'utilisateur connecté? Je sais que je peux bulk insert dans une situation similaire dans notre infrastructure actuelle, mais il est tellement crufty avec l'âge qu'il serait difficile de suivre ce qui a été fait pour permettre cela dans le passé.
OriginalL'auteur RobH | 2012-06-27
Vous devez vous connecter pour publier un commentaire.
Récemment, nous avons eu ce problème pour un certain nombre de nos Développeurs. Je suis venu avec un certain nombre de moyens pour permettre de tester des insertions.
Notre préférence a été d'utiliser un compte de service SQL. Nous avons mis le serveur SQL server et l'agent SQL à exécuter en tant que compte de service et a ensuite permis à l'équipe de développement pour déclencher les travaux de l'agent. Le compte de service a reçu l'autorisation de l'UNC actions et tout a fonctionné correctement. Notez que le compte de service toujours été fine de l'exécution de ces travaux de l'agent (en supposant UNC autorisations sont définies). C'est les Devs en train de tester, qui va venir à travers ces questions.
Une autre méthode consiste à créer un partage sur le serveur SQL server lui-même et le point d'insertion en bloc chemin d'accès au répertoire local. Ces erreurs semblent se produisent uniquement lors de l'accès à des chemins d'accès UNC. Peu importe si le chemin d'accès UNC dispose des autorisations appropriées pour vous permettre d'accéder. Pour l'exemple nous allons créer
C:\test\
un dossier sur le serveur SQL server lui-même et d'autorisation afin de permettre à un dev de test de chute de fichiers. Ces derniers sont alors appelés via la commande bulk insert.Une commande peut être exécutée à l'encontre de maître pour permettre une connexion SQL autorisation de groupe à l'instruction bulk insert. C'est en tant que ci-dessous.
OriginalL'auteur n00borama
Adam Saxton du blog (sur Kerberos et des insertions à partir d'un partage), doit être lu: http://blogs.msdn.com/b/psssql/archive/2012/09/07/bulk-insert-and-kerberos.aspx. Adam propose deux approches:
Permettre à la délégation contrainte pour la machine (par opposition à la sqlservr.exe de démarrage) compte ou utiliser un compte de connexion SQL Server. Adam mentionne deux autres approches (dont il n'est pas recommandé).
Un côté, la deuxième moitié de l'OP du message "(pas réussi à récupérer le texte de cette erreur. Raison: 15105)" peuvent être liés à un compte de démarrage SQL Server dépourvues de droits documentée dans SQL Server "Configurer les Comptes de Service Windows et Permissions", comme SeAssignPrimaryTokenPrivilege.
Je pense que la meilleure solution pour générer (télécharger) sur le fichier pour le SQL boîte de procéder à l'importation. Cela évite le double saut problème. Plus les données n'ont pas à aller sur le réseau, juste pour être lu pour l'insertion.
OriginalL'auteur Bill
Avez-vous jamais résoudre ce problème? J'ai récemment eu un problème similaire et a découvert que la meilleure façon de le résoudre est d'utiliser une connexion SQL.
D'abord, après avoir lu les notes ici j'ai pensé que si je viens a accordé des autorisations de lecture pour le compte Windows avec lequel j'ai la connexion au Serveur SQL qui serait d'accord, mais même quand j'ai accès en lecture
Everyone
, je n'ai toujours pas lu dans le fichier.Je crois que la raison est quelque chose à faire avec SQL Server de l'identification de l'utilisateur de windows et de tenter d'accéder au partage UNC, qui est la délégation et qui n'est pas autorisé, sauf si explicitement activé. Il y a quelques notes ici qui peuvent aider. C'est la délégation contrainte dont vous parlez et je ne pouvais pas le faire fonctionner!!!!
Ligne du bas: j'ai simplement utilisé une Connexion SQL et fait en sorte que le Processus SQL Server compte a les autorisations de lecture sur l'action (par l'octroi de lire à
Everyone
dans mon cas) et cela a fonctionné.J'ai eu le même problème. J'ai accordé la permission à son compte et il ne fonctionne toujours pas. En fin de compte, j'ai dû utiliser une connexion SQL que je n'ai pas envie de passer des heures et des heures sur quelque chose qui n'a pas l'air de fonctionner comme annoncé. Je suis content qu'il n'est plus un problème pour vous! 😉
Salut, comment accorder ces autorisations ?
OriginalL'auteur Tom Chantler
Afin d'insertion en bloc avec les utilisateurs de AD, le service SQL elle-même doit être en cours d'exécution comme un utilisateur de domaine et doit avoir l'ANNONCE d'une autorisation pour être en mesure de déléguer l'authentification. Même si vous voulez exécuter des serveurs liés avec les utilisateurs de ad. Voici le lien pour les AD et les serveurs liés, mais l'autorisation sont les mêmes.
Les Serveurs liés et Active Directory
OriginalL'auteur Dan