Benutzerverwaltung in Firebird 3.0
SQL Language Extension: CREATE/ALTER/CREATE_OR_ALTER/DROP USER
Implementiert die Möglichkeit, Benutzer über eine reguläre Datenbankverbindung zu verwalten.
Autor:
Alex Peshkoff [email protected]
Die Syntax lautet:
CREATE USER name [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER USER name [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER CURRENT USER [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] CREATE OR ALTER USER name [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] DROP USER name [ USING PLUGIN name ];
wobei OPTIONS eine Liste der folgenden Optionen ist:
- PASSWORD ‘password’
- FIRSTNAME ‘firstname’
- MIDDLENAME ‘middlename’
- LASTNAME ’lastname'
- ACTIVE
- INACTIVE
- USING PLUGIN name
und jedes TAG kann eine von zwei Formen haben:
name = ‘string value’
oder:
DROP name
wobei NAME ein beliebiger gültiger SQL-Bezeichner ist.
Beschreibung:
Ermöglicht das Hinzufügen, Ändern und Löschen von Benutzern in der Sicherheitsdatenbank mithilfe der SQL-Sprache.
Firebird unterstützt seit Version 3.0 mehrere Sicherheitsdatenbanken. Das Dienstprogramm gsec und die Services-API
unterstützen dies nicht, und ihre Verwendung zur Benutzerverwaltung ist veraltet.
CREATE- und DROP-Klauseln sind nur für SYSDBA (oder einen anderen Benutzer mit der Rolle RDB$ADMIN in der Sicherheitsdatenbank) verfügbar. Ein normaler Benutzer kann sein eigenes Passwort, seine vollständigen Namen und Tags mit ALTER ändern. Der Versuch, einen
anderen Benutzer zu ändern, schlägt fehl. Ebenso schlägt der Versuch fehl, sich selbst inaktiv oder aktiv zu setzen. Um die Eingabe des eigenen Namens jedes Mal zu vermeiden, gibt es die vereinfachte Form ALTER CURRENT USER.
Mindestens eine der Klauseln PASSWORD, FIRSTNAME, MIDDLENAME, LASTNAME, ACTIVE, INACTIVE oder TAGS muss in einer ALTER USER-Anweisung vorhanden sein. Beachten Sie außerdem, dass die PASSWORD-Klausel beim Erstellen eines neuen Benutzers erforderlich ist.
Die PASSWORD-Klausel ist weitgehend selbsterklärend. Die Klauseln FIRSTNAME, MIDDLENAME und LASTNAME ebenfalls, können aber auch verwendet werden, um beliebige kurze Informationen über einen Benutzer zu speichern. Die Klauseln INACTIVE/ACTIVE werden verwendet, um die Anmeldung eines Benutzers am Server zu deaktivieren, ohne ihn aus der Liste zu entfernen, und um diese Fähigkeit wiederherzustellen. Die USING PLUGIN-Klausel ermöglicht es, nicht nur mit dem Standard-Verwaltungsplugin (dem ersten im Parameter UserManager in firebird.conf aufgeführten) zu arbeiten, sondern auch mit anderen. Das Dienstprogramm gsec und die Services-API unterstützen keine mehrfachen Benutzerverwaltungs-Plugins - das Standard-Plugin wird immer verwendet.
TAGS ist eine Liste von benutzerdefinierten Attributen. Die Länge des Werts sollte 255 Bytes nicht überschreiten.
Das Zuweisen eines Werts zu einem Namen setzt ein neues Tag oder ändert ein vorhandenes. Zum Entfernen des Tags verwenden Sie die Option DROP.
Das Festlegen einer Liste von Tags für den Benutzer behält zuvor gesetzte Tags bei, sofern sie nicht aktuell erwähnt werden.
Hinweis - UID/GID, die über das veraltete gsec eingegeben werden, werden in der SQL-Schnittstelle als Tags behandelt.
Um die Benutzerliste anzuzeigen, wählen Sie bitte aus den virtuellen Tabellen SEC$USERS und SEC$USER_ATTRIBUTES aus.
Beispiele (angenommen UserManager=Srp,Legacy_UserManager in firebird.conf):
Allgemein:
CREATE USER alex PASSWORD 'test'; ALTER USER alex SET FIRSTNAME 'Alex' LASTNAME 'Peshkoff'; CREATE OR ALTER USER alex SET PASSWORD 'IdQfA'; DROP USER alex; ALTER CURRENT USER SET PASSWORD 'SomethingLongEnough' USING PLUGIN srp;
Arbeiten mit Tags:
ALTER USER alex SET TAGS (a='a', b='b'); NAME VALUE ================ ============================== A a B b ALTER USER alex SET TAGS (b='x', c='d'); NAME VALUE ================ ============================== A a B x C d ALTER USER alex SET TAGS (drop a, c='sample'); NAME VALUE ================ ============================== B x C sample
Anzeigen der Benutzerliste:
SELECT CAST(U.SEC$USER_NAME AS CHAR(20)) LOGIN, CAST(A.SEC$KEY AS CHAR(10)) TAG, CAST(A.SEC$VALUE AS CHAR(20)) "VALUE", U.SEC$PLUGIN "PLUGIN" FROM SEC$USERS U LEFT JOIN SEC$USER_ATTRIBUTES A ON U.SEC$USER_NAME = A.SEC$USER_NAME AND U.SEC$PLUGIN = A.SEC$PLUGIN;
LOGIN TAG VALUE PLUGIN
==================== ========== ==================== =============================== SYSDBA <null> <null> Srp ALEX B x Srp ALEX C sample Srp SYSDBA <null> <null> Legacy_UserManager
Achtung!
Diese Funktion hängt stark vom Benutzerverwaltungs-Plugin ab. Beachten Sie, dass einige Optionen bei Verwendung des Legacy-Benutzerverwaltungs-Plugins ignoriert werden.