Pyxis Logo
Inicio / Formación IBM / Artículo técnico

Autoridades granulares a nivel de esquema en Db2 11.5.5

Cómo las nuevas autoridades de esquema de Db2 11.5.5 permiten implementar el Principio de Mínimo Privilegio sin recurrir a DBADM ni SECADM.

14 min de lectura
Publicado 2026-05-10
Pyxis editorial team
Califique este artículo
Calificación media: Sin calificación
Su calificación: Sin calificación
visualizaciones: 0
Fondo abstracto de operaciones técnicas

En versiones anteriores a Db2 11.5.5, conceder a un usuario acceso amplio a todos los objetos de un esquema era difícil de hacer de forma precisa. La alternativa práctica era asignar DBADM o SECADM, autoridades que otorgan accesos en un ámbito mucho mayor del necesario. Db2 11.5.5 resuelve este problema con un conjunto de autoridades y privilegios específicos a nivel de esquema, diseñados para implementar el Principio de Mínimo Privilegio de forma directa.

Este artículo es deliberadamente práctico. Cada paso muestra los comandos exactos a ejecutar y las verificaciones a realizar. El lab está diseñado para reproducirse en una instancia Db2 11.5.5 o posterior.

El problema con el modelo anterior

El control de acceso en Db2 se basa en dos conceptos distintos: autoridades, que operan a nivel de instancia o base de datos, y privilegios, que operan a nivel de objeto individual.

El problema clásico surgía cuando un equipo necesitaba gestionar o acceder a todos los objetos de un esquema específico. Las opciones disponibles eran:

  • Asignar DBADM, que da control sobre toda la base de datos
  • Asignar SECADM, que da control sobre toda la política de seguridad
  • Conceder privilegios objeto a objeto, lo que es operacionalmente costoso y difícil de mantener cuando el esquema crece

Ninguna de estas opciones es buena. Las dos primeras violan el Principio de Mínimo Privilegio. La tercera es correcta en teoría pero impracticable cuando un esquema tiene decenas o cientos de objetos.

Lo que construye este lab

Al finalizar el lab tendrá:

  • una base de datos de prueba con un esquema poblado
  • cuatro usuarios con perfiles de acceso distintos
  • la demostración práctica de cada nueva autoridad de esquema
  • la demostración de los nuevos privilegios de esquema con un único GRANT
  • pruebas de verificación que confirman lo que cada usuario puede y no puede hacer
  • una consulta de auditoría sobre SYSCAT.SCHEMAAUTH

Prerrequisitos

Use una instancia Db2 en versión 11.5.5 o posterior.

También necesita:

  • Acceso shell con permisos de DBADM o SECADM para crear usuarios y conceder autoridades
  • El CLP de Db2

Los usuarios del sistema operativo referenciados en el lab deben existir en el sistema antes de ejecutar los GRANT. Ejecute los siguientes comandos como root para crearlos:

useradd -m alice   && echo "alice:passw0rd"   | chpasswd
useradd -m thomas  && echo "thomas:passw0rd"  | chpasswd
useradd -m etl     && echo "etl:passw0rd"     | chpasswd
useradd -m secmgr  && echo "secmgr:passw0rd"  | chpasswd

1. Crear la base de datos y el esquema de prueba

Los siguientes pasos deben ser ejecutados por el propietario de la instancia Db2.

Cree la base de datos de prueba y conéctese a ella:

db2 create database SCHLAB
db2 connect to SCHLAB

La definición del procedimiento requiere un terminador multi-instrucción. Guarde el DDL en un archivo y ejecútelo con db2 -td@:

cat > /tmp/schlab_ddl.sql <<'SQLEOF'
CREATE SCHEMA sales@

CREATE TABLE sales.customers (
  id        INTEGER NOT NULL,
  name      VARCHAR(100),
  email     VARCHAR(100),
  PRIMARY KEY (id)
)@

CREATE TABLE sales.orders (
  id          INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY,
  customer_id INTEGER,
  amount      DECIMAL(10,2),
  PRIMARY KEY (id)
)@

CREATE PROCEDURE sales.register_order (IN p_customer INTEGER, IN p_amount DECIMAL(10,2))
LANGUAGE SQL
BEGIN
  INSERT INTO sales.orders (customer_id, amount)
  VALUES (p_customer, p_amount);
END@
SQLEOF
db2 -td@ -f /tmp/schlab_ddl.sql

Inserte algunos datos de prueba:

db2 "INSERT INTO sales.customers VALUES (1, 'Alice Martin', '[email protected]')"
db2 "INSERT INTO sales.customers VALUES (2, 'Thomas Chen', '[email protected]')"
db2 "INSERT INTO sales.orders (customer_id, amount) VALUES (1, 150.00)"
db2 "INSERT INTO sales.orders (customer_id, amount) VALUES (2, 320.50)"
db2 commit

2. Crear los perfiles de usuario

Trabajaremos con cuatro usuarios que representan perfiles reales:

UsuarioPerfil previsto
aliceAnalista: lectura sobre todo el esquema
etlPipeline ETL: inserción y ejecución en el esquema
thomasPropietario técnico: control total sobre el esquema
secmgrGestor de seguridad: gestión de permisos sin acceso a datos

Conceda CONNECT a la base de datos a todos:

db2 "GRANT CONNECT ON DATABASE TO USER alice"
db2 "GRANT CONNECT ON DATABASE TO USER etl"
db2 "GRANT CONNECT ON DATABASE TO USER thomas"
db2 "GRANT CONNECT ON DATABASE TO USER secmgr"

3. SELECTIN: acceso de lectura al esquema completo

Antes de esta funcionalidad, conceder lectura a todos los objetos del esquema requería un GRANT SELECT por cada tabla y View. Ahora:

db2 "GRANT SELECTIN ON SCHEMA sales TO USER alice"

Verifique como alice:

db2 connect to SCHLAB user alice using passw0rd
db2 "SELECT * FROM sales.customers"
db2 "SELECT * FROM sales.orders"

Ambas consultas deben funcionar. Confirme que alice no puede insertar datos:

db2 "INSERT INTO sales.customers VALUES (3, 'Test User', '[email protected]')"

Este comando debe fallar con SQL0551N: alice no tiene INSERTIN ni INSERT directo sobre la tabla.

Finalice la sesión:

db2 connect reset

4. INSERTIN y EXECUTEIN: pipeline ETL

El usuario etl necesita insertar datos y llamar al stored procedure, pero no debe poder leer datos existentes:

db2 connect to SCHLAB
db2 "GRANT INSERTIN ON SCHEMA sales TO USER etl"
db2 "GRANT EXECUTEIN ON SCHEMA sales TO USER etl"

Verifique como etl:

db2 connect to SCHLAB user etl using passw0rd
db2 "INSERT INTO sales.customers VALUES (3, 'New Customer', '[email protected]')"
db2 "CALL sales.register_order(3, 99.90)"
db2 commit

Ambos deben funcionar. Confirme que etl no puede leer los datos:

db2 "SELECT * FROM sales.customers"

Este comando debe fallar con SQL0551N.

Finalice la sesión:

db2 connect reset

5. SCHEMAADM: control total sobre el esquema

SCHEMAADM es la autoridad más amplia. Otorga control total sobre el esquema sin dar acceso al resto de la base de datos:

db2 connect to SCHLAB
db2 "GRANT SCHEMAADM ON SCHEMA sales TO USER thomas"
db2 "GRANT USE OF TABLESPACE USERSPACE1 TO USER thomas"

SCHEMAADM otorga autoridad sobre los objetos del esquema pero no incluye acceso a tablespaces. El GRANT USE OF TABLESPACE es necesario para que thomas pueda crear nuevas tablas. Sin él, el CREATE TABLE falla con SQL0286N.

Verifique como thomas:

db2 connect to SCHLAB user thomas using passw0rd
db2 "CREATE TABLE sales.campaigns (id INTEGER NOT NULL, name VARCHAR(100), PRIMARY KEY (id))"
db2 "GRANT SELECT ON TABLE sales.campaigns TO USER alice"
db2 "RUNSTATS ON TABLE sales.customers"

Todas estas operaciones deben funcionar. Confirme que thomas no tiene accesos fuera del esquema:

db2 "CREATE TABLE public.test (id INTEGER)"

Este comando debe fallar porque thomas no tiene autoridad sobre otros esquemas.

Finalice la sesión:

db2 connect reset

6. ACCESSCTRL: gestión de permisos sin acceso a datos

ACCESSCTRL a nivel de esquema permite conceder y revocar permisos sobre objetos del esquema sin dar acceso directo a los datos:

db2 connect to SCHLAB
db2 "GRANT ACCESSCTRL ON SCHEMA sales TO USER secmgr"

Verifique como secmgr:

db2 connect to SCHLAB user secmgr using passw0rd
db2 "GRANT SELECT ON TABLE sales.orders TO USER alice"
db2 "REVOKE SELECT ON TABLE sales.orders FROM USER alice"

Ambas operaciones deben funcionar. Confirme que secmgr no puede leer los datos:

db2 "SELECT * FROM sales.customers"

Este comando debe fallar con SQL0551N.

Finalice la sesión:

db2 connect reset

7. Auditar las autorizaciones de esquema

Las concesiones a nivel de esquema son visibles en la View SYSCAT.SCHEMAAUTH. Consulte el estado actual:

db2 connect to SCHLAB
cat > /tmp/schauth.sql <<'SQLEOF'
SELECT
  GRANTEE,
  GRANTEETYPE,
  SCHEMANAME,
  SELECTINAUTH,
  INSERTINAUTH,
  UPDATEINAUTH,
  DELETEINAUTH,
  EXECUTEINAUTH,
  ALTERINAUTH,
  SCHEMAADMAUTH,
  ACCESSCTRLAUTH,
  DATAACCESSAUTH,
  LOADAUTH
FROM SYSCAT.SCHEMAAUTH
WHERE SCHEMANAME = 'SALES'
ORDER BY GRANTEE
;
SQLEOF
db2 -tvf /tmp/schauth.sql

Cada columna muestra Y (concesión directa), G (concesión con capacidad de propagación) o en blanco (sin concesión). Esta consulta es el punto de partida natural para una auditoría de accesos al esquema.

8. Revocar autorizaciones

Todas las concesiones son reversibles con REVOKE:

db2 "REVOKE SELECTIN ON SCHEMA sales FROM USER alice"
db2 "REVOKE INSERTIN ON SCHEMA sales FROM USER etl"
db2 "REVOKE EXECUTEIN ON SCHEMA sales FROM USER etl"
db2 "REVOKE SCHEMAADM ON SCHEMA sales FROM USER thomas"
db2 "REVOKE USE OF TABLESPACE USERSPACE1 FROM USER thomas"
db2 "REVOKE ACCESSCTRL ON SCHEMA sales FROM USER secmgr"

Confirme el estado tras la revocación con la misma consulta a SYSCAT.SCHEMAAUTH.

9. Limpieza

Elimine la base de datos de prueba y los usuarios de sistema creados en los prerrequisitos:

db2 connect reset
db2 drop database SCHLAB

Elimine los usuarios de sistema como root:

userdel -r alice
userdel -r thomas
userdel -r etl
userdel -r secmgr

Conclusiones principales

  • Db2 11.5.5 introduce autoridades de esquema (SCHEMAADM, ACCESSCTRL, DATAACCESS, LOAD) que permiten delegar control total o parcial sobre un esquema sin asignar DBADM ni SECADM.
  • Los nuevos privilegios de esquema (SELECTIN, INSERTIN, UPDATEIN, DELETEIN, EXECUTEIN) eliminan la necesidad de conceder permisos objeto a objeto.
  • El modelo permite implementar el Principio de Mínimo Privilegio de forma práctica y auditable.
  • La visibilidad de las autorizaciones sobre el esquema está disponible en SYSCAT.SCHEMAAUTH y las autorizaciones pueden eliminarse mediante REVOKE.

Documentación útil de IBM

Para profundizar, las referencias de IBM más útiles para este tema son:

Más en esta área

Más en esta área

Volver a formación
Categoría de artículos

Artículos de Db2 LUW

Consulta todos los artículos técnicos de Db2 LUW en una sola página de categoría.

Abrir categoría Db2 LUW