Trang này được dịch bằng máy. Đọc bản gốc tiếng Anh. English

Thư viện IBSurgeon

Cách di chuyển (sao chép) người dùng từ security2.fdb (Firebird 2.5) sang security3.fdb (Firebird 3.0)

Để sao chép tài khoản người dùng (tên, mật khẩu, v.v.) từ security2.fdb của Firebird 2.5 sang security3.fdb trong Firebird, hãy sao chép tất cả bản ghi từ RDB$USERS (security2.fdb) sang PLG$USERS (security3.fdb).

Cách dễ nhất là khôi phục security2.fdb trên Firebird 3, sau đó kết nối đến security3.fdb qua kết nối nhúng và chạy tập lệnh SQL bên dưới (sửa đường dẫn đến security2.fdb đã khôi phục từ localhost:D:\fb\data\security2.fdb thành đường dẫn thực tế).

Tập lệnh này sẽ kết nối đến cơ sở dữ liệu đã khôi phục từ 2.5 và sao chép tất cả dữ liệu người dùng sang security3.fdb và, nếu Legacy Authorization được bật trong cấu hình Firebird 3, bạn sẽ có thể kết nối đến cơ sở dữ liệu với cùng thông tin đăng nhập như trong 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;