FirebirdSQL logo

L’introduction de la prise en charge de plusieurs bases de données de sécurité dans Firebird a entraîné de nouveaux problèmes qui ne pouvaient pas se produire avec une seule base de données de sécurité globale. Les grappes de bases de données utilisant la même base de données de sécurité ont été séparées de manière efficace. Les mappings permettent d’obtenir la même efficacité lorsque plusieurs bases de données utilisent leur propre base de données de sécurité. Dans certains cas, la gestion est nécessaire pour limiter la communication entre ces clusters. Par exemple :

  • lorsque EXECUTE STATEMENT ON EXTERNAL DATA SOURCE nécessite un échange de données entre clusters ;

  • lorsque l’accès à la base de données SYSDBA à l’échelle du serveur est requis depuis d’autres clusters utilisant des services ;

  • Des problèmes similaires existaient dans Firebird 2.1 et 2.5 sous Windows, en raison de la prise en charge de l’authentification de confiance : il y avait deux listes d’utilisateurs distinctes — une dans la base de données de sécurité, et une dans Windows, dans les cas où elles devaient être liées. Par exemple, le rôle accordé à un groupe Windows est automatiquement attribué aux membres de ce groupe.

La solution unique pour tous ces cas est de créer des règles pour faire correspondre les informations de l’utilisateur connecté aux objets de sécurité internes — CURRENT_USER et CURRENT_ROLE.

Note

Firebird a une règle par défaut globale intégrée : les utilisateurs qui passent les contrôles de la base de données de sécurité sont toujours mappés à n’importe quelle base de données un à un. C’est une règle sûre : il n’est pas logique que la base de données de sécurité ne se fasse pas confiance.

CREATE MAPPING

Destination

Création d’un mapping de l’objet de sécurité.

Disponible en

DSQL

Syntaxe
CREATE [GLOBAL] MAPPING name
  USING {
      PLUGIN plugin_name [IN database]
    | ANY PLUGIN [IN database | SERVERWIDE]
    | MAPPING [IN database]
    | '*' [IN database] }
  FROM { ANY type | type from_name }
  TO { USER | ROLE } [to_name]
Table 1. Paramètre de la clause CREATE MAPPING
Paramètre Description

name

Nom d’affichage. Peut contenir jusqu’à 63 caractères.

plugin_name

Le nom du plug-in d’authentification.

database

Le nom de la base de données dans laquelle l’authentification a eu lieu.

type

Le type d’objet à afficher.

from_name

Le nom de l’objet à afficher.

to_name

Le nom de l’objet (utilisateurs ou rôles) à mettre en correspondance.

L’instruction CREATE MAPPING crée un mapping des objets de sécurité (utilisateurs, groupes, rôles) d’un ou plusieurs plugins d’authentification vers les objets de sécurité internes - CURRENT_USER et CURRENT_ROLE. Le nom du mapping doit être unique parmi les noms de mapping.

Si l’option GLOBAL est présente, le mappage sera appliqué non seulement à la base de données actuelle, mais à toutes les bases de données du même cluster, y compris la base de données de sécurité.

Important

Si des mappings globaux et locaux portent le même nom, vous devez savoir qu’il s’agit d’objets différents.

Note

Le mappage global fonctionne si vous utilisez une base de données Firebird 3 ou supérieure comme base de données de sécurité. Si vous prévoyez d’utiliser une autre base de données, par exemple pour utiliser votre propre fournisseur, vous devez créer une table dans celle-ci et la nommer RDB$MAP avec la même structure que RDB$MAP dans la base de données Firebird 3 et donner un accès en écriture uniquement à SYSDBA.

La clause USING décrit la source du mapping. Il dispose d’un ensemble très complexe d’options :

  • spécifier explicitement un nom de plugin (option PLUGIN plugin_name) signifie que cela ne fonctionnera qu’avec ce plugin ;

  • il peut utiliser n’importe quel plugin disponible (option ANY PLUGIN), même si la source est le produit d’un mapping précédent ;

  • Il est possible de faire en sorte qu’il ne fonctionne qu’avec des plugins à l’échelle du serveur (l’option SERVERWIDE) ;

  • On peut faire en sorte qu’il ne fonctionne qu’avec les résultats de la cartographie précédente (l’option MAPPING) ;

  • Vous pouvez omettre l’utilisation de l’une des méthodes en utilisant un astérisque (*) comme argument ;

  • il peut contenir le nom de la base de données (option IN) à partir de laquelle l’objet FROM est mappé.

    Note

    Cet argument n’est pas valable pour le mappage avec une authentification à l’échelle du serveur.

La clause FROM décrit l’objet affiché. Il prend un argument obligatoire — le type d’objet.

Caractéristiques :

  • lors de l’affichage de noms provenant de plugins, le type est défini par le plugin ;

  • lors de l’affichage d’un produit de mapping précédent, le type ne peut être que USER et ROLE ;

  • si le nom de l’objet est spécifié explicitement, il sera pris en compte dans l’affichage ;

  • Si le mot clé "ANY" est utilisé, les objets de ce type, quel que soit leur nom, seront affichés.

La combinaison de la source (phrase USING) et de l’objet de mapping (phrase FROM) doit être unique, sinon une erreur sera générée. Cela n’est autorisé que si un mappage est global et l’autre local.

La phrase TO spécifie l’utilisateur ou le rôle auquel le mapping sera associé. to_name est un argument facultatif. S’il n’est pas spécifié, le nom original de l’objet mappé sera utilisé comme nom d’objet.

Note

Le mappage local remplace le mappage global avec la même combinaison de source et d’objet de mappage. Cela fonctionne à peu près de la même manière avec les paramètres : les paramètres au niveau de la base de données (databases.conf) remplacent les paramètres globaux (firebird.conf).

Qui peut créer une cartographie

  • SYSDBA;

  • Propriétaire de la base de données (si la cartographie est locale) ;

  • Tout utilisateur connecté avec le rôle RDB$ADMIN ;

  • L’utilisateur root du système d’exploitation Linux.

Clause CREATE MAPPING

Example 1. Activez l’utilisation de l’authentification fiable de Windows sur toutes les bases de données qui utilisent la base de données de sécurité actuelle.
CREATE GLOBAL MAPPING TRUSTED_AUTH
USING PLUGIN WIN_SSPI
FROM ANY USER
TO USER;
Example 2. Active un accès de type SYSDBA pour les administrateurs Windows dans la base de données actuelle.
CREATE MAPPING WIN_ADMINS
USING PLUGIN WIN_SSPI
FROM Predefined_Group
DOMAIN_ANY_RID_ADMINS
TO ROLE RDB$ADMIN;
Note

Le groupe DOMAIN__RANY_RID_ADMINS n’existe pas sous Windows, mais un tel nom sera ajouté par le plugin win_sspi pour assurer une compatibilité ascendante exacte.

Example 3. Permettre à un utilisateur spécifique d’une autre base de données d’accéder à la base de données actuelle sous un nom différent.
CREATE MAPPING FROM_RT
USING PLUGIN SRP IN "rt"
FROM USER U1 TO USER U2;

L’utilisateur U1 authentifié dans la base de données rt sera mappé à l’utilisateur U2.

Important

Les noms des bases de données doivent être placés entre guillemets sur les systèmes d’exploitation qui respectent la casse des noms de fichiers.

Example 4. Activez SYSDBA pour l’ensemble du serveur (à partir de la base de données de sécurité principale) pour l’accès à la base de données actuelle.

Supposons que la base de données utilise une base de données de sécurité non par défaut.

CREATE MAPPING DEF_SYSDBA
USING PLUGIN SRP IN "security.db"
FROM USER SYSDBA
TO USER;
Example 5. Créez une restriction d’autorisation pour les utilisateurs qui se connectent avec le plugin d’authentification ancienne.
CREATE MAPPING LEGACY_2_GUEST
USING PLUGIN legacy_auth
FROM ANY USER
TO USER GUEST;

ALTER MAPPING

Destination

Modifier l’affichage de l’objet de sécurité.

Disponible en

DSQL.

Syntaxe
ALTER [GLOBAL] MAPPING name
  USING {
      PLUGIN plugin_name [IN database]
    | ANY PLUGIN [IN database | SERVERWIDE]
    | MAPPING [IN database]
    | '*' [IN database] }
  FROM { ANY type | type from_name }
  TO { USER | ROLE } [to_name]

Pour une description des paramètres de l’opérateur, voir security mapping create.

L’opérateur ALTER MAPPING vous permet de modifier toutes les options d’un mapping existant.

Important

La cartographie globale et la cartographie locale sont des objets différents.

Qui peut modifier l’affichage

Exécuter `ALTER MAPPING' peut :

  • `SYSDBA' ;

  • Le propriétaire de la base de données (si le mappage est local) ;

  • Tout utilisateur connecté avec le rôle RDB$ADMIN ;

  • L’utilisateur root du système d’exploitation Linux.

Clause ALTER MAPPING

Example 1. Modification de l’affichage.
ALTER MAPPING FROM_RT
USING PLUGIN SRP IN "rt"
FROM USER U1 TO USER U3;

CREATE OR ALTER MAPPING

Destination

Créer ou modifier l’affichage d’un objet de sécurité.

Disponible en

DSQL

Syntaxe
CREATE OR ALTER [GLOBAL] MAPPING name
  USING {
      PLUGIN plugin_name [IN database]
    | ANY PLUGIN [IN database | SERVERWIDE]
    | MAPPING [IN database]
    | '*' [IN database] }
  FROM { ANY type | type from_name }
  TO { USER | ROLE } [to_name]

Pour une description des paramètres de l’opérateur, voir security mapping create.

L’instruction CREATE OR ALTER MAPPING crée un nouveau mappage ou modifie un mappage existant. Si aucun mappage n’existe, il sera créé en utilisant l’instruction CREATE MAPPING.

Important

La cartographie globale et la cartographie locale sont des objets différents.

Clause CREATE OR ALTER MAPPING

Example 1. Créez un nouveau mappage ou modifiez un mappage existant.
CREATE OR ALTER MAPPING FROM_RT
USING PLUGIN SRP IN "rt"
FROM USER U1 TO USER U4;

DROP MAPPING

Destination

Supprime l’affichage d’un objet de sécurité.

Disponible en

DSQL

Syntaxe
DROP [GLOBAL] MAPPING name
Table 1. Paramètres de l’opérateur DROP MAPPING
Paramètre Description

name

Nom d’affichage.

L’instruction DROP MAPPING supprime un mapping existant. Si l’option GLOBAL est spécifiée, le mapping global sera supprimé.

Important

La cartographie globale et la cartographie locale sont des objets différents.

Qui peut retirer l’affichage

Exécuter `DROP MAPPING' peut :
  • `SYSDBA' ;

  • Le propriétaire de la base de données (si le mappage est local) ;

  • Tout utilisateur connecté avec le rôle RDB$ADMIN ;

  • L’utilisateur root du système d’exploitation Linux.

Clause DROP MAPPING

Example 1. Suppression de l’affichage.
DROP MAPPING FROM_RT;
Voir aussi :

security mapping create.