Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » MobiLink - Serveradministration » MobiLink-Ereignisse » Synchronisationsereignisse

 

authenticate_user (Verbindungsereignis)

Angepasste Benutzerauthentifizierung implementieren.

Parameter

In der folgenden Tabelle gibt die Beschreibung den SQL-Datentyp an. Wenn Sie Ihr Skript in Java oder .NET schreiben, müssen Sie den entsprechenden Datentyp benutzen. Weitere Hinweise finden Sie unter SQL-Java-Datentypen und SQL-.NET-Datentypen.

In SQL-Skripten können Sie Ereignisparameter mit ihrem Namen oder mit einem Fragezeichen angeben. Namen und Fragezeichen dürfen jedoch in einem Skript nicht gemischt verwendet werden. Wenn Sie Fragezeichen verwenden, müssen die Parameter in der nachfolgend gezeigten Reihenfolge stehen und sind nur dann optional, wenn keine nachfolgenden Parameter angegeben wurden (z.B. müssen Sie Parameter 1 verwenden, wenn Sie Parameter 2 verwenden möchten). Wenn Sie benannte Parameter verwenden, können Sie beliebige Teilmengen der Parameter in beliebiger Reihenfolge angeben.

Parametername für SQL-Skripten Beschreibung Reihenfolge
s.authentication_status INTEGER. Dies ist ein INOUT-Parameter. 1
s.remote_id VARCHAR(128). Die entfernte ID von MobiLink. Sie können die entfernte ID nur dann referenzieren, wenn Sie benannte Parameter verwenden. Nicht anwendbar
s.username VARCHAR(128). Der MobiLink-Benutzername 2
s.password VARCHAR(128). Das Kennwort für Authentifizierungszwecke. Wenn der Benutzer kein Kennwort eingibt, ist sein Wert NULL. 3
s.new_password VARCHAR(128). Das neue Kennwort, sofern es zum Zurücksetzen des Benutzerkennworts verwendet wird. Wenn der Benutzer sein Kennwort nicht ändert, ist dieser Wert NULL. 4
Standardaktion

Integriertes MobiLink-Benutzerauthenifizierungverfahren verwenden.

Bemerkungen

Der MobiLink-Server führt dieses Ereignis beim Start jeder einzelnen Synchronisation aus. Es wird in einer Transaktion vor der Transaktion begin_synchronization ausgeführt.

Sie können dieses Ereignis verwenden, um das integrierte MobiLink-Authentifizierungsverfahren durch ein angepasstes Verfahren zu ersetzen. Als Grund dafür ist denkbar, dass Sie möglicherweise das Authentifizierungsverfahren Ihres DBMS verwenden oder Funktionen implementieren wollen, die im integrierten MobiLink-Verfahren nicht vorhanden sind, z.B. ein Kennwortablaufdatum oder eine Mindestlänge für das Kennwort.

Im Ereignis authenticate_user werden folgende Parameter verwendet:

  • authentication_status   Der Parameter authentication_status ist erforderlich. Zeigt den gesamten Erfolg der Authentifizierung an und kann einen der folgenden Werte annehmen:

    Zurückgegebener Wert authentication_status Beschreibung
    V <= 1999 1000 Authentifizierung erfolgreich
    1999 < V <= 2999 2000 Authentifizierung erfolgreich, aber das Kennwort läuft in Kürze ab.
    2999 < V <= 3999 3000 Authentifizierung fehlgeschlagen: Kennwort abgelaufen.
    3999 < V <= 4999 4000 Authentifizierung fehlgeschlagen
    4999 < V <= 5999 5000 Authentifizierung fehlgeschlagen, da der Benutzer bereits synchronisiert.
    5999 < V 4000 Wenn der zurückgegebene Wert größer als 5999 ist, interpretiert ihn MobiLink als einen Rückgabewert von 4000.

  • username   Dieser optionale Parameter ist der MobiLink-Benutzername.

    Weitere Hinweise finden Sie unter Entfernte IDs und MobiLink-Benutzernamen in Skripten verwenden.

  • remote_id   Die entfernte ID von MobiLink. Sie können die entfernte ID nur dann referenzieren, wenn Sie benannte Parameter verwenden.

  • password   Dieser optionale Parameter zeigt das Kennwort für Authentifizierungszwecke an. Wenn der Benutzer kein Kennwort eingibt, ist dies NULL.

  • new_password   Dieser optionale Parameter gibt ein neues Kennwort an. Wenn der Benutzer sein Kennwort nicht ändert, ist dieser Parameter NULL.

SQL-Skripten für das Ereignis authenticate_user müssen als gespeicherte Prozedur implementiert werden.

Wenn die beiden Authentifizierungsskripten definiert sind und beide Skripten unterschiedliche authentication_status-Codes zurückgeben, wird der höhere verwendet.

Das Skript authenticate_user wird in einer Transaktion zusammen mit allen Authentifikationskripten ausgeführt. Diese Transaktion schreibt immer fest.

Es gibt vordefinierte Skripten, die Sie für das authenticate_user-Ereignis verwenden können, um die Authentifzierung mit LDAP-, IMAP- und POP3-Servern zu vereinfachen.

Weitere Hinweise finden Sie unter Authentifizierung bei externen Servern.

Siehe auch
SQL-Beispiel

Ein typisches authenticate_user-Skript ist ein Aufruf einer gespeicherten Prozedur. Die Reihenfolge der Parameter im Aufruf muss mit der oben angegebenen Reihenfolge übereinstimmen. Das folgende Beispiel weist das Ereignis mithilfe von ml_add_connection_script der gespeicherten Prozedur my_auth zu.

CALL ml_add_connection_script(
   'ver1', 'authenticate_user', 'call my_auth ( {ml s.username} )'
)

Die folgende gespeicherte Prozedur von SQL Anywhere benutzt nur den Benutzernamen für die Authentifizierung. Sie prüft kein Kennwort. Die Prozedur stellt nur sicher, dass der angegebene Benutzername eine der Mitarbeiter-IDs in der Tabelle ULEmployee ist.

CREATE PROCEDURE my_auth( in @user_name varchar(128) )
BEGIN
  IF EXISTS
  ( SELECT * FROM ulemployee
    WHERE emp_id = @user_name )
  THEN
    MESSAGE 'OK' type info to client;
    RETURN 1000;
  ELSE
    MESSAGE 'Not OK' type info to client;
    RETURN 4000;
  END IF
END
Java-Beispiel

Der folgende Aufruf einer MobiLink-Systemprozedur registriert eine Java-Methode namens authenticateUser als das Skript für das Ereignis authenticate_user, wenn die Skriptversion ver1 synchronisiert wird. Diese Syntax gilt für konsolidierte SQL Anywhere-Datenbanken.

CALL ml_add_java_connection_script(
   'ver1', 'authenticate_user',
   'ExamplePackage.ExampleClass.authenticateUser'
)

Im Folgenden sehen Sie die Java-Beispielmethode authenticateUser. Sie ruft Java-Methoden auf, die das Benutzerkennwort prüfen und gegebenenfalls ändern.

public String authenticateUser( 
  ianywhere.ml.script.InOutInteger authStatus,
  String user, 
  String pwd, 
  String newPwd )
  throws java.sql.sqlException {
  // A real authenticate_user handler would
  // handle more authentication code states.
  _curUser = user;
  if( checkPwd( user, pwd ) ) {  
    // Authentication successful.
    if( newPwd != null ) {  
      // Password is being changed.
      if( changePwd( user, pwd, newPwd ) ) {  
        // Authentication OK and password change OK.
        // Use custom code.
        authStatus.setValue( 1001 );
      } else {  
        // Authentication OK but password
        // change failed. Use custom code.
        java.lang.System.err.println( "user: "
         + user + " pwd change failed!" );
        authStatus.setValue( 1002 ); 
      } 
    } else {  
      authStatus.setValue( 1000 ); 
    } 
  } else {  
    // Authentication failed.
    authStatus.setValue( 4000 ); 
  }
  return ( null );
}
.NET-Beispiel

Der folgende Aufruf einer MobiLink-Systemprozedur registriert eine .NET-Methode namens AuthUser als das Skript für das Verbindungsereignis authenticate_user, wenn die Skriptversion ver1 synchronisiert wird. Diese Syntax gilt für konsolidierte SQL Anywhere-Datenbanken.

CALL ml_add_dnet_connection_script(
   'ver1', 'authenticate_user',
   'TestScripts.Test.AuthUser'
)

Im Folgenden sehen Sie die .NET-Beispielmethode AuthUser. Sie ruft .NET-Methoden auf, die das Benutzerkennwort prüfen und gegebenenfalls ändern.

public string AuthUser( 
  ref int authStatus, 
  string user, 
  string pwd, 
  string newPwd ) {
  // A real authenticate_user handler would
  // handle more authentication code states.
  _curUser = user;
  if( CheckPwd( user, pwd ) ) {  
    // Authentication successful.
    if( newPwd != null ) {  
      // Password is being changed.
      if( ChangePwd( user, pwd, newPwd ) ) {  
        // Authentication OK and password change OK.
        // Use custom code.
        authStatus = 1001;
      } else {  
        // Authentication OK but password
        // change failed. Use custom code.
        System.Console.WriteLine( "user: "
         + user + " pwd change failed!" );
        authStatus = 1002; 
      } 
    } else {  
      authStatus = 1000 ; 
    } 
  } else {  
    // Authentication failed.
    authStatus = 4000; 
  }
  return ( null );
}

Ein ausführlicheres Beispiel für ein authenticate_user-Skript in C# in .NET finden Sie unter .NET-Synchronisationsbeispiel.