資格情報を失った古いプロジェクトのInterBase/Firebirdデータベースファイルがあります。 gstat
コマンドでダンプされたデータベースに関するいくつかの情報を以下に示します[1]。このファイルに埋め込みデータベースとしてアクセスしています。つまり、Firebirdのインスタンスを実行していません。オンディスク構造(ODS)11.2がこのバージョンに対応しているため、私はMacOSを使用しており、Firebird2.5をインストールしています。
isql
コマンドを使用してデータベース構造をエクスポートすることはできますが、有効なユーザー名とパスワードがないと、このツールを使用してデータにアクセスできず、次のエラーメッセージが表示されます。
Error while preparing SQL statement:
- SQLCODE: -551
- no permission for read/select access to TABLE FILES', -551, 335544352
ユーザー名/パスワードとしてデフォルトのSYSDBA/masterkeyを指定すると、エラーメッセージが表示されます。
Error while connecting to database:
- SQLCODE: -902
- cannot attach to password database', -902, 335544653
新しいFirebird3で暗号化が導入され、データは暗号化されずに保存されるため(16進エディターでデータを表示できます)、資格情報なしでこのデータにアクセスしてエクスポートする方法があると思います。どうすればよいですか?
[1]:gstat
コマンドの出力
Database "./DATABASE.GDB"
Database header page information:
Flags 0
Checksum 12345
Generation 26450714
Page size 4096
ODS version 11.2
Oldest transaction 25058616
Oldest active 25058617
Oldest snapshot 25058617
Next transaction 25058619
Bumped transaction 1
Sequence number 0
Next attachment ID 1401189
Implementation ID 26
Shadow count 0
Page buffers 0
Next header page 0
Database dialect 1
Creation date Jul 21, 2014 13:42:21
Attributes force write
Variable header data:
Sweep interval: 20000
*END*
2番目のエラーcannot attach to password database
は、ユーザー名とパスワードが提供されたときに表示されますが、これはセキュリティデータベースを開くことができなかったためです。
MacOSでは、このファイルは次の場所にあります。
/Library/Frameworks/Firebird.framework/Resources/English.lproj/var/security2.fdb
デフォルトでは、firebird
ユーザーが所有します。これにより、管理ツール(isql
、gsec
、gfix
など)を別のユーザーとして実行すると問題が発生します。
この問題を解決する1つの方法は、これらのコマンドをfirebird
ユーザーとして実行することです。もう1つは、セキュリティデータベースの権限を変更することです。
chmod o+r /Library/Frameworks/Firebird.framework/Resources/English.lproj/var/security2.fdb
これにより問題が解決し、デフォルトのsysdba/masterkey資格情報を使用してデータにアクセスできました。これらはnot GDBファイルに保存されていますが、前述のsecurity2.fdb
ファイル。これは、デフォルトの資格情報を使用できる理由を説明しています。