Diese Seite wurde maschinell übersetzt. Lesen Sie das englische Original. English

IBSurgeon-Bibliothek

So migrieren (kopieren) Sie Benutzer von security2.fdb (Firebird 2.5) zu security3.fdb (Firebird 3.0)

Um Benutzerkonten (Namen, Passwörter usw.) von Firebird 2.5 security2.fdb nach security3.fdb in Firebird zu kopieren, kopieren Sie alle Datensätze von RDB$USERS (security2.fdb) nach PLG$USERS (security3.fdb).

Der einfachste Weg ist, security2.fdb unter Firebird 3 wiederherzustellen und sich dann über eine eingebettete Verbindung mit security3.fdb zu verbinden und das folgende SQL-Skript auszuführen (ändern Sie den Pfad zur wiederhergestellten security2.fdb von localhost:D:\fb\data\security2.fdb auf den tatsächlichen Pfad).

Dieses Skript verbindet sich mit der wiederhergestellten Datenbank aus 2.5 und kopiert alle Benutzerdaten in die security3.fdb. Wenn die Legacy-Autorisierung in der Firebird-3-Konfiguration aktiviert ist, können Sie sich mit denselben Anmeldedaten wie in 2.5 mit der Datenbank verbinden.

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;