Эта страница переведена машинным переводом. Читайте английский оригинал. English

Библиотека IBSurgeon

Как перенести (скопировать) пользователей из security2.fdb (Firebird 2.5) в security3.fdb (Firebird 3.0)

Чтобы скопировать учетные записи пользователей (имена, пароли и т.д.) из Firebird 2.5 security2.fdb в security3.fdb в Firebird, скопируйте все записи из RDB$USERS (security2.fdb) в PLG$USERS (security3.fdb).

Самый простой способ сделать это - восстановить security2.fdb под Firebird 3, а затем подключиться к security3.fdb через встроенное соединение и выполнить приведенный ниже SQL-скрипт (измените путь к восстановленному security2.fdb с localhost:D:\fb\data\security2.fdb на фактический путь).

Этот скрипт подключится к восстановленной базе данных из 2.5 и скопирует все данные пользователей в security3.fdb, и (если в конфигурации Firebird 3 включена Legacy Authorization) вы сможете подключиться к базе данных с теми же учетными данными, что и в 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;