Cómo resolver problemas de permisos cuando se traslada una base de datos entre servidores SQL Server

Seleccione idioma Seleccione idioma
Id. de artículo: 240872 - Ver los productos a los que se aplica este artículo
Este artículo se publicó anteriormente con el número E240872
Expandir todo | Contraer todo

En esta página

Resumen

En este artículo se describe cómo asignar los inicios de sesión estándar e integrado para resolver problemas de permisos cuando traslada una base de datos entre servidores que ejecutan SQL Server.

Más información

Cuando se traslada una base de datos de un servidor que ejecuta SQL Server a otro servidor con SQL Server, puede que no coincidan los números de identificación de seguridad (SID) de los inicios de sesión en la base de datos master y los de los usuarios en la base de datos user. De manera predeterminada, SQL Server 7.0, SQL Server 2000 y SQL Server 2005 proporcionan el procedimiento almacenado del sistema sp_change_users_login para asignar los usuarios que no coinciden. Sin embargo, sólo puede utilizar el procedimiento almacenado sp_change_users_login para asignar los inicios de sesión estándar de SQL Server y dicha asignación debe realizarse para cada usuario individualmente. Para obtener más información acerca del procedimiento almacenado sp_change_users_login, vea el tema "sp_change_users_login" en los Libros en pantalla de SQL Server 7.0, SQL Server 2000 y SQL Server 2005.

En SQL Server 7.0 o en versiones posteriores, la asignación entre los inicios de sesión de la base de datos master y los usuarios de la base de datos user se mantiene mediante números de identificación de seguridad (SID). Esta asignación es esencial para mantener los permisos apropiados para los inicios de sesión en las bases de datos user. Cuando se pierde esta asignación, los inicios de sesión tienen problemas de permisos, entre los que se incluyen los siguientes:
  • Si el inicio de sesión de SQL Server no existe en el nuevo servidor y el usuario trata de iniciar sesión, puede aparecer el mensaje de error siguiente:
    Servidor: Msj 18456, Nivel 16, Estado 1
    Error de inicio de sesión del usuario '%ls'.
  • Si el inicio de sesión de SQL Server existe en el nuevo servidor, pero el SID de la base de datos master no es igual que el SID de la base de datos user, el usuario puede iniciar sesión correctamente en SQL Server; sin embargo, cuando intente tener acceso a dicha base de datos, aparecerá el mensaje de error siguiente:
    Servidor: Msj 916, Nivel 14, Estado 1, Línea 1
    El usuario de servidor '%.*ls' no es válido en la base de datos '%.*ls.'
    Nota:
    En SQL Server 2005, el usuario puede recibir el mensaje de error siguiente:

    El usuario del servidor '%s' no es un usuario válido de la base de datos '%s'. Agregue antes a la base de datos la cuenta de usuario.
Para obtener más información acerca del modelo de seguridad de SQL Server 7.0, consulte las notas del producto "Microsoft SQL Server 7.0 Security". Para ver las notas del producto, visite el siguiente sitio Web de Microsoft:
http://msdn2.microsoft.com/en-us/library/Aa226173(SQL.70).aspx
Para obtener más información acerca del modelo de seguridad de SQL Server 2000, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
322712 Características de seguridad y recomendaciones para Microsoft SQL Server 2000 S322712

Restricciones

  • Si en la tabla sysusers existen usuarios que no tienen ningún prefijo con el nombre de equipo o el nombre de dominio y que poseen objetos, y se hace referencia a estos objetos en las aplicaciones mediante el nombre compuesto nombreDeUsuario.nombreDeObjeto, puede que la aplicación se interrumpa, ya que el procedimiento almacenado sp_sidmap cambia el nombre de estos usuarios con el prefijo del nombre de equipo o el nombre de dominio que aparece en la tabla sysxlogins. Para evitar este problema, una vez completado el procedimiento almacenado sp_sidmap, cambie el nombre de los usuarios afectados en la tabla sysusers por sus nombres anteriores o póngase en contacto con su proveedor principal de soporte técnico.
  • En este artículo no se tienen en cuenta los alias. Debe administrar manualmente los alias.
  • Si no existe un inicio de sesión de SQL Server estándar en el nuevo servidor de SQL Server, puede agregarlo con una contraseña NULL. Es posible que tenga que cambiar la contraseña de estos inicios de sesión según sea necesario.
  • Si se creó un usuario en la base de datos user con un nombre totalmente diferente del que aparece en la tabla sysxlogins, será imposible conocer el inicio de sesión correspondiente a ese usuario. Por tanto, antes de ejecutar el procedimiento almacenado sp_sidmap:
    1. Transfiera todos los objetos que posea este usuario a una base de datos de ensayo.
    2. Quite al usuario, agregue el usuario que tenga el nombre correcto y vuelva a transferir todos los objetos para este usuario.
  • Si un usuario no tiene ningún inicio de sesión correspondiente ni un prefijo del nombre de equipo local o del nombre de dominio, recibirá un mensaje para este usuario. Este mensaje indica que debe agregar primero al usuario en el nivel de Windows y, a continuación, agregarlo a SQL Server como un inicio de sesión. Después de hacerlo, debe ejecutar de nuevo el procedimiento almacenado sp_sidmap.
  • Si un usuario tiene un prefijo con el nombre de dominio o de servidor de Windows local, pero no existe el inicio de sesión correspondiente en la tabla sysxlogins, el procedimiento almacenado intenta agregarlo como un nuevo inicio de sesión en SQL Server. Si el usuario de Windows no existe, genera un mensaje visible en la ventana de resultados y crea manualmente el inicio de sesión después de agregar al usuario de Windows.
  • Si hay más de un inicio de sesión para un mismo usuario en la tabla sysusers, verá un mensaje en el archivo de resultados en el que se enumeran todos los inicios de sesión que tienen el mismo nombre de usuario. En este momento deberá intervenir personalmente para asegurarse de que el usuario corresponde únicamente a un inicio de sesión.

    Ejemplo
    Si la tabla sysusers tiene un usuario denominado "juansoto" y la tabla sysxlogins tiene inicio de sesión con nombres como "Prueba\juansoto" y "Prueba2\juansoto", cuando ejecute el procedimiento almacenado verá un mensaje que indica que uno de los usuarios tiene más de un inicio de sesión y que el Administrador del sistema debe elegir uno. Éste es el único caso en que es necesario ejecutar el segundo procedimiento almacenado, sp_prefix_sysusersname, que se proporciona en este artículo. Además, esta situación se describe en detalle en el archivo Readme.txt.

Asignar los inicio de sesión estándar e integrado

Después de trasladar una base de datos de un servidor que ejecuta SQL Server a otro servidor que ejecuta SQL Server, siga estos pasos para que haya una intervención mínima del usuario:
  1. Asegúrese de que haya un inicio de sesión en la tabla sysxlogins de la base de datos master para cada usuario de la tabla sysusers de la base de datos.

    Nota:
    Para agregar un inicio de sesión de SQL Server estándar, vea el tema "sp_addlogin" en los Libros en pantalla de SQL Server. Para agregar un inicio de sesión integrado de SQL Server, consulte el tema "sp_grantlogin" en los Libros en pantalla de SQL Server.
  2. Descargue el archivo MapSids.exe, y extraiga los archivos Readme.txt y Sp_sidmap.sql.
  3. Inicie sesión en el servidor que ejecuta SQL Server como un administrador del sistema y, a continuación, ejecute el archivo Sp_sidmap.sql en la base de datos user. Al ejecutar el archivo Sp_sidmap.sql se crean los dos procedimientos almacenados, sp_sidmap y sp_prefix_sysusersname.
  4. Asegúrese de que ningún otro usuario que no sea el que está ejecutando los procedimientos almacenados tiene acceso a la base de datos.
  5. Compruebe que el Analizador de consultas muestra los resultados en formato de texto y no en formato de cuadrícula. Para ello, presione las teclas CTRL^T o haga clic en Consulta y, a continuación, haga clic en Resultados como texto. Esto es muy importante para que pueda ver los resultados y los mensajes informativos en una ventana, y para poder guardar el resultado en un archivo de texto. Podría necesitar después este archivo para resolver algunas de las asignaciones.
  6. Como no puede comprobar si los parámetros se pasan correctamente, asegúrese de que los pasa correctamente al procedimiento almacenado sp_sidmap:
    EXEC sp_SidMap @old_domain = old_domain_name,
    @new_domain = new_domain_name,
    @old_server = old_server_name,
    @new_server = new_server_name
    Reemplace los valores por los nombres de dominio y de servidor anteriores y nuevos, según corresponda.
  7. Guarde los resultados en un archivo y siga las indicaciones que encontrará en el archivo Readme.txt.

    Nota:
    Cuando ejecuta estos procedimientos almacenados, la tabla sysusers es la única que cambia en la base de datos. Para regresar al estado inicial, restaure la base de datos a partir de la copia de seguridad o vuelva a asociar la base de datos.

Referencias

Para obtener más información al respecto, haga clic en los números de artículo siguientes para verlos en Microsoft Knowledge Base:
274188 El tema "Solucionar problemas de usuarios huérfanos" de los Libros en pantalla está incompleto
246133 Cómo transferir inicios de sesión y contraseñas entre instancias de SQL Server
168001 Los inicios de sesión y los permisos de los usuarios de una base de datos pueden ser incorrectos después de restaurar la base de datos
298897 EJEMPLO: Mapsids.exe ayuda a asignar los SID entre las bases de datos user y master cuando se traslada una base de datos

Propiedades

Id. de artículo: 240872 - Última revisión: miércoles, 5 de septiembre de 2007 - Versión: 7.3
La información de este artículo se refiere a:
  • Microsoft SQL Server 2000 Standard Edition
  • Microsoft SQL Server 2000 64-bit Edition
  • Microsoft SQL Server 7.0 Standard Edition
  • Microsoft SQL Server 2005 Developer Edition
  • Microsoft SQL Server 2005 Enterprise Edition
  • Microsoft SQL Server 2005 Express Edition
  • Microsoft SQL Server 2005 Standard Edition
  • Microsoft SQL Server 2005 Workgroup Edition
Palabras clave: 
kbhowtomaster KB240872

Enviar comentarios

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com