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) » SQL Anywhere Server - Datenbankadministration » Konfiguration Ihrer Datenbank » Datenbankoptionen » Einführung in Datenbankoptionen » Alphabetische Liste der Optionen

 

login_procedure-Option [Datenbank]

Gibt eine Login-Prozedur an, die beim Start Optionen für die Verbindungskompatibilität setzt.

Zulässige Werte

Zeichenfolge

Standardwert

sp_login_environment-Systemprozedur

Bereich

DBA-Berechtigung ist erforderlich.

Bemerkungen

Diese Login-Prozedur ruft die Prozedur "sp_login_environment" zur Laufzeit auf, um die Verbindungseinstellungen für die Datenbank festzulegen. Die Login-Prozedur wird aufgerufen, nachdem alle Überprüfungen, ob die Verbindung eine gültige ist, durchgeführt wurden. Die durch die Option login_procedure angegebene Prozedur wird bei Ereignisverbindungen nicht ausgeführt.

Sie können die Optionseinstellungen der Standarddatenbank anpassen, indem Sie eine neue Prozedur erstellen, und die Prozedur login_procedure die neue Prozedur aufrufen lassen. Diese angepasste Prozedur muss entweder sp_login_environment aufrufen oder feststellen, wann eine TDS-Verbindung auftritt (siehe den sp_login_environment-Standardcode), und sp_tsql_environment direkt aufrufen. Anderenfalls können TDS-basierte Verbindungen unterbrochen werden. Sie dürfen weder sp_login_environment noch sp_tsql_environment bearbeiten.

Eine Fehlermeldung über ein abgelaufenes Kennwort mit dem SQLSTATE 08WA0 kann durch eine benutzerdefinierte Login-Prozedur signalisiert werden, um einem Benutzer mitzuteilen, dass sein Kennwort abgelaufen ist. Durch die Signalisierung des Fehlers können Anwendungen den Fehler prüfen und abgelaufene Kennwörter verarbeiten. Es wird empfohlen, eine Login-Richtlinie zu verwenden, um den Kennwortablauf zu implementieren, und nicht eine Login-Prozedur, die die Fehlermeldung über das abgelaufene Kennwort übermittelt.

Wenn Sie den Verbindungsparameter NewPassword=* verwenden, ist die Signalisierung dieses Fehlers erforderlich, damit die Clientbibliothek zur Eingabe eines neuen Kennwort auffordern kann. Wenn die Prozedur den SQLSTATE 28000 (Benutzer-ID oder Kennwort ungültig) oder SQLSTATE 08WA0 (Kennwort abgelaufen) übergibt, oder die Prozedur mit RAISERROR einen Fehler ausgibt, schlägt das Login fehl und der Benutzer erhält eine Fehlermeldung. Wenn Sie einen anderen Fehler signalisieren oder ein anderer Fehler auftritt, ist die Benutzeranmeldung erfolgreich und eine Meldung wird in das Log des Datenbankservers geschrieben.

Siehe auch
Beispiel

Im folgenden Beispiel wird gezeigt, wie Sie eine Verbindung untersagen, indem der Fehler INVALID_LOGON angezeigt wird.

CREATE PROCEDURE DBA.login_check( )
   BEGIN
      DECLARE INVALID_LOGON EXCEPTION FOR SQLSTATE '28000';
      // Allow a maximum of 3 concurrent connections
      IF( DB_PROPERTY( 'ConnCount' ) > 3 ) THEN
          SIGNAL INVALID_LOGON;
      ELSE
          CALL sp_login_environment;
      END IF;
   END
go

GRANT EXECUTE ON DBA.login_check TO PUBLIC
go

SET OPTION PUBLIC.login_procedure='DBA.login_check'
go

Weitere Hinweise zu einer anderen Methode zum Sperren von Verbindungen finden Sie unter RAISERROR-Anweisung.

Das folgende Beispiel zeigt, wie Sie weitere Verbindungsversuche blockieren können, wenn die Anzahl der fehlgeschlagenen Verbindungen für einen Benutzer innerhalb einer 30-Minuten-Periode die Anzahl 3 übersteigt. Bei jedem Verbindungsversuch innerhalb der Blockierungsperiode wird der Fehler "ungültiges Kennwort" gemeldet, die Verbindungsversuche werden als fehlgeschlagen protokolliert. Das Log wird lange genug aufbewahrt, damit es von einem DBA inspiziert werden kann.

CREATE TABLE DBA.ConnectionFailure(
    pk INT PRIMARY KEY DEFAULT AUTOINCREMENT,
    user_name CHAR(128) NOT NULL,
    tm TIMESTAMP NOT NULL DEFAULT CURRENT TIMESTAMP
)
go 

CREATE INDEX ConnFailTime ON DBA.ConnectionFailure(
    user_name, tm )
go 

CREATE EVENT ConnFail TYPE ConnectFailed
HANDLER
BEGIN
    DECLARE usr CHAR(128);
    SET usr = event_parameter( 'User' );

    // Put a limit on the number of failures logged.
    IF (SELECT COUNT(*) FROM DBA.ConnectionFailure
        WHERE user_name = usr
        AND tm >= DATEADD( minute, -30,
            CURRENT TIMESTAMP )) < 20 THEN
        INSERT INTO DBA.ConnectionFailure( user_name )
            VALUES( usr );
        COMMIT;
        // Delete failures older than 7 days.
        DELETE DBA.ConnectionFailure
        WHERE user_name = usr
        AND tm < dateadd( day, -7, CURRENT TIMESTAMP );
        COMMIT;
    END IF;
END
go

CREATE PROCEDURE DBA.login_check( )
BEGIN
    DECLARE usr CHAR(128);
    DECLARE INVALID_LOGON EXCEPTION FOR SQLSTATE '28000';
    SET usr = CONNECTION_PROPERTY( 'Userid' );
    // Block connection attempts from this user
    // if 3 or more failed connection attempts have occurred
    // within the past 30 minutes.
    IF ( SELECT COUNT( * ) FROM DBA.ConnectionFailure
        WHERE user_name = usr
        AND tm >= DATEADD( minute, -30,
            CURRENT TIMESTAMP ) ) >= 3 THEN
        SIGNAL INVALID_LOGON;
    ELSE
        CALL sp_login_environment;
    END IF;
END
go

GRANT EXECUTE ON DBA.login_check TO PUBLIC
go

SET OPTION PUBLIC.login_procedure='DBA.login_check'
go

Das nachstehende Beispiel zeigt, wie die Meldung Kennwort ist abgelaufen signalisiert werden muss. Es wird empfohlen, eine Login-Richtlinie zu verwenden, um die Benachrichtigung über abgelaufene Kennwörter zu implementieren.

CREATE PROCEDURE DBA.check_expired_login( )
BEGIN
  DECLARE PASSWORD_EXPIRED EXCEPTION FOR SQLSTATE '08WA0';

  IF( Prüfbedingung_für_abgelaufenes_Kennwort ) THEN
      SIGNAL PASSWORD_EXPIRED;
  ELSE
      CALL sp_login_environment;
  END IF;
END;

Hinweise zu Login-Richtlinien finden Sie unter Überblick über die Verwaltung von Login-Richtlinien.