Temporäres enaio®-Kennwort setzen für Remote-Support

Ein bekanntes Thema im enaio®-Consulting, dem ihr vielleicht auch schon begegnet seid: Ein Nutzer oder eine Nutzerin hat ein Problem mit dem System, das niemand sonst zu haben scheint. Wenn man als hilfsbereiter Consultant per Telefon versucht, das ungewollte Verhalten bei sich zu reproduzieren, verhält sich das System aber plötzlich leider korrekt.

In diesen Situationen wäre es schön, wenn man sich direkt mit den Login-Daten des betroffenen Nutzers im System einwählen könnte, um die gleichen Bedingungen herstellen zu können und die Probleme zu identifizieren.

Die Ausgangssituation kann schnell dazu führen, dass man sich als Consultant fühlt, wie eine Phishing-Mail, mit der aus unbedarften Endnutzern zuerst die Login-Daten und anschliessend die Ersparnisse extrahiert werden. “Könnten Sie mir bitte Ihr Passwort geben?” ist eine Frage, die nicht sehr professionell klingt und eventuell ein ungutes Gefühl hinterlässt.

Ein Script, um den Remote-Support zu erleichtern.

Wir (von der ECMind GmbH) haben also ein Script erstellt, welches das Problem umgeht, ohne dass der Consultant das Passwort des Users gesehen hat.

Voraussetzung hierfür ist, dass in der Benutzerkonfiguration des Admins, der das Problem untersucht, die Systemrolle ‘Server: Ado-Jobs ausführen’ gesetzt ist, so wie unten im Screenshot angezeigt.


Das Recht ‚Server: Ado-Jobs ausführen‘ muss für diesen Nutzer gesetzt sein.

Anwender-Sicht auf die Dinge

Das Script startet per Doppelklick und einem Eingabefeld:

2018-04-30-Change-Password-User-Input
Der Benutzername des Users, dessen Passwort geändert werden soll, kann eingegeben werden.

Der ‚Cancel‘-Button bricht das Script komplett ab.

Nachdem der Benutzernamen des betroffenen Users eingegeben wurde, muss in einer weiteren Maske bestätigt werden, dass das Passwort tatsächlich geändert werden kann:

2018-04-30-Confirm-Change
Fenster zur Bestätigung der Passwort-Änderung

Bei Klick auf ‚No‘ bricht das Script wiederum ab.

Bei Klick auf ‚Yes‘, wird das Passwort auf ‚optimal‘ geändert und der Consultant kann sich mit dem Benutzernamen des Nutzers einloggen.

Es öffnet sich gleichzeitig ein weiteres Fenster, das dem Consultant ermöglicht, das vorherige Passwort wiederherzustellen.

2018-05-02-Restore-Password
Soll das ursprüngliche Passwort wiederhergestellt werden?

Sobald der Consultant das Problem reproduziert hat und den Login nicht mehr benötigt, kann er das Fenster wieder in den Vordergrund holen und mit Klick auf ‚Yes‘ das Passwort wiederherstellen. Sollte der Consultant auf ‚No‘ klicken, bleibt das Passwort des Nutzers auf ‚optimal‘ gesetzt und das ursprüngliche Passwort müsste über den enaio®-Administrator wieder neu gesetzt werden.

Das Script

Hier nun das Helfer-Script, welches ihr gerne nutzen könnt:

Const stdPwd = "#jRDlgEKu8rZaoJdZtWz" + \
    "R0xRz08VaAxfyiYGwxFM5R8OnOccGSs" + \
    "Kq3DRrxcDvsqJicZsz6LGVBNhzKOQzj" + \
    "2+mU/eZ/wGvJMJ54YAJb+T1X4MtfZrh" + \
    "NU5+cSX4rSftZdKNyhLyV9aSM1RtXju" + \
    "lboAG12n4lTEKJyEC/3aVlxkanaGYBG" + \
    "payWz53BUP2e4NXPFs"

Dim MyAX: Set MyAX = CreateObject("Optimal_AS.Application")
Dim ClientDrtSession: Set ClientDrtSession = MyAX.GetDrtSession

Main(): Sub Main
    Dim inUser, origPwd
    Dim selStmnt, updStmnt
    Dim intAnswer

    'Display InputBox to get User for which the Pwd should be changed
    inUser = InputBox ("For which user would you like to change the password?", \
        "Change Password")
    If inUser = "" Then Exit Sub
    selStmnt = "select passwort from sysadm.benutzer where benutzer = '" & inUser & "'"

    'Store Pwd for this User
    origPwd = executeSQLSelect(selStmnt)

    'Change Pwd to "optimal"
    intAnswer = MsgBox ("Would you like to temporarily update the password of user '" & \
        inUser & "' to 'optimal'?", vbYesNo+vbQuestion, "Change Password")
    If intAnswer = vbYes Then
        updStmnt = "update sysadm.benutzer set passwort = '"& stdPwd & \
            "' where benutzer = '" & inUser & "'"
        executeSQL updStmnt 
    Else
        Exit Sub
    End If

    'Restore Password
    intAnswer = MsgBox ("Would you like to restore the original password of user '" & \
        inUser & "'?", vbYesNo+vbQuestion, "Change Password")
    if intAnswer = vbYes Then
        updStmnt = "update sysadm.benutzer set passwort = '"& origPwd("passwort") & \
            "' where benutzer = '" & inUser & "'"
        executeSQL updStmnt 
    Else
        Exit Sub
    End If
End Sub

'Helper Functions
Function ExecuteSQL(ByVal statement)
    Dim job: Set job = ClientDrtSession.CreateJob("ado", "ExecuteSQL") 
    job.addInParam "Command", statement, 1 
    job.addInParam "Flags", "0", 2 
    job.execute
    Set executeSQL=job
End Function 

function executeSQLSelect(ByVal statement)
    Dim job: set job = executeSQL(statement)
    Dim RS: Set RS=CreateObject("ADODB.Recordset") 
    RS.Open(Split(job.GetOutFiles(), ";")(0))   
    set executeSQLSelect=RS
end function