¡Hola @rgrzesk! ¡Bienvenido!
Tu plan global:admin no funcionará — el asistente de configuración está protegido por la clave settings userManagement.isInstanceOwnerSetUp = true, no por si existe una fila global:owner, así que degradar al propietario te deja sin propietario y sin acceso a /setup. (global:admin también es un rol con licencia Enterprise.)
Ya que usas Postgres, simplemente sobrescribe el hash bcrypt del usuario. Una columna, nada más modificado, sin redeploy:
1. Genera el hash (n8n usa bcryptjs, costo 10):
docker run --rm node:20-alpine sh -c \
"npm i bcryptjs --silent --prefix /tmp >/dev/null 2>&1 && \
node -e \"console.log(require('/tmp/node_modules/bcryptjs').hashSync('YourNewPass1',10))\""
Usa una contraseña que cumpla las reglas de n8n (8–64 caracteres, 1 número, 1 mayúscula) o no podrás cambiarla en la UI después.
2. Conecta y actualiza:
UPDATE "user"
SET password = '$2b$10$...your hash...'
WHERE email = 'owner@yourdomain.com';
Dos cosas que confunden a la gente: user es una palabra reservada en Postgres y debe estar entre comillas dobles, y el hash debe estar entre comillas simples en tu shell o bash expandirá $2b/$10 y escribirá basura.
Si esa cuenta tenía MFA, también ejecuta SET "mfaEnabled" = false, "mfaSecret" = NULL, "mfaRecoveryCodes" = NULL.
3. Inicia sesión desde una ventana incógnita — n8n deriva parte del JWT de autenticación del hash de contraseña, así que las sesiones antiguas se invalidan y una cookie obsoleta te rechazará. No se necesita reiniciar el contenedor.
Evita n8n user-management:reset aquí: no puedes hacer docker exec en Cloud Run, y borra todas las cuentas de usuario y devuelve la instancia al asistente de configuración. Vale la pena agregar variables de entorno SMTP en tus servicios Cloud Run después para que esto no se repita en toda la flota.