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.
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;