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.
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;