Normalerweise lassen sich die Benutzer Passwörter in Microsoft Dynamics NAV (Navision) nicht abfragen, da diese verschlüsselt in der User Tabelle gespeichert werden. Mit einem kleinen Trick kann man aber auch selbst Passwort Abfragen programmieren um so z.B. sensible Bereiche zusätzlich zu schützen.
Der Trick ist, dass man die abzufragende User/Passwort Kombination temporär in den User Table (2000000002) einfügt. Dadurch wird das Passwort verschlüsselt und man kann es mit dem bereits gespeicherten Passwort vergleichen.
EncryptPassword(ID : Text[20];NewPWD : Text[10]) ResPWD : Text[20]
UserRec."User ID" := ID;
UserRec.VALIDATE(Password,NewPWD);
ResPWD := UserRec.Password;
Die Funktion “EncryptPassword” bekommt die Text(!) Variablen ID und NewPWD mit und gibt als Rückgabewert den Wert ResPWD aus. UserRec ist eine Record Variable der Tabelle 2000000002. Da die Verschlüsselung offensichtlich den Usernamen mit einbezieht, ist wichtig dass auch dieser mit angegeben wird. Wichtig ist, dass das Feld Password mit VALIDATE geschrieben wird und dass der Record NICHT mit Insert eingefügt wird.
Das verschlüsselte Passwort kann dann z.B. wie folgt geprüft werden:
UserRec.GET(ID);
IF UserRec.Password = EncryptPWD(ID,PWD) THEN
MESSAGE('Password OK')
ELSE
MESSAGE('Password wrong');
Zu beachten ist noch dass alle Benutzer im NAV standardmäßig Lesezugriff auf den User Table haben. Können diese also z.B. einen Report generieren der auf die User Tabelle zugreift, sehen Sie dort die verschlüsselten Passwörter. Diese sehen z.B. so ~ö3W²Ù)!b[) aus.
NAV verschlüsselt keine Zeichenfolgen die mit einer Tilde ~ beginnen, daher könnte sich ein User bei der oben dargestellten Methode mit dem bereits verschlüsselten Paswort anmelden und Zugriff auf die Funktion erhalten. Ein schneller Workaround wäre abzuprüfen ob das eingegebene Passwort (vor der Verschlüsselung) mit ~ beginnt, um dann ggf. einen Fehler auszugeben.