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 の構成でレガシー認証が有効になっている場合、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;