Diferencia entre un usuario y un inicio de sesión en SQL Server

178

Recientemente me he encontrado con muchas áreas diferentes de SQL Server con las que normalmente no me meto. Uno de ellos que me tiene confundido es el área de inicios de sesión y usuarios. Parece que debería ser un tema bastante simple ...

Parece que cada inicio de sesión solo puede tener 1 usuario y cada usuario solo puede tener 1 inicio de sesión.

Un inicio de sesión se puede asociar a varias tablas, lo que asocia a ese usuario a muchas tablas.

Entonces mi pregunta es ¿por qué incluso tener un inicio de sesión y un usuario? parecen ser más o menos lo mismo. ¿Cuáles son las diferencias, o qué es lo que parece que me estoy perdiendo?

corymathews
fuente

Respuestas:

202

Un "Inicio de sesión" otorga la entrada principal en el SERVIDOR.

Un "Usuario" otorga una entrada de inicio de sesión en una BASE DE DATOS única.

Un "inicio de sesión" se puede asociar con muchos usuarios (uno por base de datos).

Cada uno de los objetos anteriores puede tener permisos otorgados en su propio nivel. Consulte los siguientes artículos para obtener una explicación de cada

Scott Ivey
fuente
77
Ah, no me sorprende, no pude encontrar una diferencia. Simplemente estaba trabajando con 1 base de datos. Gracias.
corymathews el
3
Esta respuesta es fundamentalmente correcta, pero según tengo entendido, a un usuario en particular se le puede otorgar acceso a más de una base de datos que está disponible en ese servidor en particular. De modo que login-to-user es un mapeo de 1 a 1, pero user-to-database es un mapeo de 1 a muchos.
Andrew Paté
1
@coreymathews: ¡Menos tiempo en "Boy Meets World" y más tiempo en los libros! ;).
MSIS
Pero ahora MSDN recomienda un tipo de usuario "Usuarios que se autentican en la base de datos" (Recomendado para ayudar a que su base de datos sea más portátil). Enlace: docs.microsoft.com/en-us/sql/t-sql/statements/… ¿Es esto mejor que el tipo de usuario tradicional?
Brillo
32

Una razón para tener ambos es para que el servidor de la base de datos pueda realizar la autenticación, pero la autorización se puede determinar en la base de datos. De esa manera, si mueve su base de datos a otro servidor, siempre puede reasignar la relación de inicio de sesión de usuario en el servidor de la base de datos, pero su base de datos no tiene que cambiar.

Tom Resing
fuente
¿Puedes por favor elaborar? ¿Cuál es la ventaja del cambio que se realiza en el servidor de la base de datos en lugar de hacerlo en la base de datos?
HeyJude
Digamos que desea hacer una copia de seguridad y restaurar una base de datos. La restauración a menudo se realiza en un nuevo servidor. Es posible que no desee realizar cambios en una base de datos en una restauración.
Tom Resing
¿Por qué no simplemente hacer el cambio después de que la base de datos ha sido restaurada?
HeyJude
1
Hay un buen video de 60 segundos sobre el tema en SQLAuthority para más información blog.sqlauthority.com/2014/07/16/…
Tom Resing
1
@HeyJude Significa que el servidor está preocupado por la autenticación, algo que la base de datos tendría que hacer si no fuera por el inicio de sesión y la separación del usuario.
Zaid Khan
25

Creo que hay una muy buena publicación en el blog de MSDN sobre este tema por Laurentiu Cristofor:

Lo primero que debe entenderse sobre la seguridad de SQL Server es que hay dos ámbitos de seguridad involucrados: el servidor y la base de datos. El reino del servidor abarca múltiples reinos de bases de datos. Todo el trabajo se realiza en el contexto de alguna base de datos, pero para hacer el trabajo, primero se necesita tener acceso al servidor y luego tener acceso a la base de datos.

El acceso al servidor se otorga a través de inicios de sesión. Hay dos categorías principales de inicios de sesión: inicios de sesión autenticados de SQL Server e inicios de sesión autenticados de Windows. Por lo general, me referiré a estos utilizando los nombres más cortos de inicios de sesión de SQL y de Windows. Los inicios de sesión autenticados de Windows pueden ser inicios de sesión asignados a usuarios de Windows o inicios de sesión asignados a grupos de Windows. Entonces, para poder conectarse al servidor, uno debe tener acceso a través de uno de estos tipos o inicios de sesión: los inicios de sesión proporcionan acceso al dominio del servidor.

Pero los inicios de sesión no son suficientes, porque el trabajo generalmente se realiza en una base de datos y las bases de datos son reinos separados. El acceso a las bases de datos se otorga a través de los usuarios.

Los usuarios se asignan a inicios de sesión y la asignación se expresa mediante la propiedad SID de inicios de sesión y usuarios. Un inicio de sesión se asigna a un usuario en una base de datos si sus valores SID son idénticos. Dependiendo del tipo de inicio de sesión, podemos tener una categorización de usuarios que imite la categorización anterior para los inicios de sesión; entonces, tenemos usuarios de SQL y usuarios de Windows y la última categoría consiste en usuarios asignados a inicios de sesión de usuario de Windows y usuarios asignados a inicios de sesión de grupo de Windows.

Retrocedamos para obtener una descripción general rápida: un inicio de sesión proporciona acceso al servidor y para obtener más acceso a una base de datos, debe existir un usuario asignado al inicio de sesión en la base de datos.

ese es el enlace a la publicación completa.

David Leitner
fuente
Esta publicación de blog ha sido
eliminada
23

En breve,

Los inicios de sesión tendrán acceso al servidor.

y

Los usuarios tendrán acceso a la base de datos.

Vikrant Kedari
fuente
6

Creo que esta es una pregunta muy útil con buena respuesta. Solo para agregar mis dos centavos de MSDN Crear una página de inicio de sesión :

Un inicio de sesión es una entidad de seguridad o una entidad que puede ser autenticada por un sistema seguro. Los usuarios necesitan un inicio de sesión para conectarse a SQL Server. Puede crear un inicio de sesión basado en un principal de Windows (como un usuario de dominio o un grupo de dominio de Windows) o puede crear un inicio de sesión que no se base en un principal de Windows (como un inicio de sesión de SQL Server).

Nota:
Para usar la autenticación de SQL Server, el motor de base de datos debe usar la autenticación de modo mixto. Para obtener más información, consulte Elegir un modo de autenticación.

Como entidad de seguridad, se pueden otorgar permisos a los inicios de sesión. El alcance de un inicio de sesión es todo el Motor de base de datos. Para conectarse a una base de datos específica en la instancia de SQL Server, se debe asignar un inicio de sesión a un usuario de la base de datos. Los permisos dentro de la base de datos se otorgan y denegan al usuario de la base de datos, no al inicio de sesión. Los permisos que tienen el alcance de toda la instancia de SQL Server (por ejemplo, el permiso CREATE ENDPOINT) se pueden otorgar a un inicio de sesión.

ilmatte
fuente
3
Es un poco más claro si coloca un >al comienzo de cada párrafo en la cita para que esté formateado como una cita.
Sam
2
Esto fue muy útil. Aunque había configurado los usuarios e inicios de sesión correctamente, el sistema no estaba configurado para permitir la autenticación de inicio de sesión de SQL Server. ¡Por qué podría crear inicios de sesión de SQL Server cuando el servidor no les permitirá iniciar sesión está fuera de mi alcance!
Mark Ireland el
También estaba perplejo por esto. si el servidor no está actualmente en modo mixto, entonces hubiera esperado que el servidor solo arrojara un error al intentar crear un inicio de sesión de autenticación de SQL, eso al menos le daría al usuario una pista que indica que primero deben activar la autenticación en modo mixto.
Arunsun