Usuarios de la base de datos e inicios de sesión del servidor y la asignación entre ellos

9

Tengo una instancia de SQL Server 2008 R2 Express Edition en casa y otra en un servidor en las instalaciones de un cliente que estoy usando para desarrollar una aplicación usando Access como front-end. Esta aplicación tiene 5 inicios de sesión separados que puedo usar en la cadena de conexión (según el grupo de acceso en el que se encuentre el usuario). La instancia de inicio tiene varias bases de datos, algunas de las cuales no tienen nada que ver con estas aplicaciones

He creado manualmente los inicios de sesión en cada instancia a lo largo del tiempo (y probablemente en un orden diferente).

Espero poder (más de una vez) tomar una copia de seguridad de mi máquina doméstica de la base de datos en la que estoy trabajando y cargarla en la instancia en las instalaciones del cliente usando la restauración, simplemente moviendo los archivos en el conjunto de copia de seguridad al valor real archivos utilizados en este servidor durante el proceso de restauración. Lo que no entiendo es el mapeo entre el usuario de la base de datos y el inicio de sesión.

Pensé que la correspondencia de nombre debería ser suficiente, pero al tratar de solucionar un problema en el que los usuarios de la base de datos restaurada no parecían asignados al inicio de sesión del servidor, me encontré con la declaración de USUARIO ALTER de Transact-SQL y en particular su referencia al uso de WITH LOGIN y alguna discusión sobre un "SID".

Dado que (supongo) que los nombres de inicio de sesión del servidor tienen SID diferentes en cada instancia, ¿significa que después de cargar una copia de seguridad entre instancias tengo que volver a conectar la asignación nuevamente con una serie de comandos ALTER USER WITH LOGIN?

akc42
fuente

Respuestas:

9

Loginso los inicios de sesión del servidor existen en el nivel del servidor SQL y database userestán en el nivel de la base de datos. No necesitan tener el mismo nombre, pero generalmente lo tienen. En una instancia, no puede hacer que un usuario de la base de datos funcione correctamente sin un inicio de sesión correspondiente del servidor SQL.

Digamos que tiene una instancia: instanceA con un inicio de sesión Sever userA en su ordenador. Puede asignar este usuario de inicio de sesión del servidor A a un usuario de la base de datos: usuarioA para una base de datos DB_A . Ambos se denominan userA , pero uno es el servidor loginy el otro database user. El usuario de la base de datos: usuarioA reside en DB_A . Cuando realiza una copia de seguridad y restaura DB_A de la instancia A a otra instancia B , el usuario de la base de datos: usuarioA se mueve, pero el inicio de sesión del servidor: usuarioA aún permanece en la instanciaA. Para mover los inicios de sesión de instancia A a instancia B, puede usarsp_help_revlogin (Haga clic para ver la página KB) .

Si ya había creado el usuario de inicio de sesión del servidor SQLA en la instancia B , SQL intentará asignar este inicio de sesión con el usuario de la base de datos: usuarioA, cuando DB_A se restaure de la instanciaA a la instanciaB. Si esto falla, puede utilizar el procedimiento sp_change_users_login (haga clic para obtener el enlace BOL) para corregir las asignaciones rotas. Espero que esto aclare las cosas.

StanleyJohns
fuente
Gracias. Creo que tenía los conceptos correctos, pero sp_help_revlogin y sp_change_users_login y new y me ayudarán. Exploraré más Gracias
akc42