Anleitung: Der WinCC User Administrator stellt standardmäßig keine Funktion zur Verfügung, mit der ein aktuell angemeldeter Benutzer durch eine Passwortabfrage überprüft werden kann. WinCC verfügt über Funktionen, mit denen ein Anmeldevorgang ausgelöst bzw. durchgeführt werden kann. Das führt jedoch dazu, dass eine komplett neue Anmeldung erfolgt, auch wenn bei der Anmeldung der aktuelle Nutzername wieder verwendet wird. Eine Anmeldung ist in der Regel mit einem Bildwechsel (Aufruf des Startbildes) und dem Schließen aller Bildbausteine verbunden.
Ziel: Oft besteht die Anforderung, unmittelbar vor dem Ausführen einer Schalthandlung den aktuell angemeldeten Benutzer durch eine zusätzliche Passwortabfrage zu überprüfen. Es soll keine erneute Anmeldung durchgeführt werden. Nach erfolgreicher Verifizierung des Benutzers soll die Schalthandlung ausgeführt und der Bedieneingriff als Bedienmeldung gespeichert werden. Dadurch kann ein nicht berechtigter Bedieneingriff, z.B. während einer kurzen Abwesenheit des aktuell angemeldeten Benutzers ohne Abmeldung vom System, verhindert werden.
Lösung:
Bei Verwendung der Option SIMATIC Logon bis zur Version V1.2 SP1 stehen die Funktionen der so genannten AUA-Schnittstelle zur Verfügung, um auf die SIMATIC Logon Benutzerverwaltung zuzugreifen. Dieser Beitrag verwendet die Funktionen "VerifyUser()" und "GetSignature()" der AUA-Schnittstelle, um den aktuell angemeldeten Benutzer zur Runtime zu überprüfen.
Achtung! Beachten Sie, dass die AUA-Schnittstelle ab der Version SIMATIC Logon V1.3 nicht mehr unterstützt wird. Der Beitrag 24458155 zeigt, wie Sie in diesem Fall vorgehen.
| Nr. |
Beschreibung |
| 1 |
"VerifyUser()" Die Funktion ist wie folgt deklariert:
LPCSTR WINAPI VerifyUser (LPCTSTR UserID, LPCSTR Password);
Der Funktion werden die Parameter "UserID" und "Password" als Zeichenketten übergeben. Die Funktion prüft für die übergebene "UserID" (Benutzername) das übergebene Passwort. Bei erfolgreicher Überprüfung des Passwortes gibt die Funktion die Zeichenkette "ok" und im Fehlerfall einen Fehlertext zurück. |
| 2 |
"GetSignature()" Die Funktion ist wie folgt deklariert:
BOOL (LPCTSTR UserID);
Der Funktion wird der Parameter "UserID" als Zeichenketten übergeben. Die Funktion öffnet den Dialog "Electronic Signature" und belegt das Feld "UserID" mit der übergebenen "UserID" vor.
  Bild 01
Der Anwender kann nun im Eingabefeld "Password" das entsprechende Passwort eingeben. Bei Betätigung der Schaltfläche "Sign" überprüft die Funktion die übergebene UserID und Passwort. Bei erfolgreicher Verifizierung des angegebenen Nutzers wird der Dialog geschlossen und die Funktion gibt den Wert "TRUE" zurück. Bei nicht erfolgreicher Verifizierung bleibt der Dialog "Electronic Signature" geöffnet. Das Passwort kann erneut eingegeben werden. Bei Betätigen der Schaltfläche "Cancel" wird der Dialog geschlossen und die Funktion gibt den Wert "FALSE" zurück. |
Dieser Beitrag stellt Ihnen das Script "SimaticLogonVerifyUser()" zur Verfügung, um eine Benutzerüberprüfung zur Runtime durchzuführen. Das Script setzt die Option SIMATIC Logon voraus. Die folgende Tabelle beschreibt, wie Sie dieses Script verwenden und Ihren Wünschen anpassen können.
| Schritt |
Beschreibung |
| 1 |
C-Funktion zur Benutzerüberprüfung in das WinCC-Projekt kopieren
Der folgende Download enthält die Datei "simaticlogonverifyuser.fct".
WinCC_VerifyUser.zip ( 3 KB )
Kopieren Sie diese Datei in das Verzeichnis "library" in Ihrem WinCC-Projektverzeichnis. Öffnen Sie den Editor "Global Script C" und führen Sie den Menübefehl "Optionen > Header neu generieren" durch. Danach steht Ihnen die Funktion "SimaticLogonVerifyUser()" als Projekt-Funktion zur Verfügung. Dieser Schritt muss auch im WinCC-Projekt eines Clients (MultiClients) durchgeführt werden, wenn die Bedienung mit Benutzerüberprüfung auf einem Client erfolgt.
Hinweis: Nachfolgend wird der Aufbau der Funktion "SimaticLogonVerifyUser()" beschrieben:
BOOL SimaticLogonVerifyUser(char* pszUserID, char* pszPassword);
Die Funktion prüft, ob in den Parametern "pszUserID" und "pszPassword" gültige Zeichenketten übergeben wurden. Sie übergibt die Werte an die Funktion "VerifyUser()". Für den Fall, dass im Parameter "pszUserID" der Wert "NULL" übergeben wurde, wird der aktuell angemeldete Nutzer ermittelt und übergeben. Bei erfolgreicher Überprüfung durch die Funktion "VerifyUser()" liefert die Funktion den Wert "TRUE" zurück. Schlägt die Überprüfung durch die Funktion "VerifyUser()" fehl, wird die Funktion "GetSignature()" mit dem entsprechenden Nutzer aufgerufen. Gibt der Bediener nun im Dialog "Electronic Signature" das gültige Passwort ein und bestätigt die Eingabe mit der Schaltfläche "Sign", gibt die Funktion den Wert "TRUE" zurück. Wird der Dialog "Electronic Signature" abgebrochen, liefert die Funktion den Wert "FALSE". |
| 2 |
C-Funktion zur Benutzerüberprüfung verwenden
Sie können die Funktion "SimaticLogonVerifyUser()" direkt im Prozessbild bzw. in einem Bildbaustein verwenden. Das folgende Bild zeigt den Aufruf der Funktion bei Mausklick auf einen Button.
  Bild 02
Passen Sie dieses Beispiel Ihren Erfordernissen an. In diesem Beispiel wird nach erfolgreichem Aufruf der Funktion "SimaticLogonVerifyUser()" eine Bedienmeldung ausgelöst und die entsprechende WinCC-Variable zum Einschalten der Pumpe gesetzt.
Hinweis:
Die Funktion "ISALG_OperationLog()" ist hier nur beispielhaft angegeben, um eine Bedienmeldung zu erzeugen. In Beitrags-ID 24325381 finden Sie detaillierte Informationen zum Erzeugen einer Bedienmeldung. Beachten Sie, dass das System beim Erzeugen einer Bedienmeldung den Systemblock "Benutzername" zur Anzeige im WinCC Alarm Control automatisch mit dem aktuell angemeldeten Benutzernamen versorgt. Der Funktion "SimaticLogonVerifyUser()" wird deshalb in diesem Beispiel bewusst der Wert "NULL" im Parameter "pszUserID" übergeben, damit keine Abweichung vom aktuell angemeldeten und dem tatsächlich verifizierten Benutzer besteht. |
|