Gestion des utilisateurs dans Firebird 3.0
Extension du langage SQL : CREATE/ALTER/CREATE_OR_ALTER/DROP USER
Implémente la capacité de gérer les utilisateurs à partir d’une connexion régulière à la base de données.
Auteur :
Alex Peshkoff [email protected]
La syntaxe est :
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 ];
où OPTIONS est une liste des options suivantes :
- PASSWORD ‘password’
- FIRSTNAME ‘firstname’
- MIDDLENAME ‘middlename’
- LASTNAME ’lastname'
- ACTIVE
- INACTIVE
- USING PLUGIN name
et chaque TAG peut avoir l’une des deux formes :
name = ‘string value’
ou :
DROP name
où NAME est n’importe quel identifiant SQL valide.
Description :
Permet d’ajouter, de modifier et de supprimer des utilisateurs dans la base de sécurité en utilisant le langage SQL.
Firebird depuis la version 3.0 prend en charge plusieurs bases de sécurité. L’utilitaire gsec et l’API des services
ne les prennent pas en charge et leur utilisation pour gérer les utilisateurs est dépréciée.
Les clauses CREATE et DROP sont disponibles uniquement pour SYSDBA (ou un autre utilisateur, disposant du rôle RDB$ADMIN dans la base de sécurité). Un utilisateur ordinaire peut ALTER son propre mot de passe, ses noms étendus et ses tags. Toute tentative de modification
d’un autre utilisateur échouera. Échouera également toute tentative de se rendre inactif ou actif. Afin d’éviter de saisir votre nom à chaque fois, la forme simplifiée ALTER CURRENT USER est présente.
Au moins une des clauses PASSWORD, FIRSTNAME, MIDDLENAME, LASTNAME, ACTIVE, INACTIVE ou TAGS doit être présente dans une instruction ALTER USER. Notez également que la clause PASSWORD est requise lors de la création d’un nouvel utilisateur.
La clause PASSWORD est suffisamment explicite. Les clauses FIRSTNAME, MIDDLENAME et LASTNAME aussi, mais elles peuvent également être utilisées pour stocker toute information courte sur un utilisateur. Les clauses INACTIVE/ACTIVE sont utilisées pour désactiver la connexion d’un utilisateur au serveur sans le supprimer de la liste, et pour restaurer cette capacité. La clause USING PLUGIN permet de travailler avec des utilisateurs non seulement via le plugin de gestion par défaut (premier listé dans le paramètre UserManager de firebird.conf) mais aussi avec d’autres. L’utilitaire gsec et l’API des services ne prennent pas en charge plusieurs plugins de gestion des utilisateurs - le plugin par défaut est toujours utilisé.
TAGS est une liste d’attributs définis par l’utilisateur final. La longueur de la valeur ne doit pas dépasser 255 octets.
Assigner une valeur à un nom définit un nouveau tag ou modifie un tag existant. Pour supprimer le tag, utilisez l’option DROP.
Définir une liste de tags pour l’utilisateur conserve les tags précédemment définis s’ils ne sont pas mentionnés actuellement.
Remarque - UID/GID, saisis via l’utilitaire déprécié gsec, sont traités comme des tags dans l’interface SQL.
Pour accéder à la liste des utilisateurs, veuillez sélectionner dans les tables virtuelles SEC$USERS et SEC$USER_ATTRIBUTES.
Exemples (supposons UserManager=Srp,Legacy_UserManager dans firebird.conf) :
Générique :
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;
Travail avec les 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
Affichage de la liste des utilisateurs :
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
Attention !
Cette fonctionnalité dépend fortement du plugin de gestion des utilisateurs. Tenez compte du fait que certaines options sont ignorées lors de l’utilisation du plugin de gestion des utilisateurs hérité.