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のパスワード> と書く)
既定の認証プラグイン Srp では,パスワードは 255 文字まで指定できるが, 有効な長さは約 20 バイトである.パスワードは大文字・小文字を区別する.
前準備
- Firebird のインストールが終わっていること:
Windows での Firebird のインストール »
Windows 版インストーラでは,インストールの途中で SYSDBA のパスワードを設定する画面が出る. そこで設定したパスワードを控えておく.
- Firebird のサービスが起動していること. Windows キーを押し「サービス」と入力してサービス一覧を開き, 「Firebird Server - DefaultInstance」が「実行中」であることを確認する.
【体験1】isql でデータベースに接続する
Firebird のユーザ情報は,セキュリティデータベース security5.fdb(エイリアス名 security.db)に格納されている. security5.fdb にはリモートから接続できない設定になっているため, ユーザ管理の 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 に定義されており,インストールディレクトリの examples\empbuild\employee.fdb を指す.
-
接続の確認
次のように表示され,プロンプトが「SQL>」になれば接続できている.
Database: localhost:employee, User: SYSDBA SQL>
- 「Your user name and password are not defined」と表示されたときは,ユーザ名またはパスワードが違う.入力し直す.
- 「connection rejected」「unable to complete network request」と表示されたときは,Windows キーを押し「サービス」と入力してサービス一覧を開き,「Firebird Server - DefaultInstance」が「実行中」であることを確認する.
- コマンドラインに書いたパスワードは画面とコマンド履歴に残る.環境変数 ISC_USER,ISC_PASSWORD に設定しておけば,コマンドラインに書かずに接続できる.
【体験2】SYSDBA のパスワードを変更する
ALTER USER 文を使う.
手順
-
isql を起動し,サンプルデータベース employee に SYSDBA で接続する
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -user SYSDBA -password <SYSDBAのパスワード> localhost:employee
-
「SQL>」のプロンプトで,次の SQL 文を実行する
ALTER USER SYSDBA SET PASSWORD '<新パスワード>'; COMMIT;
※ SQL 文の終わりのセミコロン「;」を忘れないこと.
※ isql では COMMIT するまで変更が確定しない.
-
isql を終了する
EXIT;
-
新しいパスワードで接続できることを確認する
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -user SYSDBA -password <新パスワード> localhost:employee
接続できたら「EXIT;」で終了する.
-
古いパスワードでは接続できなくなったことを確認する
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -user SYSDBA -password <古いパスワード> localhost:employee
「Your user name and password are not defined」というエラーになる.
- ユーザ情報はセキュリティデータベースの中のデータである.そのため,ユーザ管理の SQL 文も他の SQL 文と同じくトランザクションの中で実行され,COMMIT で確定する.
- 既定の認証プラグイン Srp(Secure Remote Password)では,パスワードから作った検証子(verifier)が保存され,パスワード自体はネットワークを流れない.旧来の Legacy_Auth では,パスワードの先頭 8 バイトだけが有効で,暗号化されずに送信される.
【体験3】一般ユーザの作成,パスワード変更,削除
SYSDBA はすべてのデータベースのすべてのオブジェクトにアクセスできる. 日常の作業には,権限を絞った一般ユーザを使う.
手順
-
isql を起動し,サンプルデータベース employee に SYSDBA で接続する
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -user SYSDBA -password <SYSDBAのパスワード> localhost:employee
-
ユーザ 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 は,セキュリティデータベースのユーザ情報を返す仮想テーブルである.
-
isql を終了する
EXIT;
-
isql を起動し,user1 で employee に接続できることを確認する
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -user user1 -password <user1のパスワード> localhost:employee
接続後,次を実行する.
SELECT FIRST 5 * FROM employee;
ユーザを作成しただけでは,テーブルへのアクセス権は付かない. 権限がないときは「no permission for read/select access to TABLE EMPLOYEE」というエラーになる. 確認後,「EXIT;」で終了する.
-
isql を起動し,SYSDBA で接続して user1 に権限を付与する
"C:\Program Files\Firebird\Firebird_5_0\isql.exe" -user SYSDBA -password <SYSDBAのパスワード> localhost:employee
GRANT SELECT ON employee TO user1; COMMIT;
このあと user1 で接続すると「SELECT FIRST 5 * FROM employee;」が実行できる.
-
user1 のパスワードを変更する(SYSDBA で接続した状態で実行)
ALTER USER user1 SET PASSWORD '<新しいuser1のパスワード>'; COMMIT;
ユーザは自分自身のパスワードを変更できる. user1 で接続した状態では次のようにする.
ALTER CURRENT USER SET PASSWORD '<新しいuser1のパスワード>'; COMMIT;
-
(後片付け)ユーザ user1 を削除する(SYSDBA で接続した状態で実行)
DROP USER user1; COMMIT;
- ユーザ名は識別子(最大 63 文字)である.引用符で囲まなければ大文字・小文字は区別されない(USER1 と user1 は同じ).パスワードは文字列であり,大文字・小文字が区別される.
- 管理者権限(RDB$ADMIN ロール)を持つユーザを作るときは「CREATE USER 名前 PASSWORD '<パスワード>' GRANT ADMIN ROLE;」とする.このユーザはユーザの作成・変更・削除ができる.
- ユーザを一時的に使えなくするには「ALTER USER user1 SET INACTIVE;」,戻すには「ALTER USER user1 SET ACTIVE;」とする.
【参考】旧来のコマンド gsec について
gsec は,Firebird 2.5 以前でユーザ管理に使っていた専用コマンドである. Firebird 3 以降では非推奨(deprecated)である. gsec は複数のセキュリティデータベースを扱えず, firebird.conf の UserManager に並べたユーザ管理プラグインのうち先頭の 1 つだけを使う. 古い資料を読むときのために,対応関係を示す.
- ユーザ一覧の表示:
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)と一般ユーザを分ける理由.SYSDBA はすべてのデータベースのデータとメタデータを変更・削除できる.
- ユーザ管理が専用コマンドから SQL 文へ統一されたことの利点(リモートからの管理,アプリケーションプログラムからの管理,他の SQL 操作との一貫性).
- パスワードの平文保存・平文送信を避ける仕組み(ハッシュ化,SRP プロトコル)が必要な理由.