Configuración

Usuarios (autenticación y autorización por Database)

Esta página describe cómo Anjana Data Platform gestiona la autenticación y la autorización de usuarios a través de la tabla Users del Panel de Configuración, con especial atención al proveedor interno Database.

  • Autenticación (¿quién eres?): verifica la identidad del usuario cuando inicia sesión.

  • Autorización (¿qué puedes hacer?): determina los permisos del usuario a partir de los roles que tenga asignados. La gestión de la autorización (asignación de roles a usuarios en unidades organizativas) se describe en la página Autorización.

Importante: la tabla Users contiene siempre los usuarios que pueden autenticarse en la plataforma, con independencia del proveedor de autenticación configurado (Database, LDAP/AD, Azure EntraID, Google, AWS, etc.). Si un usuario no existe en la tabla Users, no podrá autenticarse, ni siquiera con el rol por defecto.

image-20251201-162500.png
Acceso a la configuración de Usuarios en el Panel de Configuración

Estructura de la tabla Users

La tabla Users almacena la información de cada usuario que puede autenticarse y ser autorizado en la plataforma.

Para visualizar y acceder a la tabla Users dentro del Panel de Configuración, el usuario debe tener un rol con permisos para la acción CREDENTIAL_ADMIN sobre el subtipo ANJANA.

image-20260720-095531.png

Cada usuario se define mediante los siguientes campos:

  • id: identificador único del usuario en la tabla.

  • userName: identificador de inicio de sesión del usuario en la aplicación o en el proveedor de identidades integrado. Es un campo de valor único en la tabla (véase Identificación y autorización del usuario). El userName es, además, el identificador con el que Anjana Data Platform registra la auditoría: cuando la plataforma indica, por ejemplo, que el usuario que ha modificado un término de negocio es lucia.gomez, ese valor es el userName.

  • firstName: nombre del usuario.

  • lastName: apellidos del usuario.

  • email: correo electrónico del usuario. También puede emplearse como identificador de acceso (véase Identificación y autorización del usuario).

  • phone: número de teléfono del usuario.

  • title: cargo del usuario (campo informativo, no obligatorio).

  • Password: hash de la contraseña del usuario en formato BCrypt. El hash es único por usuario, incluso para contraseñas iguales, y puede generarse con cualquier herramienta estándar de BCrypt (véase Comportamiento del campo Password).

  • isServiceUser: booleano que indica si es un usuario de servicio (true) o un usuario nominal (false).

Los atributos de la tabla Users pueden poblarse mediante distintos mecanismos, descritos en el apartado Alta de usuarios: sincronización con el directorio corporativo, alta manual desde el Panel de Configuración o alta mediante API.

Identificación y autorización del usuario

El acceso de un usuario a la plataforma se resuelve en dos fases:

  • Identificación (autenticación): el identificador que devuelve el mecanismo de autenticación se compara indistintamente con los valores de userName y de email de la tabla Users. La comparación no distingue mayúsculas de minúsculas (es case-insensitive): por ejemplo, JGarcia y jgarcia se consideran el mismo valor. Por tanto, un usuario puede quedar identificado tanto por su userName como por su email.

  • Autorización: una vez identificado, el usuario obtiene los permisos de los roles que tenga asignados. Estos roles se resuelven a partir del registro del usuario en la tabla Users (por su Id), no de su userName ni de su email.

La autorización —asignación de roles a usuarios dentro de las unidades organizativas mediante la tabla User-Ou-Roles— se gestiona y documenta en su propia página: Autorización. Esta página (Usuarios) se centra en la autenticación y la identificación del usuario; no detalla el mecanismo de asignación de roles para no duplicar contenido.

Aunque userName es un campo de valor único en la tabla (con restricción de unicidad, incluso insensible a mayúsculas/minúsculas), no es el único identificador válido de acceso: el email cumple la misma función a efectos de identificación. En ambos casos, la identificación es insensible a mayúsculas/minúsculas.

Comportamiento del campo Password

El campo Password almacena el hash BCrypt de la contraseña y presenta el siguiente comportamiento en el Panel de Configuración:

  • En el alta y modificación, el valor introducido por el usuario en el campo Password (el hash) se muestra en claro, sin enmascarar.

  • En la consulta, el valor del hash no se muestra: aparece enmascarado por seguridad.

  • La modificación no permite borrar el contenido de password, solo modificarlo.

  • No se rellena durante la sincronización de usuarios.

image-20260720-130217.png
El campo Password se muestra enmascarado

Los usuarios procedentes de proveedores externos —es decir, los que se autentican mediante su propio proveedor y no mediante Databaseno deben tener la contraseña informada. El campo Password solo es relevante para la autenticación mediante Database, en la que el usuario introduce la contraseña en claro que se valida contra este hash.

Alta de usuarios

Los usuarios pueden incorporarse a la tabla Users mediante tres mecanismos:

Alta manual desde el Panel de Configuración

Método recomendado para crear usuarios de forma individual (ruta Schemas → Users → New):

  1. Pulsar New.

  2. Cumplimentar en el asistente de creación los campos descritos en Estructura de la tabla Users.

  3. Pulsar Save para guardar el usuario o Cancel para descartarlo.

image-20260720-130419.png
El campo Password se muestra en claro durante la creación

Para la autenticación mediante Database, el usuario utilizará como contraseña el valor (antes de la conversión hash en formato BCrypt), que se valida contra el campo Password. Al dar de alta, el hash introducido se muestra el hash en claro (véase Comportamiento del campo Password).

Alta mediante API

Permite automatizar el aprovisionamiento de usuarios desde procesos externos. Consulte la documentación de la API de usuarios de Zeus para más detalle.

Sincronización de usuarios

Obtiene y actualiza la información de los usuarios desde el directorio corporativo. Se ejecuta desde Inicio > Acciones > Sincronizar usuarios del Panel de Configuración y se detalla en la página Aprovisionamiento de usuarios.

La sincronización pobla los campos userName, email, firstName, lastName, phone y title. No rellena el campo Password, ya que estos usuarios se autentican mediante su proveedor externo y no mediante Database.

Modificación de usuarios

La modificación de los atributos de un usuario debe realizarse con precaución.

  1. Acceda a Schemas → Users en el Panel de Configuración; se mostrará el listado de usuarios existentes.

  2. Localice el usuario que desea modificar; puede filtrar por userName, email u otros campos de la tabla.

  3. Pulse el icono del lápiz para abrir el panel de edición.

  4. Modifique los campos necesarios: firstName, lastName, email, phone, title y Password (solo si desea cambiar la contraseña). Tenga en cuenta el comportamiento del campo Password descrito en apartados anteriores.

  5. Guarde los cambios con Save.

Importante:

  • Para que los cambios apliquen de forma inmediata, se recomienda limpiar las cachés desde Inicio > Operaciones de reseteo > Vaciar caché.

  • No se recomienda modificar valores incorporados mediante la sincronización con el sistema de gestión de identidades corporativo, salvo que en dicho sistema no se encuentren informados.

Consideraciones importantes

  • userName: es un campo de valor único (restricción de unicidad, incluso insensible a mayúsculas/minúsculas) y se emplea como identificador de inicio de sesión. No se recomienda modificarlo salvo necesidad excepcional, ya que puede estar referenciado en permisos/roles o en atributos de tipo usuario de las plantillas. Si se modifica: realizar una edición masiva para eliminar las referencias en atributos de tipo usuario; cumplir todas las restricciones del campo (unicidad, longitud, caracteres válidos); el usuario deberá iniciar sesión con el nuevo valor. Recuerde que la identificación también admite el email (véase Identificación y autorización del usuario).

Impacto de cambiar el userName en la auditoría.

Dado que el userName es el identificador que consta en la auditoría, un cambio de userName hace que las acciones posteriores se auditen con el valor nuevo, mientras que los registros de auditoría anteriores conservan el userName antiguo: la auditoría histórica no se reescribe.

  • Cambio de contraseña: modifique el campo Password con un hash BCrypt válido; el usuario usará en el login la contraseña en claro correspondiente a ese hash. En la modificación, el valor del hash aparece enmascarado. No es posible eliminar una password una vez creada, solo modificarla.

  • isServiceUser: campo informativo. No debe modificarse manualmente salvo que el equipo de plataforma lo indique.

Consulta y explotación en base de datos — Visión desarrollador

Además de gestionarse desde el Panel de configuración, la información de los usuarios internos (autenticación por Database) queda almacenada en la tabla zeus.users y puede consultarse en modo lectura para explotarla con fines analíticos. Por ejemplo, permite que el cliente construya su propio data mart, cuadros de mando o informes sobre los usuarios de su plataforma (altas, usuarios de servicio frente a nominales, usuarios por dominio y rol, etc.).

Este apartado está orientado a la consulta (solo lectura) de la información. El alta y la modificación de usuarios deben realizarse siempre desde el Panel de configuración (visión administrador) o mediante la API de usuarios de Zeus, como se describe en los apartados anteriores; no se recomienda escribir directamente sobre las tablas.

Dato sensible: esta tabla contiene credenciales y datos personales.

  • El campo password_hash es una credencial cifrada: no debe incluirse en las consultas de explotación ni exponerse en un datamart, informe o vista.

  • Los campos email, phone, first_name y last_name son datos personales; su tratamiento debe cumplir la normativa de protección de datos aplicable a la organización.

Tabla zeus.users

La información de los usuarios internos se almacena en la tabla zeus.users. Sus columnas, disponibles para su consulta, son:

Columna

Tipo de dato

Descripción

id_user

int4 (INTEGER)

Identificador interno único del usuario (clave primaria).

email

varchar(254)

Correo electrónico del usuario (único si se informa). Dato personal.

first_name

varchar(50)

Nombre del usuario (opcional). Dato personal.

last_name

varchar(50)

Apellidos del usuario (opcional). Dato personal.

password_hash

varchar(60)

Credencial cifrada (hash BCrypt). No debe consultarse ni exponerse en tareas de explotación.

phone

varchar(255)

Teléfono de contacto (opcional). Dato personal.

title

varchar(255)

Cargo/posición del usuario (opcional).

user_name

varchar(50)

Nombre de usuario para login interno (único).

is_service_user

bool

Indica si es un usuario de servicio (valor por defecto false).

previous_login

timestamp

Fecha de último inicio de sesión del usuario.

signed

bool

Indica si el usuario ha firmado el acuerdo de privacidad.

Restricciones e índices relevantes

  • Clave primaria: users_pkey (id_user)

  • Unicidad de email: UNIQUE (email)

  • Unicidad de username: UNIQUE (user_name)

  • Unicidad case-insensitive de username:
    CREATE UNIQUE INDEX unique_lower_username ON zeus.users (lower(user_name::text));
    Esto evita duplicados por mayúsculas/minúsculas (por ejemplo, jgarcia y JGarcia).

Tablas relacionadas para enriquecer las consultas

Para obtener una vista más completa, la tabla de usuarios puede cruzarse con otras tablas del modelo:

  • zeus.user_ou_role: asignación de roles a usuarios por unidad organizativa; permite conocer la autorización de cada usuario (enlazando id_user con user_id).

  • A través de user_ou_role, las tablas zeus."role" (rol) y zeus.organizational_unit (dominio de datos) completan la vista de quién puede hacer qué y dónde.

Ejemplos de consulta

Listado de usuarios sin la credencial (password_hash):

SQL
SELECT id_user,
       user_name,
       first_name,
       last_name,
       email,
       title,
       is_service_user
FROM zeus.users
ORDER BY user_name;

Recuento de usuarios de servicio frente a nominales (útil como métrica para un data mart):

SQL
SELECT is_service_user,
       COUNT(*) AS total
FROM zeus.users
GROUP BY is_service_user;

Usuarios con sus roles y dominios de datos (autorización efectiva):

SQL
SELECT u.user_name,
       ou.alias    AS unidad_organizativa,
       r.role_name AS rol
FROM zeus.users u
JOIN zeus.user_ou_role uor        ON u.id_user = uor.user_id
JOIN zeus.organizational_unit ou  ON uor.ou_id = ou.id_organizational_unit
JOIN zeus."role" r               ON uor.rol_id = r.id_role
ORDER BY u.user_name;

Importante:

  • Utilice un usuario de base de datos con permisos de solo lectura y, preferiblemente, sobre una vista que excluya password_hash y limite los datos personales estrictamente necesarios.

  • El alta y la modificación de usuarios deben realizarse siempre desde el Panel de configuración o la API de usuarios de Zeus, para mantener la integridad (hash de contraseña, unicidad, cachés).

  • Los nombres de esquema, tablas y columnas pueden evolucionar entre versiones de Anjana Data; conviene validarlos antes de construir un data mart o informes sobre esta información.