Esta página foi traduzida por máquina. Leia o original em inglês. English

Biblioteca IBSurgeon

Como migrar (copiar) usuários de security2.fdb (Firebird 2.5) para security3.fdb (Firebird 3.0)

Para copiar contas de usuários (nomes, senhas, etc.) do security2.fdb do Firebird 2.5 para o security3.fdb no Firebird, copie todos os registros de RDB$USERS (security2.fdb) para PLG$USERS (security3.fdb).

A maneira mais fácil de fazer isso é restaurar o security2.fdb no Firebird 3 e, em seguida, conectar-se ao security3.fdb por meio de uma conexão incorporada e executar o script SQL abaixo (modifique o caminho para o security2.fdb restaurado de localhost:D:\fb\data\security2.fdb para o caminho real).

Este script se conectará ao banco de dados restaurado do 2.5 e copiará todos os dados dos usuários para o security3.fdb e, se a Autorização Legada estiver ativada na configuração do Firebird 3, você poderá se conectar ao banco de dados com as mesmas credenciais do 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;