Question

Nous allons avoir du mal à comprendre comment ces informations d'identification des objets travail. En fait, ils ne fonctionnent pas comment nous nous attendions à travailler. Voici une explication de la question actuelle.

Nous avons 2 serveurs qui a besoin de parler entre eux par webservices. La première (appelons-le Server01) a un service Windows en cours d'exécution comme le compte NetworkService. L'autre a ReportingServices en cours d'exécution Server02 avec IIS 6.0. Le service Windows sur tente d'DOMAIN\MachineName$ utiliser le ReportingServices WebService pour <=> générer des rapports et les envoyer par e-mail.

Alors, voici ce que nous avons essayé jusqu'à présent.

Réglage des informations d'identification lors de l'exécution ( Cela fonctionne parfaitement bien ):

 rs.Credentials = new NetworkCredentials("user", "pass", "domain");

Maintenant, si nous pouvions utiliser un utilisateur générique seraient tous bien, mais ... nous ne sommes pas autorisés à. Donc, nous essayons d'utiliser les DefaultCredetials ou DefaultNetworkCredentials et le transmettre à la RS Webservice:

rs.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials

Ou:

rs.Credentials = System.Net.CredentialCache.DefaultCredentials

De toute façon ne fonctionnera pas. Nous sommes toujours obtenir 401 Unauthrorized de IIS. Maintenant, ce que nous savons est que si nous voulons donner accès à une ressource connecté en tant que NetworkService, nous devons accorder à <=> ( http://msdn.microsoft.com/en-us/library/ms998320.aspx ):

  

Octroi de l'accès à un serveur SQL distant

     

Si vous accédez à une base de données sur un autre serveur dans le même domaine (ou dans un domaine de confiance), les informations d'identification de réseau de compte de service réseau sont utilisés pour authentifier auprès de la base de données. Les informations d'identification de compte de service réseau sont de la forme NomDomaine \ AspNetServer $, où DomainName est le domaine du serveur ASP.NET et AspNetServer est le nom de votre serveur Web.

     

Par exemple, si votre application ASP.NET fonctionne sur un serveur nommé SVR1 dans le domaine CONTOSO, le serveur SQL voit une demande d'accès à la base de données CONTOSO \ SVR1 $.

Nous avons supposé qu'accorder l'accès de la même manière avec IIS fonctionnerait. Cependant, il ne fonctionne pas. Ou au moins, quelque chose est mal réglé pour qu'il authentifie correctement.

Alors, voici quelques questions:

  1. Nous avons lu à propos de "Usurpation utilisateurs" quelque part, avons-nous besoin de mettre cela quelque part dans le service Windows

  2. Est-il possible d'accorder l'accès au NetworkService compte intégré à un serveur IIS à distance?

Merci d'avoir lu!

Était-ce utile?

La solution

Tous les détails dont vous avez besoin sont inclus dans cet article très ancien,

http://msdn.microsoft.com/en-us/library /ms998351.aspx

En bref, quand vous trouvez qu'il est source de confusion pour résoudre les problèmes comme celui-ci, vous devez d'abord examiner les détails techniques soigneusement derrière ASP.NET usurpation d'identité.

Autres conseils

Voici quelques choses que vous pourriez vérifier: - définir un SPN (nom principal de service) pour le service de rapports; vous pouvez trouver de bons exemples dans google; - délégation Autoriser (de ClientCredentials.Windows.AllowImpersonationLevel)

Le problème est que vous ne vous authentifier auprès IIS ou, à défaut d'authentifier auprès SSRS? Le domaine \ MachineName compte $ pourrait devoir accorder la permission à SSRS pour exécuter le rapport que vous essayez d'automatiser.

SSRS fait habituellement un très bon travail d'obtenir IIS configurés correctement, vous ne devriez pas avoir besoin de jouer avec ces paramètres. J'ai vérifié mon installation (qui est SSRS 2005, les choses ont peut-être travaillé différemment dans SSRS 2000 et vous ne dites pas la version que vous utilisez), et il est configuré pour utiliser l'authentification Windows et a l'usurpation d'identité est activée. Cela signifie IIS devrait en principe être simplement authentifier vos informations d'identification (un nom d'utilisateur valider / mot de passe), ne pas autoriser (déterminer si l'utilisateur a l'autorisation d'exécuter le rapport en question). IIS passe ensuite les informations d'identification à SSRS, qui a ses propres paramètres pour déterminer quels comptes ont l'autorisation d'afficher des rapports.

Vous pouvez également automatiser l'envoi de rapports sur une base régulière directement dans SSRS, de sorte que vous ne pouvez pas besoin du service Windows du tout si votre programmation est assez basique (à savoir, quotidienne, hebdomadaire, etc.).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top