I have database of firebird of more than 8 GB and I want to migrate all the data from it. But I have forgotten the username and password. Is there anyway or any tool through which I can crack this database and can get my data back?
In most Firebird setups, the username and password is kept in a central security database (security3.fdb in the case of Firebird 3). If you don't know the username and password of a user anymore, you have the following options.
Be aware, this answer uses Firebird 3 as its base, but most options also apply to Firebird 2.5 and earlier. Instead of security3.fdb
, use security2.fdb
. The create user
and alter user
steps only work in Firebird 2.5 or higher.
RDB$ADMIN
role in the security database) to reset the password of the user through any other databasegsec
as SYSDBA in embedded mode to reset the passwordIf your database uses itself as its security database, you will first have to remove that setting from the databases.conf
by commenting out the SecurityDatabase
setting for that database.
For Firebird 3, this answer assumes the creation of a user for the Srp authentication mechanism, and the steps below assume that the firebird.conf
in the Firebird installation has setting AuthServer = Srp
(or at least that setting AuthServer
contains Srp
) and setting UserManager = Srp
(or at least that Srp
is the first entry for UserManager
).
Works on Firebird 2.5 and higher
Connect to a database with SYSDBA (or another user with admin role on the security database), and use
ALTER USER <username> SET PASSWORD '<new password>';
This is probably not an option in your case though.
Works on Linux for Firebird 2.5 or higher, on Windows requires Firebird 3.0 or higher.
Stop Firebird server, and use ISQL to connect to the database in embedded mode (which doesn't require a password):
isql -user sysdba <database>
With a default Firebird 3 installation, you can use employee
for <database>
, which will use the employee example database.
Alter the password as described above. Alternatively, try replacing sysdba
with the actual username in the isql commandline.
Start Firebird server again.
Works on Linux for all version, on Windows this only works for Firebird 3.0 and higher.
Be aware that gsec is deprecated since Firebird 3 and may be removed from future Firebird versions.
Stop the Firebird server, open the command line, and in the Firebird installation folder do:
gsec -user sysdba
and on the gsec prompt
modify <username> -pw <new password>
or if the user doesn't exist yet:
add <username> -pw <new password>
Start Firebird server again.
Most of these steps also apply if you are using a new Firebird install; just skip the replacing of the security database.
Stop Firebird server and make a copy of your current security3.fdb as a backup.
Obtain a default security3.fdb for your platform (eg download a zipkit from the Firebird 3 download page) or use a security3.fdb with a known password, and replace your current security3.fdb with this default version. Don't start Firebird yet.
For earlier Firebird versions, look for your version on the download page.
The default password for sysdba is normally 'masterkey', but on Firebird 3 the default security3.fdb only contains this user for the legacy authentication mechanism, which is disabled in a default Firebird 3 installation.
To add a sysdba user, use an embedded connection to any database and create a sysdba account. On the command prompt from the Firebird installation folder, run:
isql -u sysdba <database>
Within ISQL execute:
create user sysdba password '<sysdba password>';
commit;
To add another user, connect using SYSDBA - similar to the previous step 2 - to any database and execute
create user <username> password '<new password>';
commit;
And exit isql (with quit;
)
Then start Firebird server again, and you should be able to connect with this user and its password.
Most of these steps assume you already have a database to connect to, if you don't yet have one, then you'll need to create on first.
Start isql as user sysdba:
isql -u sysdba
And create a database
create database '<path-of-database>';
You can then use that database for the earlier steps.