🔐 Tutorial: Bloqueo de Usuarios Genéricos por S.O. al Esquema BOTICARIO en BOTICA_DB

Table of contents
- 🎯 Objetivo
- 1️⃣ Preparación del Entorno
- 2️⃣ Crear tabla de usuarios bloqueados
- 3️⃣ Crear tabla de auditoría de accesos
- 4️⃣ Otorgar permisos al trigger
- 5️⃣ Crear trigger de LOGON a nivel de base de datos
- 6️⃣ Insertar usuarios del S.O. a bloquear
- 7️⃣ Eliminar usuarios bloqueados
- 8️⃣ Limpiar tabla de auditoría
- 9️⃣ Consultar registros
- 🔁 Rollback completo (Reversión)
- 🎁 BONUS: Paquete PL/SQL para Gestión de Usuarios
- ⚠️ Notas Finales
- 🧠 Conclusión

🎯 Objetivo
Este tutorial documenta cómo implementar una política de seguridad en Oracle que bloquea conexiones al esquema BOTICARIO basándose en el nombre del usuario del sistema operativo (OS_USER
).
Incluye:
Tablas de control y auditoría
Trigger de conexión
Procedimientos administrativos
Paquete PL/SQL centralizado para gestión
💡 Ideal para entornos donde se requiere seguridad granular y trazabilidad de accesos no autorizados.
1️⃣ Preparación del Entorno
👤 Crear el esquema de seguridad
CREATE USER SEGURIDAD IDENTIFIED BY tu_contraseña_segura;
GRANT CONNECT, RESOURCE TO SEGURIDAD;
ALTER USER SEGURIDAD QUOTA UNLIMITED ON USERS;
2️⃣ Crear tabla de usuarios bloqueados
CREATE TABLE SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO (
OS_USERNAME VARCHAR2(30) PRIMARY KEY
)
TABLESPACE USERS;
3️⃣ Crear tabla de auditoría de accesos
CREATE TABLE SEGURIDAD.LOG_ACCESOS_BLOQUEADOS (
OS_USERNAME VARCHAR2(30),
USERNAME VARCHAR2(30),
FECHA DATE DEFAULT SYSDATE
)
TABLESPACE USERS;
4️⃣ Otorgar permisos al trigger
GRANT SELECT ON SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO TO SISTEMA;
5️⃣ Crear trigger de LOGON a nivel de base de datos
CREATE OR REPLACE TRIGGER SISTEMA.TRG_BLOQUEO_USUARIOS_BOTICARIO
AFTER LOGON ON DATABASE
DECLARE
v_osuser VARCHAR2(30);
v_username VARCHAR2(30);
v_count NUMBER := 0;
BEGIN
v_osuser := SYS_CONTEXT('USERENV', 'OS_USER');
v_username := SYS_CONTEXT('USERENV', 'SESSION_USER');
IF UPPER(v_username) = 'BOTICARIO' THEN
BEGIN
SELECT COUNT(*) INTO v_count
FROM SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO
WHERE LOWER(OS_USERNAME) = LOWER(v_osuser);
EXCEPTION
WHEN OTHERS THEN NULL;
END;
IF v_count > 0 THEN
BEGIN
INSERT INTO SEGURIDAD.LOG_ACCESOS_BLOQUEADOS (OS_USERNAME, USERNAME)
VALUES (v_osuser, v_username);
COMMIT;
EXCEPTION
WHEN OTHERS THEN NULL;
END;
RAISE_APPLICATION_ERROR(-20001, 'Acceso denegado para usuario con esquema BOTICARIO');
END IF;
END IF;
END;
/
6️⃣ Insertar usuarios del S.O. a bloquear
✅ Inserción directa
INSERT INTO SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO (OS_USERNAME)
VALUES ('DOCTORCHAPATIN');
COMMIT;
🛡️ Inserción condicional
DECLARE
v_count PLS_INTEGER;
BEGIN
FOR usr IN (
SELECT 'DOCTORCHAPATIN' AS username FROM DUAL
) LOOP
SELECT COUNT(*) INTO v_count
FROM SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO
WHERE OS_USERNAME = usr.username;
IF v_count = 0 THEN
INSERT INTO SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO (OS_USERNAME)
VALUES (usr.username);
END IF;
END LOOP;
END;
/
7️⃣ Eliminar usuarios bloqueados
DELETE FROM SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO
WHERE OS_USERNAME = 'DOCTORCHAPATIN';
COMMIT;
8️⃣ Limpiar tabla de auditoría
Opción 1: Borrado con conservación de espacio
DELETE FROM SEGURIDAD.LOG_ACCESOS_BLOQUEADOS;
COMMIT;
Opción 2: Truncado (más rápido)
TRUNCATE TABLE SEGURIDAD.LOG_ACCESOS_BLOQUEADOS;
9️⃣ Consultar registros
Usuarios bloqueados
SELECT * FROM SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO ORDER BY OS_USERNAME;
Auditoría de accesos denegados
SELECT * FROM SEGURIDAD.LOG_ACCESOS_BLOQUEADOS ORDER BY FECHA DESC;
🔁 Rollback completo (Reversión)
-- Eliminar trigger
DROP TRIGGER SISTEMA.TRG_BLOQUEO_USUARIOS_BOTICARIO;
-- Eliminar tablas
DROP TABLE SEGURIDAD.LOG_ACCESOS_BLOQUEADOS PURGE;
DROP TABLE SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO PURGE;
-- Eliminar usuario
DROP USER SEGURIDAD CASCADE;
🎁 BONUS: Paquete PL/SQL para Gestión de Usuarios
CREATE OR REPLACE PACKAGE SEGURIDAD.PKG_GESTION_BLOQUEOS AS
PROCEDURE AGREGAR_USUARIO(p_os_user VARCHAR2);
PROCEDURE ELIMINAR_USUARIO(p_os_user VARCHAR2);
FUNCTION ESTA_BLOQUEADO(p_os_user VARCHAR2) RETURN BOOLEAN;
END;
/
CREATE OR REPLACE PACKAGE BODY SEGURIDAD.PKG_GESTION_BLOQUEOS AS
PROCEDURE AGREGAR_USUARIO(p_os_user VARCHAR2) IS
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO
WHERE OS_USERNAME = UPPER(p_os_user);
IF v_count = 0 THEN
INSERT INTO SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO (OS_USERNAME)
VALUES (UPPER(p_os_user));
COMMIT;
END IF;
END;
PROCEDURE ELIMINAR_USUARIO(p_os_user VARCHAR2) IS
BEGIN
DELETE FROM SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO
WHERE OS_USERNAME = UPPER(p_os_user);
COMMIT;
END;
FUNCTION ESTA_BLOQUEADO(p_os_user VARCHAR2) RETURN BOOLEAN IS
v_count NUMBER;
BEGIN
SELECT COUNT(*) INTO v_count
FROM SEGURIDAD.USUARIOS_BLOQUEADOS_BOTICARIO
WHERE OS_USERNAME = UPPER(p_os_user);
RETURN v_count > 0;
END;
END;
/
✅ Con este paquete puedes hacer llamadas como:
EXEC SEGURIDAD.PKG_GESTION_BLOQUEOS.AGREGAR_USUARIO('USUARIOX');
⚠️ Notas Finales
El trigger impide el acceso a cualquier sesión que intente conectarse como BOTICARIO si el
OS_USER
está registrado como bloqueado.Todo intento denegado es auditable, quedando trazado en
LOG_ACCESOS_BLOQUEADOS
.La solución es reversible y extensible: puedes integrarla con alertas, jobs automáticos, etc.
🧠 Conclusión
Este procedimiento permite a administradores Oracle mantener control granular, auditable y automatizable sobre accesos al esquema BOTICARIO. Una medida esencial en entornos donde la trazabilidad y el cumplimiento de políticas de seguridad son clave.
📡 ¿Te gustó esta receta de monitoreo técnico?
Explora más artículos, diagnósticos y herramientas en https://laboticadeldba.com, el espacio donde los colegas DBAs encuentran materia alquímica para hacer oro con sus entornos Oracle y resguardar su seguridad.
🧪 Comparte este artículo con tus colegas y no dejes tu infraestructura sin receta.
En La Botica del DBA te ofrecemos los mejores elixires para el rendimiento, la seguridad y la gobernabilidad de tus datos, preparados con experiencia, precisión y pasión por la tecnología.
💊 Porque todo buen sistema merece una buena dosis de monitoreo inteligente, automatización efectiva y control preventivo.
🔍 Desde un trigger bien afinado hasta un tuning quirúrgico, aquí destilamos soluciones reales para retos reales.
Síguenos, experimenta y comparte — y que nunca falte botica en tu administración de bases de datos diaria.
Subscribe to my newsletter
Read articles from Mauricio Muñoz Palma directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by

Mauricio Muñoz Palma
Mauricio Muñoz Palma
Bienvenidos a "La Botica del DBA" Donde la pasión por las bases de datos Oracle se transforma en conocimiento y excelencia. Este espacio está diseñado para ser el laboratorio de ideas, soluciones y estrategias que todo DBA necesita para optimizar, innovar y liderar en el mundo de las bases de datos. Desde los fundamentos hasta las últimas tendencias, aquí encontrarás guías prácticas, análisis profundos y herramientas que impulsarán tu carrera y tus proyectos al siguiente nivel.