En SQL Server, la seguridad se gestiona en una jerarquía de dos niveles:
- Inicio de sesión (Entidad de seguridad a nivel de servidor): Esta es una cuenta individual o de grupo que se autentica con la instancia de SQL Server. Los inicios de sesión se crean a nivel de servidor (dentro del contexto de la base de datos
master
) y determinan quién puede conectarse al servidor. Pueden ser inicios de sesión autenticados por SQL Server o inicios de sesión autenticados por Windows. - Usuario (Entidad de seguridad a nivel de base de datos): Una vez que un inicio de sesión se ha conectado al servidor, debe mapearse a un usuario dentro de una base de datos específica para interactuar con sus objetos (tablas, vistas, procedimientos almacenados, etc.). Un usuario es una representación de un inicio de sesión dentro de una base de datos particular. Los permisos para los objetos dentro de esa base de datos se otorgan al usuario, no directamente al inicio de sesión.
Esta separación permite un control granular: un inicio de sesión podría tener acceso a la instancia de SQL Server, pero solo podrá leer datos de la BaseDeDatosA
y no tener acceso a la BaseDeDatosB
, simplemente porque solo está mapeado como usuario en la BaseDeDatosA
con permisos de lectura.
Cómo mapear un inicio de sesión a un usuario
La asignación de usuarios generalmente ocurre cuando creas un nuevo inicio de sesión o modificas uno existente.
1. Uso de SQL Server Management Studio (SSMS) 🖥️
Al crear o modificar un inicio de sesión en SSMS, encontrarás una página dedicada a la “Asignación de usuarios”:
Navegar: En el Explorador de objetos, expande “Seguridad” y luego “Inicios de sesión”. Haz clic derecho en “Inicios de sesión” y selecciona “Nuevo inicio de sesión…” (o haz clic derecho en un inicio de sesión existente y selecciona “Propiedades”).

Página de Asignación de usuarios: En el cuadro de diálogo “Inicio de sesión – Nuevo” (o “Propiedades de inicio de sesión”), navega a la página “Asignación de usuario”. [Imagen de la ventana de asignación de usuarios de SQL Server Management Studio]
Seleccionar bases de datos: En el panel superior, verás una lista de todas las bases de datos en el servidor. Marca la casilla junto a cada base de datos a la que deseas que el inicio de sesión tenga acceso.
Especificar nombre de usuario: Para cada base de datos seleccionada, aparecerá una nueva fila en el panel inferior. Por defecto, la columna “Usuario” sugerirá un nombre de usuario idéntico al nombre del inicio de sesión. Puedes cambiar esto si lo deseas, pero a menudo es una buena práctica mantenerlos iguales para mayor claridad.
Membresía en el rol de base de datos: En el panel inferior, también puedes especificar la membresía en el rol de base de datos para este nuevo usuario dentro de cada base de datos seleccionada. Por ejemplo, si deseas que el usuario pueda leer datos de todas las tablas en TuBaseDeDatos
, marcarías el rol db_datareader
. Si también necesita escribir datos, marca db_datawriter
.
Confirmar: Haz clic en “Aceptar” para guardar los cambios.

2. Uso de Transact-SQL (T-SQL) ⌨️
También puedes realizar la asignación de usuarios utilizando comandos T-SQL. Esto es particularmente útil para scripting y automatización.
Crear el inicio de sesión (si no existe ya):.
CREATE LOGIN [TuNombreDeInicioDeSesion]
WITH PASSWORD = 'TuContraseñaSegura', CHECK_POLICY = ON;
GO
Mapear el inicio de sesión a un usuario dentro de una base de datos específica: Una vez que el inicio de sesión existe, puedes mapearlo a un usuario dentro de una base de datos de destino utilizando la instrucción CREATE USER
.
USE [TuNombreDeBaseDeDatos]; -- Cambia a la base de datos de destino
GO
CREATE USER [TuNombreDeUsuario] FOR LOGIN [TuNombreDeInicioDeSesion];
GO
Reemplaza [TuNombreDeUsuario]
con el nombre deseado para el usuario en esta base de datos (a menudo el mismo que el nombre del inicio de sesión).
Agregar el usuario a roles de base de datos (Opcional pero recomendado): Después de crear el usuario, querrás asignarlo a los roles de base de datos relevantes para otorgar permisos.
USE [TuNombreDeBaseDeDatos];
GO
ALTER ROLE db_datareader ADD MEMBER [TuNombreDeUsuario];
-- Otorga acceso de lectura a todas las tablas/vistas
ALTER ROLE db_datawriter ADD MEMBER [TuNombreDeUsuario];
-- Otorga acceso de escritura a todas las tablas/vistas
-- Puedes agregar otros roles según sea necesario
GO
Concesión de permisos específicos a nivel de objeto (Alternativa a los roles): Si necesitas un control muy específico, puedes conceder permisos directamente en tablas, vistas, procedimientos almacenados, etc., después de que se cree el usuario.
USE [TuNombreDeBaseDeDatos];
GO
GRANT SELECT
ON OBJECT::[TuNombreDeEsquema].[TuNombreDeTabla] TO [TuNombreDeUsuario];
GO
Conclusión ✨
La asignación de usuarios es un concepto de seguridad esencial en SQL Server que cierra la brecha entre la autenticación a nivel de servidor y la autorización a nivel de base de datos. Al mapear los inicios de sesión a los usuarios dentro de bases de datos específicas y asignarles los roles o permisos directos apropiados, puedes implementar un modelo de seguridad robusto que se adhiere al principio de privilegio mínimo. Esto garantiza que los usuarios solo tengan el acceso que necesitan, mejorando la seguridad general de tu entorno de SQL Server.
Por qué en SQL Server es necesario mapear un inicio de sesión a un usuario dentro de una base de datos?