Étape de travail SQL exécutée en tant que compte SQL différent

11

Je suis curieux de savoir comment configurer une étape de travail SQL à exécuter en tant que compte de connexion SQL différent. Il semble que je dois configurer un nouveau compte proxy qui nécessite des informations d'identification existantes. Lorsque je crée un identifiant, ma seule option consiste à utiliser un identifiant de connexion Windows.

Le travail que j'essaie d'exécuter est ci-dessous. Il existe d'autres instructions supplémentaires, mais lorsque j'établis l'étape de travail à exécuter comme connexion SQL, elle échoue.

insert into [dbo].[TableA]
SELECT 
       ss.[Ref_ID]
      ,mm.[studentID]
      ,mm.[studentPersonID]
      ,mm.[studentFirstname]
  FROM [dbo].[TableB] mm
  left outer join [dbo].[TableC] ss on ss.parentPersonID=mm.parentPersonID and mm.studentPersonID = ss.studentPersonID
  where ss.Ref_ID is not null;

Lorsque cela est exécuté via une étape de travail SQL, il échoue.

Executed as user: an_admin_account. Access to the remote server is denied because the current security context is not trusted. [SQLSTATE 42000] (Error 15274).  The step failed.

Je ne sais pas pourquoi il essaie d'accéder à un serveur distant lorsque toutes ces tables existent sur la base de données locale.

Geoff Dawdy
la source
Une étape de travail SQL a déjà une connexion à l'instance SQL. Vous devez donc modifier le contexte de sécurité existant, plutôt que d'établir une nouvelle connexion avec un mot de passe. Si vous souhaitez créer une nouvelle connexion, vous pouvez utiliser une commande sqlcmd ou un script PowerShell, qui pourrait ensuite utiliser un identifiant et un mot de passe SQL comme paramètres dans le script. Mais vous devez considérer ce que vous devez faire et si un proc stocké avec son propre contexte suffira.
Rob Farley

Réponses:

15

Si vous configurez une étape de travail T-SQL, accédez à la page Avancé et configurez "Exécuter en tant qu'utilisateur" sur la connexion de votre choix. entrez la description de l'image ici

Si vous travaillez avec d'autres types d'étapes de travail comme PowerShell, il faudra configurer un compte proxy.


la source
J'ai essayé ceci mais maintenant le travail échoue en disant "L'accès au serveur distant est refusé car le contexte de sécurité actuel n'est pas approuvé". Cependant, si j'exécute le script en étant connecté en tant qu'utilisateur, il est capable de l'exécuter très bien. Il n'y a pas de serveur lié dans la requête, donc je ne comprends pas pourquoi il fait référence à un serveur distant. Des pensées?
Geoff Dawdy
Si vous pouviez ajouter à votre question ce que le travail essaie de faire et une erreur exacte nous aiderait à vous indiquer une solution.
Dans mon cas, il a ignoré le paramètre. Utilisation de SQL 2012.
Miguel Sv
1

Utilisez EXECUTE ASau début ou créez une procédure stockée qui s'exécute dans un contexte particulier.

Rob Farley
la source
Cela pourrait être mauvais. Si vous souhaitez appeler une procédure stockée avec un utilisateur restreint, cela pourrait RÉVERTIR les privilèges d'administrateur système (ou propriétaire du travail). Une solution de contournement consisterait à utiliser un cookie.
Jens W.
Une procédure stockée qui a été créée à l'aide de l'option EXECUTE AS gèrera l'escalade de privilèges et ne permettra pas à quelqu'un de changer en cours de route. S'il n'y a pas de proc stocké disponible, emprunter l'identité d'une connexion différente fera l'affaire, comme avec EXECUTE AS au début du script.
Rob Farley