Implementiert Kennwortregeln.
Zeichenfolge
Leere Zeichenfolge (keine Funktion wird aufgerufen, wenn ein Kennwort eingestellt ist).
Kann für eine einzelne Verbindung oder für PUBLIC gesetzt werden. Sie müssen das SET ANY SECURITY OPTION-Systemprivileg haben, um diese Option setzen zu können.
Die durch diese Option angegebene Funktion wird automatisch aufgerufen, wenn ein Nicht-NULL-Kennwort erstellt oder festgelegt wird. Die angegebene Funktion wird nicht für Benutzer aufgerufen, in deren Login-Richtlinie die change_password_dual_control-Option aktiviert ist. Um zu verhindern, dass ein Benutzer die Funktion außer Kraft setzen kann, stellen sie den Optionswert auf Eigentümer.Funktionsname ein. Ein Benutzer kann eine Verbindung mit der Datenbank nur herstellen, wenn er ein Kennwort hat.
Nachdem die Anweisung validiert wurde, die für das Erstellen oder Einstellen eines Kennwort verwendet wurde, wird die Funktion aufgerufen, um das Kennwort anhand der angegebenen Regeln zu überprüfen. Wenn das Kennwort den angegebenen Regeln entspricht, gibt die Funktion NULL zurück, um einen Erfolg anzuzeigen, und die aufrufende Anweisung wird ausgeführt. Andernfalls wird eine Nicht-NULL-Zeichenfolge zurückgegeben und als Grund für den Fehler angezeigt.
Die Kennwort-Überprüfungsfunktion akzeptiert zwei Parameter: Benutzername VARCHAR(128) und Neues_Kennwort VARCHAR(255). Sie gibt einen Wert vom Typ VARCHAR(255) zurück.
Es wird empfohlen, dass Sie die Anweisung ALTER FUNCTION Funktionsname SET HIDDEN auf die Kennwort-Überprüfungsfunktion anwenden, um zu gewährleisten, dass sie nicht mithilfe des Debuggers schrittweise durchgegangen werden kann.
Wenn die Option verify_password_function gesetzt ist, ist es nicht zulässig, mehr als eine Benutzer-ID bzw. Kennwort mit der Anweisung GRANT CONNECT anzugeben.
Benutzer-IDs dürfen Folgendes nicht:
Kennwörter berücksichtigen die Groß- und Kleinschreibung. Im Übrigen gilt Folgendes:
Weitere Informationen zu Kennwortregeln finden Sie unter Kennwortüberprüfung verwenden.
Das folgende Beispiel definiert eine Tabelle und eine Funktion und legt einige Login-Richtlinienoptionen fest. Zusammen implementieren sie erweiterte Kennwortregeln, einschließlich der Erzwingung bestimmter Zeichentypen im Kennwort, des Verbots einer Kennwort-Wiederverwendung und ablaufender 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: %SQLANYSAMP16%\SQLAnywhere\SQL\verify_password.sql.
-- only DBA should have privileges 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 lowercase 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 DEFAULT 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. ALTER LOGIN POLICY DEFAULT password_grace_time = 30; -- Five consecutive failed login attempts results in a non-DBA -- user ID being locked. ALTER LOGIN POLICY DEFAULT max_failed_login_attempts = 5; |
![]() |
Kommentieren Sie diese Seite in DocCommentXchange.
|
Copyright © 2013, SAP AG oder ein SAP-Konzernunternehmen. - SAP Sybase SQL Anywhere 16.0 |