Credentials dynamically

Is there a way to pass database credentials dynamically when connecting to Microsoft SQL Server? Each request to the project can come from a different client, and I have too many clients to put them all in a map. I already receive the database credentials (for SQL Server) with each request — I just need to know how to pass them dynamically to establish the connection.

Hi @jw_sistemas Welcome!
Yes, you can use expressions in the credentials field, just swtich your fields to expression mode and then enter your values:

{{ $json.db_host }}
{{ $json.db_user }}
{{ $json.db_password }}

somewhat like that i suppose, and as workflow data is divided into runs so there would not be any mismatch, HOWEVER, this works for populating fields with content dynamically, not switching between multiple credentials as that is not supported currently.

@jw_sistemas wie Anshul bereits erwähnt hat, kann sein Ansatz mit expressions-in-cred-field nicht zwischen mehreren Credentials wechseln — für diesen Fall ist ein Code-Node mit dem mssql-Paket die Lösung, wobei host/user/pass direkt aus $json kommen, sodass jede Anfrage ihre eigene Verbindung öffnet:

const sql = require('mssql');
const c = $input.first().json;
await sql.connect({
  server: c.host,
  user: c.user,
  password: c.pass,
  database: c.db
});
const r = await sql.query(c.query);
return r.recordset;

NODE_FUNCTION_ALLOW_EXTERNAL=mssql muss in deiner n8n-Umgebung gesetzt sein, sonst schlägt der require fehl.

@achamm nur eine Frage dazu.

Können wir tatsächlich Pakete ‘require’ und der Code-Node wird sie automatisch vor der Ausführung abrufen? Ich dachte, wir müssten sie vorher in der Host-Umgebung oder im Docker-Image installieren?

Unter der Annahme, dass die .env-Variable gesetzt ist, um alle externen Pakete zuzulassen.

(Falls du @jw_sistemas bei der Addition von benutzerdefinierten Paketen zu deiner n8n-Instanz Hilfe brauchst, schreib hier einfach Bescheid)