이 페이지는 기계 번역되었습니다. 영어 원본을 읽어보세요. English

IBSurgeon 라이브러리

Firebird 2.5의 security2.fdb에서 Firebird 3.0의 security3.fdb로 사용자를 마이그레이션(복사)하는 방법

Firebird 2.5의 security2.fdb에서 Firebird의 security3.fdb로 사용자 계정(이름, 비밀번호 등)을 복사하려면, security2.fdb의 RDB$USERS에 있는 모든 레코드를 security3.fdb의 PLG$USERS로 복사하십시오.

가장 쉬운 방법은 Firebird 3에서 security2.fdb를 복원한 다음, 임베디드 연결을 통해 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;