Firebird のパスワード管理(SYSDBA のパスワード変更,ユーザの作成・変更・削除)
このページでは,Firebird(2026年4月時点の最新安定版は Firebird 5.0.4)の ユーザとパスワードの管理を体験する. Firebird の管理者ユーザは SYSDBA である. Firebird 3 以降では,ユーザ管理は SQL 文(CREATE USER,ALTER USER,DROP USER)で行うのが標準であり, 旧来の専用コマンド gsec は非推奨(deprecated)となっている.
- SYSDBA の新しいパスワード(このページでは <新パスワード> と書く)
- 作成する一般ユーザのユーザ名とパスワード(このページでは,ユーザ名 user1,パスワードは <user1のパスワード> と書く)
パスワードは他人に教えないこと.パスワードをファイルに平文で保存しないこと. 昔の版の既定パスワード masterkey をそのまま使い続けてはいけない.
前準備
- Firebird のインストールが終わっていること:
Windows での Firebird のインストール »
Firebird 3 以降の Windows 版インストーラでは,インストールの途中で SYSDBA のパスワードを設定する画面が出る. そこで設定したパスワードを控えておくこと.
- Firebird のサービスが起動していること. Windows では,Windows キーを押し「サービス」と入力してサービス一覧を開き, 「Firebird Server - DefaultInstance」が「実行中」であることを確認する.
【体験1】isql で管理用セキュリティデータベースに接続する
Firebird のユーザ情報は,セキュリティデータベース(別名 security.db,エイリアス名 employee ではなく security.db)に格納されている. ユーザ管理の SQL 文は,何らかのデータベースに SYSDBA で接続した状態で実行できる. ここでは,付属のサンプルデータベース employee に接続して行う.
手順
-
コマンドプロンプトを管理者として実行する
Windows キーを押し「cmd」と入力し,「管理者として実行」を選ぶ.
-
isql を起動し,サンプルデータベース employee に SYSDBA で接続する
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -user SYSDBA -password <SYSDBAのパスワード> localhost:employee
※ Firebird 4.0 の場合は「Firebird_4_0」,Firebird 3.0 の場合は「Firebird_3_0」に読み替える.
※ 「localhost:employee」の「employee」はデータベースのエイリアス名である (実体は databases.conf に定義されており,employee.fdb を指す).
-
接続の確認
次のように表示され,プロンプトが「SQL>」になれば接続成功である.
Database: localhost:employee, User: SYSDBA SQL>
- 「Your user name and password are not defined」と表示されたときは,パスワードの打ち間違いか,SYSDBA のパスワードが未設定である.
- 「connection rejected」「unable to complete network request」と表示されたときは,Firebird のサービスが起動していない可能性がある.サービス一覧で確認すること.
- パスワードをコマンドラインに直接書くと,画面や履歴に残る.気になる場合は「-password」を省略して起動し,あとで説明する対話入力を使う方法もある.
【体験2】SYSDBA のパスワードを変更する
Firebird 3 以降の標準の方法である ALTER USER 文を使う.
手順
-
【体験1】の状態(SQL> プロンプト)で,次の SQL 文を実行する
ALTER USER SYSDBA SET PASSWORD '<新パスワード>'; COMMIT;
※ SQL 文の終わりのセミコロン「;」を忘れないこと.
※ Firebird のユーザ管理は通常のトランザクションの中で動くので,COMMIT を忘れないこと.
-
isql を終了する
EXIT;
-
新しいパスワードで接続できることを確認する
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -user SYSDBA -password <新パスワード> localhost:employee
接続できたら「EXIT;」で終了する.
-
(確認)古いパスワードでは接続できなくなったことを確認する
古いパスワードで同じコマンドを実行し, 「Your user name and password are not defined」というエラーになることを確認する.
- パスワード変更が COMMIT するまで有効にならないのはなぜか(ユーザ情報自体が「データベースの中のデータ」として管理されていることに注目).
- Firebird 5 のパスワードは,既定の認証プラグイン Srp(Secure Remote Password)ではハッシュ化されて保存され,ネットワーク上を平文で流れない.旧来の Legacy_Auth 方式との違いを調べてみること.
【体験3】一般ユーザの作成,パスワード変更,削除
管理者 SYSDBA で作業する.すべてを SYSDBA で行うのではなく, 日常の作業用には権限を絞った一般ユーザを作るのが安全管理の基本である.
手順
- SYSDBA で接続する(【体験1】と同じ)
-
ユーザ user1 を作成する
CREATE USER user1 PASSWORD '<user1のパスワード>' FIRSTNAME 'Taro' LASTNAME 'Yamada'; COMMIT;
※ FIRSTNAME,LASTNAME は省略できる(氏名の記録用).
-
ユーザの一覧を確認する
SELECT SEC$USER_NAME, SEC$FIRST_NAME, SEC$LAST_NAME, SEC$ADMIN FROM SEC$USERS;
SYSDBA と user1 が表示されることを確認する. SEC$USERS は,ユーザ情報を参照するための仮想テーブル(モニタリングテーブルの一種)である.
-
user1 で接続できることを確認する
いったん「EXIT;」で終了してから,
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -user user1 -password <user1のパスワード> localhost:employee
接続後,試しに次を実行してみる.
SELECT FIRST 5 * FROM employee;
employee サンプルデータベースでは PUBLIC に SELECT 権限が付与されているため参照できる. 権限が付与されていないデータベースでは「no permission for ...」というエラーになる(これが正常な動作である). 確認後「EXIT;」で終了する.
-
user1 のパスワードを変更する(SYSDBA で接続して実行)
ALTER USER user1 SET PASSWORD '<新しいuser1のパスワード>'; COMMIT;
なお,ユーザは自分自身のパスワードなら自分で変更できる. user1 で接続した状態で次を実行してもよい.
ALTER CURRENT USER SET PASSWORD '<新しいuser1のパスワード>'; COMMIT;
-
(後片付け)ユーザ user1 を削除する
DROP USER user1; COMMIT;
- ユーザ名は識別子であり,引用符で囲まなければ大文字・小文字は区別されない(USER1 と user1 は同じ).パスワードは文字列であり,大文字・小文字が区別される.
- 管理者権限を持つユーザを追加したいときは「CREATE USER 名前 PASSWORD '...' GRANT ADMIN ROLE;」とする.
- ユーザの作成だけでは,各データベースの中のテーブルへのアクセス権は付かない.必要に応じて GRANT 文(例:GRANT SELECT ON テーブル名 TO user1;)で権限を付与する.
【参考】旧来のコマンド gsec について
Firebird 2.5 以前では,ユーザ管理には専用コマンド gsec を使っていた. gsec は Firebird 3 以降では非推奨(deprecated)であり, 既定の認証方式(Srp)のユーザは扱えない場合がある.新規の学習・運用では SQL 文によるユーザ管理を使うこと. 古い資料を読むときのために,対応関係を示す.
- ユーザ一覧の表示:
gsec -user SYSDBA -password ... -display→SELECT * FROM SEC$USERS; - ユーザの追加:
gsec ... -add user1 -pw パスワード→CREATE USER user1 PASSWORD '...'; - パスワードの変更:
gsec ... -modify user1 -pw パスワード→ALTER USER user1 SET PASSWORD '...'; - ユーザの削除:
gsec ... -delete user1→DROP USER user1;
考察ポイント(まとめ)
- 「管理者ユーザ(SYSDBA)」と「一般ユーザ」を分けるのはなぜか.すべての作業を管理者で行うことの危険性を考えてみること.
- ユーザ管理が専用コマンドから SQL 文へ統一されたことの利点は何か(リモートからの管理,アプリケーションプログラムからの管理,他の SQL 操作との一貫性,に注目).
- パスワードの平文保存・平文送信を避ける仕組み(ハッシュ化,SRP プロトコル)はなぜ必要か.