No puede ejecutar una instrucción o un módulo que incluya la cláusula EXECUTe AS después de restaurar una base de datos en SQL Server 2005


Error #: 397455 (SQLBUDT)

Síntomas


Al ejecutar una instrucción o un módulo que incluye la cláusula EXECUTe AS en Microsoft SQL Server 2005, es posible que reciba el siguiente mensaje de error:
No se puede ejecutar como la entidad de seguridad de base de datos porque el principal "dbo" no existe, este tipo de entidad de seguridad no se puede suplantar o usted no tiene permiso.
Este problema se produce cuando se cumplen todas las condiciones siguientes:
  • Haga una copia de seguridad de una base de datos desde una instancia de SQL Server 2005. Después, restaura la base de datos en una instancia de SQL Server 2005 que está instalada en otro equipo.
  • La instrucción o el módulo se ejecuta como el usuario DBO (propietario de la base de datos).
  • El propietario de la base de datos es un usuario de dominio o un inicio de sesión de autorización de SQL Server. Notas
    • Si un usuario del dominio es propietario de la base de datos, el equipo en el que se restaura la base de datos no puede acceder al dominio.
    • Si el inicio de sesión de autorización de SQL Server es propietario de la base de datos, el inicio de sesión no existe en la nueva instancia de SQL Server 2005.

Causa


Este problema se produce porque SQL Server 2005 no puede obtener la información sobre el contexto al intentar suplantar a un usuario de la base de datos para ejecutar una instrucción o un módulo. SQL Server no puede obtener la información sobre el contexto que está intentando suplantar bajo las condiciones que se enumeran en la sección "síntomas". Si suplanta un inicio de sesión de autorización de SQL Server, SQL Server no puede encontrar un inicio de sesión que coincida con el identificador de seguridad (SID) del usuario suplantado. Si suplanta a un usuario de dominio, el controlador de dominio no puede encontrar la información sobre el usuario específico que coincide con el SID del usuario suplantado.

Solución alternativa


Para evitar este problema, cambie el propietario de la base de datos a un inicio de sesión válido o un usuario de dominio. Para ello, ejecute las siguientes instrucciones:
USE <DatabaseName>GOsp_changedbowner '<NewLogin>'
Nota<DatabaseName> representa el nombre de la base de datos. <NewLogin> representa el nombre del inicio de sesión que desea establecer.

Estado


Microsoft ha confirmado que se trata de un problema de los productos de Microsoft recogidos en la sección "Se aplica a".