Gebruikersbeheer in Firebird 3.0
SQL Language Extension: CREATE/ALTER/CREATE_OR_ALTER/DROP USER
Implementeert de mogelijkheid om gebruikers te beheren vanuit een reguliere databaseverbinding.
Auteur:
Alex Peshkoff [email protected]
Syntax is:
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 ];
waarbij OPTIES een lijst is van de volgende opties:
- PASSWORD ‘wachtwoord’
- FIRSTNAME ‘voornaam’
- MIDDLENAME ’tussenvoegsel'
- LASTNAME ‘achternaam’
- ACTIVE
- INACTIVE
- USING PLUGIN name
en elke TAG kan een van twee vormen hebben:
name = ’tekenreekswaarde'
of:
DROP name
waarbij NAME een geldige SQL-identificatie is.
Beschrijving:
Maakt het mogelijk om gebruikers in de beveiligingsdatabase toe te voegen, te wijzigen en te verwijderen met behulp van SQL-taal.
Firebird ondersteunt sinds versie 3.0 meerdere beveiligingsdatabases. Het gsec-hulpprogramma en de services API
ondersteunen dit niet en het gebruik ervan om gebruikers te beheren wordt afgeraden.
CREATE- en DROP-clausules zijn alleen beschikbaar voor SYSDBA (of een andere gebruiker met de RDB$ADMIN-rol in de beveiligingsdatabase). Een gewone gebruiker kan zijn eigen wachtwoord, uitgebreide namen en tags wijzigen via ALTER. Een poging om
een andere gebruiker te wijzigen zal mislukken. Ook zal een poging om jezelf inactief of actief te maken mislukken. Om te voorkomen dat je elke keer je naam moet typen, is er de vereenvoudigde vorm ALTER CURRENT USER.
Ten minste één van PASSWORD, FIRSTNAME, MIDDLENAME, LASTNAME, ACTIVE, INACTIVE of TAGS moet aanwezig zijn in een ALTER USER-instructie. Let ook op dat de PASSWORD-clausule vereist is bij het aanmaken van een nieuwe gebruiker.
De PASSWORD-clausule is redelijk vanzelfsprekend. De clausules FIRSTNAME, MIDDLENAME en LASTNAME ook, maar kunnen ook worden gebruikt om korte informatie over een gebruiker op te slaan. De clausules INACTIVE/ACTIVE worden gebruikt om de login van een gebruiker op de server uit te schakelen zonder hem uit de lijst te verwijderen, en om die mogelijkheid weer te herstellen. De USING PLUGIN-clausule maakt het mogelijk om niet alleen met gebruikers van de standaard beheerplugin (eerste vermeld in de UserManager-parameter in firebird.conf) te werken, maar ook met andere. Het gsec-hulpprogramma en de services API ondersteunen geen meerdere gebruikersbeheerplugins - de standaard wordt altijd gebruikt.
TAGS is een lijst van door de eindgebruiker gedefinieerde attributen. De lengte van de waarde mag niet meer dan 255 bytes bedragen.
Het toekennen van een waarde aan een naam stelt een nieuwe tag in of wijzigt een bestaande tag. Gebruik de DROP-optie om de tag te verwijderen.
Het instellen van een lijst met tags voor de gebruiker behoudt eerder ingestelde tags als ze momenteel niet worden genoemd.
Let op - UID/GID, ingevoerd via het verouderde gsec, worden in de SQL-interface als tags behandeld.
Om de lijst met gebruikers te bekijken, selecteert u uit de virtuele tabellen SEC$USERS en SEC$USER_ATTRIBUTES.
Voorbeelden (veronderstel UserManager=Srp,Legacy_UserManager in firebird.conf):
Algemeen:
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;
Werken met 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
Weergave van de gebruikerslijst:
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
Let op!
Deze functionaliteit is sterk afhankelijk van de gebruikersbeheerplugin. Houd er rekening mee dat sommige opties worden genegeerd bij gebruik van de verouderde gebruikersbeheerplugin.