Hoe gebruikers migreren (kopiëren) van security2.fdb (Firebird 2.5) naar security3.fdb (Firebird 3.0)
Om gebruikersaccounts (namen, wachtwoorden, etc.) van Firebird 2.5 security2.fdb naar security3.fdb in Firebird te kopiëren, kopieer je alle records van RDB$USERS (security2.fdb) naar PLG$USERS (security3.fdb).
De eenvoudigste manier om dit te doen is door security2.fdb te herstellen onder Firebird 3, en vervolgens via een embedded verbinding verbinding te maken met security3.fdb en het onderstaande SQL-script uit te voeren (pas het pad naar het herstelde security2.fdb aan van localhost:D:\fb\data\security2.fdb naar het werkelijke pad).
Dit script maakt verbinding met de herstelde database van 2.5 en kopieert alle gebruikersgegevens naar security3.fdb en, als Legacy Authorization is ingeschakeld in de Firebird 3-configuratie, kun je met dezelfde inloggegevens als in 2.5 verbinding maken met de database.
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;