Bu sayfa makine çevirisidir. İngilizce orijinalini okuyun. English

IBSurgeon kütüphanesi

Firebird 2.5 (security2.fdb) kullanıcılarını Firebird 3.0 (security3.fdb) veritabanına nasıl taşırım (kopyalarım)?

Kullanıcı hesaplarını (isimler, şifreler vb.) Firebird 2.5 security2.fdb dosyasından Firebird’deki security3.fdb dosyasına kopyalamak için, RDB$USERS (security2.fdb) içindeki tüm kayıtları PLG$USERS (security3.fdb) dosyasına kopyalayın.

Bunu yapmanın en kolay yolu, security2.fdb dosyasını Firebird 3 altında geri yüklemek ve ardından gömülü bağlantı üzerinden security3.fdb dosyasına bağlanıp aşağıdaki SQL betiğini çalıştırmaktır (geri yüklenen security2.fdb yolunu localhost:D:\fb\data\security2.fdb konumundan gerçek yola değiştirin).

Bu betik, 2.5’ten geri yüklenen veritabanına bağlanacak ve tüm kullanıcı verilerini security3.fdb dosyasına kopyalayacaktır ve (Firebird 3 yapılandırmasında Legacy Authorization açıksa) 2.5’tekiyle aynı kimlik bilgileriyle veritabanına bağlanabileceksiniz.

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;