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 » Sicherheit » Datensicherheit gewährleisten » Datenbankzugriff steuern

 

Kennwortsicherheit verbessern

Kennwörter sind ein wichtiger Bestandteil des Systems zur Aufrechterhaltung der Datenbanksicherheit. Kennwörter sind nur dann sicher, wenn sie nur schwer zu erraten sind und nicht auf der Festplatte des Benutzers im Klartext gelesen werden können. SQL Anywhere-Kennwörter berücksichtigen immer die Groß- und Kleinschreibung. Sie können eine Funktion zur Kennwortauthentifizierung mit der Option verify_password_function angeben. Weitere Hinweise finden Sie unter verify_password_function-Option [Datenbank].

Eine Login-Richtlinie implementieren

Verwenden Sie eine Login-Richtlinie, um die Benutzerkennwort-Änderungen zu steuern und um die Anzahl der zulässigen Login-Versuche anzugeben, bevor ein Konto gesperrt wird. Siehe Überblick über die Verwaltung von Login-Richtlinien oder CREATE LOGIN POLICY-Anweisung.

Standardwert für Benutzer-ID und Kennwort ändern

Die Standardbenutzer-ID und das Standard-Kennwort bei einer neu erstellten Datenbank sind DBA bzw. sql. Dieses Kennwort muss geändert werden, bevor Sie ein Deployment der Datenbank zur allgemeinen Verfügung vornehmen.

Mindestlängen für Kennwörter implementieren

Standardmäßig können Kennwörter eine beliebige Länge haben. Um die Sicherheit zu erhöhen, können Sie eine Mindestlänge für alle neuen Kennwörter erzwingen, um kurze (und daher leicht zu erratende) Kennwörter auszuschließen. Sie erreichen dies, indem Sie die Datenbankoption min_password_length auf einen Wert größer als Null setzen. Die folgende Anweisung erzwingt Kennwörter von mindestens 8 Stellen.

SET OPTION PUBLIC.min_password_length = 8;

Weitere Hinweise finden Sie unter min_password_length-Option [Datenbank].

Kennwortablauf implementieren

Standardmäßig laufen Kennwörter niemals ab. Sie können eine Login-Richtlinie verwenden, um den Kennwortablauf zu implementieren. Weitere Hinweise finden Sie unter Überblick über die Verwaltung von Login-Richtlinien.

Keine Kennwörter in ODBC-Datenquellen einschließen

Kennwörter sind der Schlüssel für den Datenbankzugriff. In einer auf Sicherheit bedachten Systemumgebung sollten sie nicht einfach zugänglich sein.

Wenn Sie eine ODBC-Datenquelle oder ein Verbindungsprofil in Sybase Central erstellen, können Sie auch ein Kennwort speichern. Vermeiden Sie es, Kennwörter einzubeziehen, um zu gewährleisten, dass sie von nicht-autorisieren Benutzern nicht eingesehen werden können.

Weitere Hinweise finden Sie unter ODBC-Datenquellen erstellen.

Verschlüsselung von Konfigurationsdateien, die Kennwörter enthalten

Wenn Sie eine Konfigurationsdatei erstellen, können Sie optional Kennwortinformationen aufnehmen. Um Ihre Kennwörter zu schützen, können Sie eine einfache Verschlüsselung der Inhalte der Konfigurationsdateien mit dem Dienstprogramm zum Verschleiern von Dateien [dbfhide] in Betracht ziehen. Weitere Hinweise finden Sie unter Dienstprogramm zum Verschleiern von Dateien (dbfhide).

Kennwortüberprüfung verwenden

Sie können die Option verify_password_function verwenden, um eine Funktion anzugeben, die Kennwortregeln implementiert. Weitere Hinweise finden Sie unter verify_password_function-Option [Datenbank].

Das folgende Beispiel definiert eine Tabelle und eine Funktion und legt einige Login-Richtlinienoptionen fest. Zusammen implementieren sie erweiterte Kennwortregeln wie die Verwendung bestimmter Zeichentypen, das Verbot einer Kennwort-Wiederverwendung und ablaufende Kennwörter. Die Funktion wird vom Datenbankserver mit der Option verify_password_function aufgerufen, wenn eine Benutzer-ID erstellt oder ein Kennwort geändert wird. Die Anwendung kann die von der Option post_login_procedure angegebene Prozedur aufrufen, um mitzuteilen, dass das Kennwort geändert werden sollte, bevor es abläuft.

Der Code für dieses Beispiel ist auch am folgenden Speicherort verfügbar: Beispielverzeichnis\SQLAnywhere\SQL\verify_password.sql. (Hinweise zum Beispielverzeichnis finden Sie unter Beispielverzeichnis.)

-- This example defines a function that implements advanced password rules 
-- including requiring certain types of characters in the password and 
-- disallowing password reuse. The f_verify_pwd function is called by the 
-- server using the verify_password_function option when a user ID is 
-- created or a password is changed.  
--
-- The "root" login profile is configured to expire passwords every 180 days
-- and lock non-DBA accounts after 5 consecutive failed login attempts.
--
-- The application may call the procedure specified by the 
-- post_login_procedure option to report that the password should be changed 
-- before it expires.


-- only DBA should have permissions on this table
CREATE TABLE DBA.t_pwd_history(
        pk          INT         DEFAULT AUTOINCREMENT PRIMARY KEY,
        user_name   CHAR(128),          -- the user whose password is set
        pwd_hash    CHAR(32) );         -- hash of password value to detect
                                        -- duplicate passwords

-- called whenever a non-NULL password is set
-- to verify the password conforms to password rules
CREATE FUNCTION DBA.f_verify_pwd( uid     VARCHAR(128),
                                  new_pwd VARCHAR(255) )
RETURNS VARCHAR(255)
BEGIN
    -- a table with one row per character in new_pwd
    DECLARE local temporary table pwd_chars(
            pos INT PRIMARY KEY,    -- index of c in new_pwd
            c   CHAR( 1 CHAR ) );   -- character
    -- new_pwd with non-alpha characters removed
    DECLARE pwd_alpha_only      CHAR(255);
    DECLARE num_lower_chars     INT;

    -- enforce minimum length (can also be done with
    -- min_password_length option)
    IF length( new_pwd ) < 6 THEN
        RETURN 'password must be at least 6 characters long';
    END IF;

    -- break new_pwd into one row per character
    INSERT INTO pwd_chars SELECT row_num, substr( new_pwd, row_num, 1 )
                            FROM dbo.RowGenerator
                            WHERE row_num <= length( new_pwd );

    -- copy of new_pwd containing alpha-only characters
    SELECT list( c, '' ORDER BY pos ) INTO pwd_alpha_only
        FROM pwd_chars WHERE c BETWEEN 'a' AND 'z' OR c BETWEEN 'A' AND 'Z';

    -- number of lower case characters IN new_pwd
    SELECT count(*) INTO num_lower_chars
        FROM pwd_chars WHERE CAST( c AS BINARY ) BETWEEN 'a' AND 'z';

    -- enforce rules based on characters contained in new_pwd
    IF ( SELECT count(*) FROM pwd_chars WHERE c BETWEEN '0' AND '9' )
           < 1 THEN
        RETURN 'password must contain at least one numeric digit';
    ELSEIF length( pwd_alpha_only ) < 2 THEN
        RETURN 'password must contain at least two letters';
    ELSEIF num_lower_chars = 0
           OR length( pwd_alpha_only ) - num_lower_chars = 0 THEN
        RETURN 'password must contain both upper- and lowercase characters';
    END IF;

    -- not the same as any user name
    -- (this could be modified to check against a disallowed words table)
    IF EXISTS( SELECT * FROM SYS.SYSUSER
                    WHERE lower( user_name ) IN ( lower( pwd_alpha_only ),
                                                  lower( new_pwd ) ) ) THEN
        RETURN 'password or only alphabetic characters in password ' ||
               'must not match any user name';
    END IF;

    -- not the same as any previous password for this user
    IF EXISTS( SELECT * FROM t_pwd_history
                    WHERE user_name = uid
                      AND pwd_hash = hash( uid || new_pwd, 'md5' ) ) THEN
        RETURN 'previous passwords cannot be reused';
    END IF;

    -- save the new password
    INSERT INTO t_pwd_history( user_name, pwd_hash )
        VALUES( uid, hash( uid || new_pwd, 'md5' ) );

    RETURN( NULL );
END;

ALTER FUNCTION DBA.f_verify_pwd SET HIDDEN;
GRANT EXECUTE ON DBA.f_verify_pwd TO PUBLIC;
SET OPTION PUBLIC.verify_password_function = 'DBA.f_verify_pwd';


-- All passwords expire in 180 days.  Expired passwords can be changed
-- by the user using the NewPassword connection parameter.
ALTER LOGIN POLICY root password_life_time = 180;

-- If an application calls the procedure specified by the 
-- post_login_procedure option, then the procedure can be used to warn 
-- the user that their password is about to expire.  In particular, 
-- Interactive SQL and Sybase Central call the 
-- post_login_procedure system procedure.
ALTER LOGIN POLICY root password_grace_time = 30;

-- Five consecutive failed login attempts will result in a non-DBA 
-- user ID being locked.
ALTER LOGIN POLICY root max_failed_login_attempts = 5;