Error: Puede recibir un error "Acceso denegado" mensaje cuando una consulta llama extendido el procedimiento almacenado después de actualizar desde SQL Server 2000 a SQL Server 2000 Service Pack 4


Importante: Este artículo contiene información acerca de cómo modificar el registro. Asegúrese de hacer copia de seguridad del registro antes de modificarlo. Asegúrese de que sabe cómo restaurarlo si ocurre algún problema. Para obtener más información acerca de cómo hacer copia de seguridad, restaurar y modificar el registro, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

Síntomas


Después de actualizar un equipo basado en Microsoft SQL Server 2000 a Microsoft SQL Server 2000 Service Pack 4 (SP4), puede producir un error en una consulta de SQL Server que llama a un procedimiento almacenado extendido de registro y recibirá el siguiente mensaje de error:
Acceso denegado.
Recibirá el mensaje de error cuando usa cualquiera del registro extendido procedimientos almacenados en la lista siguiente:
  • 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

Causa


Este problema se produce porque SQL Server 2000 SP4 implementa una restricción en las rutas de registro del registro extendido pueden tener acceso los procedimientos almacenados. Cuando una consulta llama a un procedimiento almacenado extendido de registro, el procedimiento almacenado extendido de registro examina la subclave del registro solicitado con una lista de control de los subárboles del registro. Si la subclave del registro que solicita la consulta no está en la lista de control, recibirá el siguiente mensaje de error:
'Acceso denegado'.
Este mensaje de error no tiene nada que ver con los permisos de la cuenta de usuario de SQL Server en el contexto de que uno de estos del registro se llama a procedimientos almacenados extendidos. El mensaje de error se produce incluso si el usuario tiene permisos de administrador.


Nota: Cuando reciba el mensaje de error, el registro había extendido procedimiento almacenado devuelve ningún resultado.

Solución


Advertencia: pueden producirse problemas graves si modifica incorrectamente el registro mediante el Editor del registro o mediante cualquier otro método. Estos problemas pueden requerir que reinstale el sistema operativo. Microsoft no puede garantizar que estos problemas puedan resolverse. Modifique el registro bajo su propio riesgo.

Advertencia: El registro de procedimientos almacenados extendido no están documentado y están sujetos a cambios. Por lo tanto, es recomendable llamar a estos procedimientos en el código de cliente. Las implementaciones futuras de estos procedimientos pueden ser incompatibles. Además, no hay ninguna garantía de que las implementaciones anteriores seguirán se admite en versiones posteriores de SQL Server.

Para resolver este problema, modifique la clave del registro que controla los procedimientos de acceso al registro extendido almacenado. La lista de control se encuentra en el registro bajo la subclave MSSQLServer . Para una instancia predeterminada de SQL Server 2000, busque la siguiente subclave del registro:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\ExtendedProcedures
Nota: Esta clave del registro no se crea al aplicar SQL Server 2000 SP4 a una instancia agrupada de SQL Server.

Para una instancia con nombre de SQL Server 2000, busque la siguiente subclave del registro:
HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\ < Instance_name > \MSSQLServer\ExtendedProcedure

Nota: Instance_name es el nombre de la instancia con nombre de SQL Server 2000.
En la subclave ExtendedProcedure , hay dos entradas del Registro REG_MULTI_SZ:
  • Xp_regread permitida rutas de acceso
  • Rutas de acceso de Xp_regwrite_Allowed
La entrada Xp_regread permite rutas contiene la siguiente lista de valores del registro permitido para procedimientos almacenados extendidos de registro de sólo lectura:
  • xp_regread
  • xp_instance_regread
  • xp_regenumkeys
  • xp_instance_regenumkeys
  • xp_regenumvalues
  • xp_instance_regenumvalues
La entrada Xp_regwrite permite rutas contiene la siguiente lista de procedimientos almacenados valores extendidos del registro de escritura de registro permitidos:
  • 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
Para permitir el acceso a la subclave del registro que desea, puede eliminar la entrada Xp_regread permite rutas o la entrada Xp_regwrite_Allowed rutas o eliminar ambas entradas. Además, puede modificar los valores que están en la entrada Xp_regread permite rutas o la entrada Xp_regwrite_Allowed rutas y agregar el procedimiento almacenado extendido que desea que la consulta para tener acceso a. Si elimina la entrada Xp_regread permite rutas y la entrada Xp_regwrite permite rutas , deshabilite la restricción para los valores del registro. Por lo tanto, el registro ampliado el comportamiento del procedimiento almacenado se revierte al comportamiento pre-SQL Server 2000 SP4. Para lograr el mismo resultado, puede quitar la clave del registro ExtendedProcedures . Recomendamos que extienda cada lista con los valores válidos del registro en lugar de deshabilitar la restricción de que SQL Server 2000 SP4 implementa.

Xp_regread permitida rutas de acceso

El siguiente es un ejemplo de la entrada Xp_regread permite rutas .

Nota: Instancia se sustituye por el nombre real de una instancia de SQL Server.

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

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


Subsistema de mensajería de HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows

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 permitida rutas de acceso

El siguiente es un ejemplo de la entrada Xp_regwrite permite rutas .

Nota: Instancia se sustituye por el nombre real de una instancia de SQL Server.

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

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

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

Más información


Cuando se instala SQL Server 2000 Service Pack 4, el programa de instalación rellena previamente la entrada de registro de Rutas de acceso permitido Xp_regread y la entrada de registro Xp_regwrite permite rutas con extendido procedimientos almacenados que 2000 de SQL Server puede tener acceso.

Para obtener más información acerca de los service packs de SQL Server 2000, visite el siguiente sitio Web de Microsoft: