Entrada 10 (sp_Login)
Fecha: 23/04/2026 y 24/04/2026
Inicio: [23:47] del 23 | Fin: [01:06] del 24 || Total: [1 hora y 19 minutos]
Presentes: Sebastián Ramírez Abarca
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
¿QUÉ HICIMOS HOY?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Se avanzó con los store procedures, específicamente con sp_Login
Corrección en los estándares en sp_UpdateEmpleado y sp_GetEmpleadoById.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PROBLEMAS ENCONTRADOS Y CÓMO SE RESOLVIERON
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
No se encontraron errores de sintaxis y el SP aún no está conectado para probarlo.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DUDAS Y DIVERGENCIAS DE CRITERIO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Surgió la duda de qué hacer cuando se ingresa un username inexistente: no tiene sentido guardar intentos pues no hay usuario seleccionado para contarlos.
Se decidió que provisionalmente no se guarde en BitacoraEvento y solo devuelve un código de error.
Se decidió que provisionalmente no se guarde en BitacoraEvento y solo devuelve un código de error.
2. Debido a que en este sesión solo partició una persona no hubo divergencias.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
AVANCE DEL CÓDIGO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
sp_Login:
USE VacacionesDB;
GO
-- =====================================================
-- SP: Login de usuario
-- =====================================================
DROP PROCEDURE IF EXISTS sp_Login;
GO
CREATE PROCEDURE sp_Login
@inUsername VARCHAR(128),
@inPassword VARCHAR(128),
@inIpPostIn VARCHAR(64),
@inPostTime DATETIME,
@outResultCode INT OUTPUT
AS
BEGIN
SET NOCOUNT ON;
DECLARE @idUsuario INT,
@password VARCHAR(128),
@idTipoEventoSuccess INT,
@idTipoEventoFail INT,
@idTipoEventoDisabled INT,
@intentosFallidos INT,
@descripcion VARCHAR(512)
SET @outResultCode = 0;
BEGIN TRY
SELECT @idTipoEventoSuccess = t.id
FROM dbo.TipoEvento t
WHERE t.Nombre = 'Login Exitoso';
SELECT @idTipoEventoFail = t.id
FROM dbo.TipoEvento t
WHERE t.Nombre = 'Login No Exitoso';
SELECT @idTipoEventoDisabled = t.id
FROM dbo.TipoEvento t
WHERE t.Nombre = 'Login deshabilitado';
-- Obtener datos del usuario
-- @idUsuario y @password serán NULL si no existe @inUsername en la BD
SELECT @idUsuario = u.id, @password = u.password
FROM dbo.Usuario u
WHERE u.Username = @inUsername;
-- Verificar que existe usuario
IF @idUsuario IS NULL
BEGIN
SET @outResultCode = 50001;
RETURN;
END
-- Contar intentos fallidos en los ultimos 20 min
SELECT @intentosFallidos = COUNT(*)
FROM dbo.BitacoraEvento b
WHERE b.idTipoEvento = @idTipoEventoFail
AND b.idUsuario = @idUsuario
AND b.IpPostIn = @inIpPostIn
AND b.PostTime >= DATEADD(MINUTE, -20, @inPostTime);
IF @intentosFallidos >= 5
BEGIN
SET @outResultCode = 50003;
INSERT INTO dbo.BitacoraEvento (idTipoEvento, Descripcion, idUsuario, IpPostIn, PostTime)
VALUES (@idTipoEventoDisabled, NULL, @idUsuario, @inIpPostIn, @inPostTime)
RETURN;
END
-- Verficar password
IF @password <> @inPassword
BEGIN
SET @outResultCode = 50002;
SET @descripcion = 'Intento: ' + CAST(@intentosFallidos + 1 AS VARCHAR(10))
+ ' | Error: ' + (SELECT Descripcion FROM dbo.Error WHERE Codigo = 50002);
INSERT INTO dbo.BitacoraEvento (idTipoEvento, Descripcion, idUsuario, IpPostIn, PostTime)
VALUES (@idTipoEventoFail, @descripcion, @idUsuario, @inIpPostIn, @inPostTime);
RETURN;
END
-- Login exitoso
INSERT INTO BitacoraEvento (idTipoEvento, Descripcion, idUsuario, IpPostIn, PostTime)
VALUES (@idTipoEventoSuccess, 'Exitoso', @idUsuario, @inIpPostIn, @inPostTime);
SET @outResultCode = 0;
END TRY
BEGIN CATCH
INSERT INTO DBError (UserName, Number, State, Severity, Line, [Procedure], Message, DateTime)
VALUES (
SYSTEM_USER,
ERROR_NUMBER(),
CAST(ERROR_STATE() AS VARCHAR(32)),
CAST(ERROR_SEVERITY() AS VARCHAR(32)),
ERROR_LINE(),
ISNULL(ERROR_PROCEDURE(), 'sp_Login'),
ERROR_MESSAGE(),
GETDATE()
);
SET @outResultCode = 50008;
END CATCH
END;
GO
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
MORALEJAS / BUENAS PRÁCTICAS
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Hoy no se implementaron nuevas para esta sección.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
PRÓXIMA SESIÓN: ¿QUÉ SIGUE?
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
- Realizar sp_Logout
Comentarios
Publicar un comentario