Cette page a été traduite automatiquement. Lisez l'original en anglais. English

Bibliothèque IBSurgeon

Comment migrer (copier) les utilisateurs de security2.fdb (Firebird 2.5) vers security3.fdb (Firebird 3.0)

Pour copier les comptes utilisateurs (noms, mots de passe, etc.) de Firebird 2.5 security2.fdb vers security3.fdb dans Firebird, copiez tous les enregistrements de RDB$USERS (security2.fdb) vers PLG$USERS (security3.fdb).

La façon la plus simple de le faire est de restaurer security2.fdb sous Firebird 3, puis de se connecter à security3.fdb via une connexion embarquée et d’exécuter le script SQL ci-dessous (modifiez le chemin vers security2.fdb restauré de localhost:D:\fb\data\security2.fdb vers le chemin réel).

Ce script se connectera à la base de données restaurée depuis 2.5 et copiera toutes les données utilisateurs vers security3.fdb et, si l’autorisation héritée (Legacy Authorization) est activée dans la configuration de Firebird 3, vous pourrez vous connecter à la base de données avec les mêmes identifiants qu’en 2.5.

Code
connect security.db user sysdba;

set term ^;

EXECUTE BLOCK
AS
    DECLARE VARIABLE FRST VARCHAR(32);
    DECLARE VARIABLE MDDL VARCHAR(32);
    DECLARE VARIABLE LST  VARCHAR(32);
    DECLARE VARIABLE USR VARCHAR(128);
    DECLARE VARIABLE PASSWD VARCHAR(64);
    DECLARE VARIABLE ATTR VARCHAR(4096);
    DECLARE VARIABLE UID  INT;
    DECLARE VARIABLE GID  INT;
    DECLARE VARIABLE SQL  VARCHAR(4096);

BEGIN
  FOR EXECUTE STATEMENT '
      SELECT
          RDB$USER_NAME,
          RDB$PASSWD,
          RDB$FIRST_NAME,
          RDB$MIDDLE_NAME,
          RDB$LAST_NAME,
          RDB$UID,
          RDB$GID
      FROM
          RDB$USERS
      WHERE RDB$USER_NAME IS NOT NULL
        AND UPPER(RDB$USER_NAME) != ''SYSDBA''
      '
      ON EXTERNAL DATA SOURCE 'localhost:D:\fb\data\security2.fdb'
      AS USER 'SYSDBA' password 'masterkey'
      INTO :USR,
           :PASSWD,
           :FRST,
           :MDDL,
           :LST,
           :UID,
           :GID

  DO
  BEGIN
    SQL = '
    INSERT INTO PLG$USERS(
       PLG$USER_NAME,
       PLG$PASSWD,
       PLG$FIRST_NAME,
       PLG$MIDDLE_NAME,
       PLG$LAST_NAME,
       PLG$UID,
       PLG$GID)
    VALUES(';
    SQL = SQL || '''' || USR || '''';
    SQL = SQL || ',''' || PASSWD || '''';
    SQL = SQL || ',' || COALESCE('''' || FRST || '''', 'NULL');
    SQL = SQL || ',' || COALESCE('''' || MDDL || '''', 'NULL');
    SQL = SQL || ',' || COALESCE('''' || LST || '''', 'NULL');
    SQL = SQL || ',' || COALESCE(UID, 'NULL');
    SQL = SQL || ',' || COALESCE(GID, 'NULL');
    SQL = SQL || ')';
    EXECUTE STATEMENT SQL;
  END
END^

set term ;^

commit;

exit;