BOGUE : Vous pouvez recevoir une erreur « Accès refusé » message lorsqu’une requête appelle une étendue les procédure stockée après la mise à niveau à partir de SQL Server 2000 vers SQL Server 2000 Service Pack 4


Important Cet article contient des informations sur la façon de modifier le Registre. Assurez-vous que vous sauvegardez le Registre avant de le modifier. Assurez-vous que vous savez comment restaurer le Registre si un problème survient. Pour plus d’informations sur la façon de sauvegarder, restaurer et modifier le Registre, cliquez sur le numéro ci-dessous pour afficher l’article correspondant dans la Base de connaissances Microsoft :
256986 description du Registre Microsoft Windows

Symptômes


Une fois que vous mettez à niveau un ordinateur fonctionnant sous Microsoft SQL Server 2000 pour Microsoft SQL Server 2000 Service Pack 4 (SP4), une requête SQL Server qui appelle une procédure stockée étendue de Registre peut échouer et le message d’erreur suivant :
L'accès est refusé.
Vous recevez le message d’erreur lorsque vous utilisez l’une des étendues de procédures stockées dans la liste suivante du Registre :
  • xp_regread
  • xp_instance_regread
  • xp_regenumkeys
  • xp_instance_regenumkeys
  • xp_regenumvalues
  • xp_instance_regenumvalues
  • xp_regwrite
  • xp_instance_regwrite
  • xp_regaddmultistring
  • xp_instance_regaddmultistring
  • xp_regremovemultistring
  • xp_instance_regremovemultistring
  • xp_regdeletevalue
  • xp_instance_regdeletevalue
  • xp_regdeletekey
  • xp_instance_regdeletekey

Cause


Ce problème se produit car SQL Server 2000 SP4 met en œuvre une restriction sur les chemins d’accès de Registre étendues du Registre peuvent accéder à des procédures stockées. Lorsqu’une requête appelle une procédure stockée étendue de Registre, le Registre de la procédure stockée étendu examine la sous-clé de Registre demandé par rapport à une liste de contrôle des ruches de Registre. Si la sous-clé de Registre que la requête n’est pas dans la liste de contrôle, le message d’erreur suivant s’affiche :
« Accès refusé ».
Ce message d’erreur n’a rien à voir avec les autorisations du compte d’utilisateur SQL Server dans le cadre de laquelle l’une de ces Registre des procédures stockées étendues est appelée. Le message d’erreur se produit même si l’utilisateur dispose des autorisations administrateur.


Remarque Lorsque vous recevez le message d’erreur, le Registre procédure stockée n’étendue renvoie aucun résultat.

Résolution


Avertissement Des problèmes graves peuvent survenir si vous modifiez le Registre incorrectement à l’aide de l’Éditeur du Registre ou en utilisant une autre méthode. Ces problèmes peuvent nécessiter que vous réinstalliez le système d’exploitation. Microsoft ne peut pas garantir que ces problèmes puissent être résolus. Modifiez le Registre à vos risques et périls.

Avertissement Le Registre des procédures stockées étendu ne sont pas documenté et sont sujets à modification. Par conséquent, nous ne recommandons pas appeler ces procédures dans votre code client. Des implémentations ultérieures de ces procédures ne peuvent pas être pris en charge. En outre, il n’existe aucune garantie que les implémentations précédentes continueront à être pris en charge dans les versions ultérieures de SQL Server.

Pour résoudre ce problème, modifiez la clé de Registre qui contrôle les procédures d’accès au Registre étendu stockée. La liste de contrôle se trouve dans le Registre sous la sous-clé MSSQLServer . Pour une instance par défaut de SQL Server 2000, recherchez la sous-clé suivante dans le Registre :
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\ExtendedProcedures
Remarque Cette clé de Registre n’est pas créée lorsque vous appliquez le Service Pack 4 de SQL Server 2000 vers une instance organisée en clusters de SQL Server.

Pour une instance nommée de SQL Server 2000, recherchez la sous-clé suivante dans le Registre :
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\ < nom_instance > \MSSQLServer\ExtendedProcedure

Remarque : Nom_instance est le nom de l’instance nommée de SQL Server 2000.
Il existe deux entrées de Registre REG_MULTI_SZ dans la sous-clé ExtendedProcedure :
  • Xp_regread chemins autorisés
  • Xp_regwrite_Allowed chemins
L’entrée de Chemins d’accès de Xp_regread autorisé comprend la liste suivante des valeurs de Registre autorisés pour le Registre en lecture seule, des procédures stockées étendues :
  • xp_regread
  • xp_instance_regread
  • xp_regenumkeys
  • xp_instance_regenumkeys
  • xp_regenumvalues
  • xp_instance_regenumvalues
L’entrée de Chemins d’accès de Xp_regwrite autorisé comprend la liste suivante des procédures de valeurs de Registre écriture étendues stockées Registre autorisés :
  • xp_regwrite
  • xp_instance_regwrite
  • xp_regaddmultistring
  • xp_instance_regaddmultistring
  • xp_regremovemultistring
  • xp_instance_regremovemultistring
  • xp_regdeletevalue
  • xp_instance_regdeletevalue
  • xp_regdeletekey
  • xp_instance_regdeletekey
Pour autoriser l’accès à la sous-clé de Registre que vous le souhaitez, vous pouvez supprimer l’entrée Xp_regread les chemins d’accès autorisés ou l’entrée de Chemins d’accès de Xp_regwrite_Allowed , ou supprimer les deux entrées. En outre, vous pouvez modifier les valeurs qui se trouvent dans l’entrée Xp_regread les chemins d’accès autorisés ou l’entrée de Chemins d’accès de Xp_regwrite_Allowed et ajouter la procédure stockée étendue que vous souhaitez que la requête pour accéder à. Si vous supprimez l’écriture Xp_regread les chemins d’accès autorisés et l’entrée de Chemins d’accès de Xp_regwrite autorisé , vous désactivez la restriction pour les valeurs de Registre. Par conséquent, étendues de comportement de la procédure stockée du Registre revient au comportement antérieur à SQL Server 2000 SP4. Pour obtenir le même résultat, vous pouvez supprimer la clé de Registre ExtendedProcedures . Il est recommandé que vous étendez chaque liste avec des valeurs de Registre valides au lieu de désactiver la restriction qui implémente de SQL Server 2000 SP4.

Xp_regread chemins autorisés

Voici un exemple de l’entrée Xp_regread les chemins d’accès autorisé .

Remarque : INSTANCE est remplacé par le nom réel d’une instance de SQL Server.

HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\ < INSTANCE >

HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\80

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Search


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SQLServer


HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows Messaging Subsystem

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\MSSQLServer


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SQLCTRS

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Application\SQLServer


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSSQL$<INSTANCE>


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SNMP\Parameters\ExtensionAgents

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\SQLServer


HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\Services\SQLAgent$<INSTANCE>

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TimeZoneInformation


HKEY_CURRENT_USER\Software\Microsoft\Mail HKEY_CURRENT_USER\Control Panel\International

Xp_regwrite chemins autorisés

Voici un exemple de l’entrée Xp_regwrite les chemins d’accès autorisé .

Remarque : INSTANCE est remplacé par le nom réel d’une instance de SQL Server.

HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\ < INSTANCE >

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlset\Services\SQLAgent$<INSTANCE>

HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\80\Replication

Plus d'informations


Lorsque vous installez SQL Server 2000 Service Pack 4, le programme d’installation remplit à la fois l’entrée de Registre Xp_regread les chemins d’accès autorisé au préalable et l’entrée de Registre Xp_regwrite les chemins d’accès autorisés avec l’étendue des procédures stockées que 2000 de SQL Server peut accéder.

Pour plus d’informations sur les service packs de SQL Server 2000, visitez le site Web de Microsoft à l’adresse suivante :