Un appel à la fonction d’API AuthzInitializeContextFromSid échoue lors de la remise d’un abonnement par e-mail dans SQL Server Reporting Services

Cet article vous aide à résoudre le problème que vous pouvez rencontrer avec l’appel AuthzInitializeContextFromSid de fonction API lors de la remise d’un abonnement par courrier électronique.

Version du produit d’origine : SQL Server
Numéro de la base de connaissances d’origine : 842423

Résumé

Cet article décrit la cause et les solutions possibles à un problème qui peut se produire dans Microsoft SQL Server Reporting Services et Power BI Report Server, dans SQL Server Reporting Services lorsque vous essayez de créer et de traiter un abonnement par courrier électronique à l’aide d’un compte d’utilisateur de domaine. Le problème se produit lorsqu’un appel de fonction API AuthzInitializeContextFromSid dans le fichier Authz.dll échoue.

Remarque

Ce problème ne se produit pas dans Windows Server 2008.

Les résolutions abordées dans cet article sont les suivantes :

Comment configurer le service Windows Reporting Services pour qu’il s’exécute sous un compte d’utilisateur de domaine. Si cela ne résout pas le problème, vous devez également utiliser l’une des méthodes suivantes :

  • Accordez l’autorisation de lecture pour le compte d’utilisateur de domaine sur tous les comptes d’utilisateur et tous les groupes du domaine.
  • Accordez l’autorisation de lecture pour le compte d’utilisateur de domaine spécifiquement sur un compte d’utilisateur ou sur un groupe dont l’utilisateur est membre.

Introduction

Cet article décrit un problème associé à l’appel AuthzInitializeContextFromSid de fonction API qui se produit lors de la remise d’un abonnement par courrier électronique. Cet article décrit également certaines solutions possibles au problème.

Informations détaillées

Lors de la remise d’un e-mail pour un abonnement par courrier électronique, le programme Reporting Services peut appeler la AuthzInitializeContextFromSid fonction API définie dans le fichier Authz.dll. Le programme Reporting Services peut appeler la AuthzInitializeContextFromSid fonction API si l’une des conditions suivantes est remplie :

  • Un rapport est incorporé dans l’e-mail.
  • Un rapport est joint à l’e-mail.

Si vous créez et traitez l’abonnement par courrier électronique à l’aide d’un compte d’utilisateur de domaine différent du compte d’ouverture de session du service Windows Reporting Services, l’appel de fonction AuthzInitializeContextFromSid API peut échouer.

Si l’appel de fonction échoue, vous devrez peut-être configurer les paramètres sur le domaine de l’ordinateur qui exécute Reporting Services pour résoudre le problème.

Le programme Reporting Services appelle la AuthzInitializeContextFromSid fonction API pour vérifier si le compte d’utilisateur utilisé pour créer l’abonnement dispose toujours des autorisations appropriées pour afficher le rapport. Cette vérification n’est pas nécessaire lorsque l’e-mail contient uniquement un lien, une URL, vers le rapport, car Reporting Services effectue la vérification des autorisations utilisateur lorsque l’utilisateur tente d’accéder au rapport à l’aide de l’URL.

L’appel AuthzInitializeContextFromSid de fonction API lit l’attribut tokenGroupsGlobalAndUniversal (TGGAU) du numéro d’identification de sécurité (SID) spécifié dans l’appel de fonction AuthzInitializeContextFromSid API pour déterminer les informations d’appartenance au groupe Windows pour l’utilisateur actuel. Reporting Services appelle le AuthzInitializeContextFromSid Fonction d’API à l’aide du contexte de sécurité du compte d’ouverture de session de service du service Windows Reporting Services. Par conséquent, le compte d’utilisateur que vous utilisez pour exécuter le service Windows Reporting Services doit disposer des autorisations suffisantes pour lire l’attribut TGGAU sur le compte d’utilisateur utilisé pour créer et traiter les abonnements de messagerie électronique.

Si l’ordinateur n’est pas configuré correctement pour accéder à et exécuter l’appel AuthzInitializeContextFromSid de fonction API dans le fichier Authz.dll, vous pouvez recevoir un message d’erreur. En outre, un message d’erreur peut être écrit dans le fichier journal Reporting Services. Pour déterminer l’erreur qui s’est produite, procédez comme suit :

  1. Ouvrez le fichier timestamp.log ReportServerService_. Recherchez le mot authz.

    Remarque

    Par défaut, le fichier ReportServerService_ Timestamp.log se trouve dans .<Installation drive>:\Program Files\Microsoft SQL Server\<InstanceOfSQLServer>\Reporting Services\Logfiles folder

    Dans le fichier ReportServerService_ Timestamp.log, vous pouvez remarquer des messages d’erreur similaires aux suivants :

    • Message d’erreur 1

      ReportingServicesService !library !718 !06/16/2004-00 :00 :03 :: e ERROR : Throwing Microsoft.ReportingServices.Diagnostics.Utilities.ServerConfigurationErrorException : Le serveur de rapports a rencontré une erreur de configuration ; plus d’informations dans les fichiers journaux, AuthzInitializeContextFromSid : Win32 error : 5 ; raison possible : le compte de service n’a pas de droits pour case activée les SID d’utilisateur de domaine. Informations : Microsoft.ReportingServices.Diagnostics.Utilities.ServerConfigurationErrorException : Le serveur de rapports a rencontré une erreur de configuration ; plus de détails dans les fichiers journaux.

    • Message d’erreur 2

      ReportingServicesService !library !7e4 !05/24/2004-10 :00 :22 :: e ERROR : Throwing Microsoft.ReportingServices.Diagnostics.Utilities.ServerConfigurationErrorException : Le serveur de rapports a rencontré une erreur de configuration ; plus d’informations dans les fichiers journaux, AuthzInitializeContextFromSid : Erreur Win32 : 1722 ; Informations : Microsoft.ReportingServices.Diagnostics.Utilities.ServerConfigurationErrorException : Le serveur de rapports a rencontré une erreur de configuration ; plus de détails dans les fichiers journaux.

  2. Modifiez l’abonnement de messagerie à l’origine du message d’erreur. N’incorporez pas ou n’joignez pas de rapport dans l’e-mail. Utilisez un lien vers le rapport. Après avoir traité l’abonnement modifié, si vous ne recevez pas de message d’erreur, vous pouvez confirmer que l’erreur s’est produite car l’appel de la AuthzInitializeContextFromSid fonction API a échoué.

Pour résoudre ce problème, appliquez l’une des méthodes suivantes :

Vous pouvez utiliser la méthode 1 si les conditions suivantes sont remplies :

  • Le service Windows Reporting Services s’exécute sous le compte Service réseau.
  • Vous ne souhaitez pas modifier le compte sous lequel s’exécute le service Windows Reporting Services. Vous pouvez utiliser la méthode 2 pour une résolution générale. Si la méthode 2 ne résout pas le problème, utilisez la méthode 3.

Méthode 1

  1. Ajoutez le compte Windows au groupe Accès de compatibilité pré-Windows 2000 à l’aide du composant logiciel enfichable Utilisateurs et ordinateurs Active Directory.
  2. Ajoutez le compte Windows au groupe Accès d’autorisation Windows à l’aide du composant logiciel enfichable Utilisateurs et ordinateurs Active Directory.
  3. Redémarrez l’ordinateur qui exécute Reporting Services.

Remarque

  • Le compte Windows à l’étape 1 et à l’étape 2 est le compte que vous utilisez pour exécuter Reporting Services.
  • Après avoir ajouté le compte à ces groupes, il est garanti que Reporting Services pouvez accéder à l’attribut TGGAU.
  • Cette méthode ne vous oblige pas à modifier les autorisations sur un utilisateur ou un groupe.

Méthode 2

Configurez le service Windows Reporting Services pour qu’il s’exécute sous un compte d’utilisateur de domaine.

Remarque

Un message d’erreur peut être écrit dans le journal de trace Reporting Services lorsque vous essayez de modifier le compte d’utilisateur utilisé pour exécuter le service Windows Reporting Services.

Méthode 3

Configurez les paramètres sur le domaine de l’ordinateur qui exécute Reporting Services. Pour cela, appliquez l’une des méthodes suivantes :

Accorder l’autorisation de lecture sur tous les comptes d’utilisateur et sur tous les groupes du domaine

Vous pouvez résoudre le problème en accordant des autorisations de lecture au compte d’utilisateur que vous utilisez pour exécuter le service Windows Reporting Services afin de lire l’attribut TGGAU sur tous les comptes d’utilisateur et tous les groupes du domaine. Pour ce faire, utilisez les informations de l’une des sections suivantes, en fonction du système d’exploitation que vous utilisez.

Pour un domaine Microsoft Windows 2000

Si le domaine est en mode d’accès de compatibilité antérieur à Windows 2000, le groupe TOUT LE MONDE dispose de l’autorisation de lecture sur l’attribut TGGAU pour tous les comptes d’utilisateur et tous les groupes. Par conséquent, le compte d’utilisateur que vous utilisez pour exécuter le service Windows Reporting Services a accès à l’attribut TGGAU sur le compte d’utilisateur que Reporting Services utilise pour créer l’abonnement de messagerie.

Si le domaine n’est pas en mode d’accès de compatibilité pré-Windows 2000, également appelé mode natif, vous devez accorder l’autorisation de lecture pour le compte d’utilisateur utilisé pour exécuter le service Windows Reporting Services afin qu’il puisse lire l’attribut TGGAU sur le compte d’utilisateur que Reporting Services utilise pour créer l’abonnement. Vous pouvez créer un groupe local de domaine qui simule le groupe de compatibilité antérieur à Windows 2000, ajouter le compte d’utilisateur que vous utilisez pour exécuter le service Windows Reporting Services à ce groupe, puis accorder des autorisations de lecture pour le groupe sur tous les comptes d’utilisateur. Pour cela, procédez comme suit :

Remarque

Vous devez disposer d’autorisations d’administrateur sur le domaine pour suivre ces étapes.

  1. Cliquez sur Démarrer, pointez sur Programmes, puis sur Outils d’administration, et cliquez sur Utilisateurs et ordinateurs Active Directory.
  2. Dans la fenêtre Utilisateurs et ordinateurs Active Directory, dans le volet gauche, développez DomainName.
  3. Cliquez avec le bouton droit sur Utilisateurs, pointez sur Nouveau, puis cliquez sur Grouper.
  4. Dans la boîte de dialogue Nouvel objet - Groupe , tapez MyAuthZGrp dans la zone Nom du groupe .
  5. Sous Étendue du groupe, sélectionnez l’option Domaine local , puis cliquez sur OK. Le groupe MyAuthZGrp peut apparaître dans le volet droit.
  6. Dans le volet gauche de la fenêtre Utilisateurs et ordinateurs Active Directory, cliquez avec le bouton droit sur le dossier Utilisateurs, puis cliquez sur Propriétés.
  7. Dans la boîte de dialogue Propriétés des utilisateurs , cliquez sur l’onglet Sécurité .
  8. Cliquez sur Ajouter.
  9. Dans la boîte de dialogue Sélectionner des utilisateurs, des ordinateurs ou des groupes , sélectionnez le groupe que vous avez créé à l’étape 5.
  10. Cliquez sur Ajouter, puis sur OK.
  11. Accordez l’autorisation lecture au compte d’utilisateur que vous avez sélectionné à l’étape 9.

Pour un domaine Microsoft Windows Server 2003

Si le domaine se trouve à un niveau fonctionnel Windows 2000, le groupe EVERYONE dispose des autorisations de lecture sur l’attribut TGGAU de tous les comptes et groupes d’utilisateurs. Par conséquent, le compte de service Reporting Service dispose des autorisations appropriées sur le compte d’utilisateur qui a créé l’abonnement de messagerie.

Si le domaine se trouve à un niveau fonctionnel Windows Server 2003, le groupe d’accès d’autorisation Windows (groupe WAA) dispose d’autorisations de lecture sur l’attribut TGGAU de tous les comptes et groupes d’utilisateurs. Par conséquent, si vous ajoutez le compte de service Reporting Services au groupe WAA, le compte de service Reporting Services dispose d’autorisations de lecture sur l’attribut TGGAU des comptes d’utilisateur qui peuvent créer des abonnements par courrier électronique.

Pour ajouter le compte de service Reporting Services au groupe WAA, procédez comme suit :

  1. Sur le contrôleur de domaine, cliquez sur Démarrer, pointez sur Programmes, sur Outils d’administration, puis cliquez sur Utilisateurs et ordinateurs Active Directory.
  2. Dans la fenêtre Utilisateurs et ordinateurs Active Directory, développez DomainName, puis cliquez sur Utilisateurs ou une autre unité d’organization appropriée.
  3. Double-cliquez sur le compte de service Reporting Services.
  4. Dans la boîte de dialogue Propriétés , cliquez sur l’onglet Membre de .
  5. Sous l’onglet Membre de , cliquez sur Ajouter.
  6. Dans la boîte de dialogue Sélectionner des groupes , tapez Groupe d’accès d’autorisation Windows sous Entrez les noms d’objets à sélectionner, puis cliquez sur OK.
  7. Redémarrez le service Reporting Services.

Accorder des autorisations de lecture à un compte d’utilisateur ou à un groupe spécifique pouvant créer un abonnement Reporting Services

Vous ne souhaiterez peut-être pas accorder d’autorisations de lecture à l’attribut TGGAU de tous les comptes d’utilisateur et groupes. Au lieu de cela, vous pouvez accorder des autorisations de lecture à l’attribut TGGAU d’un compte d’utilisateur ou d’un groupe spécifique.

Remarque

  • Le compte d’utilisateur que Reporting Services utilise pour exécuter l’abonnement est le compte d’utilisateur Windows qui se connecte au Gestionnaire de rapports lors de la création de l’abonnement.
  • Ces étapes ne sont pas nécessaires si le compte de service Reporting Services se trouve dans le groupe WAA.
  • Vous devez suivre ces étapes pour chaque compte d’utilisateur ou groupe qui peut créer un abonnement par courrier électronique dans Reporting Services.

Pour accorder des autorisations de lecture à l’attribut TGGAU d’un compte d’utilisateur ou d’un groupe spécifique, procédez comme suit :

  1. Sur un contrôleur de domaine, cliquez sur Démarrer, pointez sur Programmes, sur Outils d’administration, puis cliquez sur Utilisateurs et ordinateurs Active Directory.
  2. Dans le menu Affichage , vérifiez que l’élément Fonctionnalités avancées est sélectionné.
  3. Double-cliquez sur le compte d’utilisateur ou le groupe qui peut créer un abonnement Reporting Services.
  4. Dans la boîte de dialogue Propriétés, cliquez sur l'onglet Sécurité.
  5. Sous l’onglet Sécurité, cliquez sur Ajouter.
  6. Dans la boîte de dialogue Sélectionner des utilisateurs, des ordinateurs ou des groupes, tapez le compte de service Reporting Services sous Entrez les noms d’objets à sélectionner, puis cliquez sur OK.
  7. Dans la boîte de dialogue Propriétés , cliquez sur le compte d’utilisateur que vous avez ajouté à l’étape 6 sous Noms de groupe ou d’utilisateur.
  8. Sous Autorisations pourUtilisateur, sélectionnez la zone Autoriser case activée en regard de l’autorisation Lecture, puis cliquez sur OK.

Remarque

Les modifications peuvent ne pas prendre effet immédiatement.

Comment configurer les paramètres de domaine sur l’ordinateur

La configuration du domaine dépend du mode d’opération du domaine Microsoft Windows. En outre, vous devez activer les fonctionnalités avancées sur le domaine Windows. Pour rechercher le mode d’opération de domaine sur le contrôleur de domaine et activer les fonctionnalités avancées, procédez comme suit :

  1. Cliquez sur Démarrer, pointez sur Programmes, puis sur Outils d’administration, et cliquez sur Utilisateurs et ordinateurs Active Directory.
  2. Dans la fenêtre Utilisateurs et ordinateurs Active Directory, dans le volet gauche, cliquez avec le bouton droit sur DomainName, puis cliquez sur Propriétés.
  3. Dans la boîte de dialoguePropriétés ****DomainName, consultez la zone de texte Mode d’opération du domaine sous l’onglet Général .

La zone de texte Mode d’opération du domaine indique le mode d’opération de domaine que le domaine utilise actuellement. 4. Dans le volet gauche de la fenêtre Utilisateurs et ordinateurs Active Directory, cliquez sur domainName. 5. Dans le menu Affichage , cliquez sur Fonctionnalités avancées. Pour plus d’informations sur les API qui nécessitent l’accès à l’autorisation sur les comptes d’utilisateur, consultez Certaines applications et API nécessitent l’accès aux informations d’autorisation sur les objets de compte.