Firebird 3.0におけるユーザー管理
SQL Language Extension: CREATE/ALTER/CREATE_OR_ALTER/DROP USER
通常のデータベース接続からユーザーを管理する機能を実装します。
著者:
Alex Peshkoff [email protected]
構文は次のとおりです:
CREATE USER name [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER USER name [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] ALTER CURRENT USER [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] CREATE OR ALTER USER name [ SET ] [ options ] [ TAGS ( tag [, tag [, tag ...]] ) ] DROP USER name [ USING PLUGIN name ];
ここで、OPTIONS は以下のオプションのリストです:
- PASSWORD ‘password’
- FIRSTNAME ‘firstname’
- MIDDLENAME ‘middlename’
- LASTNAME ’lastname'
- ACTIVE
- INACTIVE
- USING PLUGIN name
また、各 TAG は次の2つの形式のいずれかを取ることができます:
name = ‘string value’
または:
DROP name
ここで、NAME は任意の有効な SQL 識別子です。
説明:
SQL 言語を使用してセキュリティデータベース内のユーザーを追加、変更、削除できるようにします。
Firebird はバージョン 3.0 以降、複数のセキュリティデータベースをサポートしています。gsec ユーティリティとサービス API はこれをサポートしておらず、ユーザー管理にこれらを使用することは非推奨です。
CREATE および DROP 句は、SYSDBA(またはセキュリティデータベースで RDB$ADMIN ロールを付与された別のユーザー)のみが使用できます。一般ユーザーは自分のパスワード、ワイドネーム、およびタグを ALTER できます。別のユーザーを変更しようとすると失敗します。また、自分自身を INACTIVE または ACTIVE にしようとする試みも失敗します。毎回自分の名前を入力する手間を省くために、簡略化された形式の ALTER CURRENT USER が用意されています。
ALTER USER ステートメントには、PASSWORD、FIRSTNAME、MIDDLENAME、LASTNAME、ACTIVE、INACTIVE、または TAGS のうち少なくとも1つが存在する必要があります。また、新しいユーザーを作成する際には PASSWORD 句が必須であることに注意してください。
PASSWORD 句はそれ自体で十分に説明がつきます。FIRSTNAME、MIDDLENAME、LASTNAME の各句も同様ですが、ユーザーに関する任意の短い情報を保存するためにも使用できます。INACTIVE/ACTIVE 句は、ユーザーをリストから削除せずにサーバーへのログインを無効にし、その機能を復元するために使用されます。USING PLUGIN 句を使用すると、デフォルトの管理プラグイン(firebird.conf の UserManager パラメータに最初にリストされているもの)だけでなく、他のプラグインでもユーザーを操作できます。gsec ユーティリティとサービス API は複数のユーザー管理プラグインをサポートしていません - 常にデフォルトのものが使用されます。
TAGS はエンドユーザー定義の属性のリストです。値の長さは255バイトを超えてはなりません。
name に値を割り当てると、新しいタグが設定されるか、既存のタグが変更されます。タグを削除するには DROP オプションを使用します。
ユーザーにタグのリストを設定する場合、現在言及されていない以前に設定されたタグは保持されます。
注意 - 非推奨の gsec によって入力された UID/GID は、SQL インターフェースではタグとして扱われます。
ユーザーのリストにアクセスするには、仮想テーブル SEC$USERS および SEC$USER_ATTRIBUTES から選択してください。
サンプル(firebird.conf で UserManager=Srp,Legacy_UserManager と仮定):
一般的な例:
CREATE USER alex PASSWORD 'test'; ALTER USER alex SET FIRSTNAME 'Alex' LASTNAME 'Peshkoff'; CREATE OR ALTER USER alex SET PASSWORD 'IdQfA'; DROP USER alex; ALTER CURRENT USER SET PASSWORD 'SomethingLongEnough' USING PLUGIN srp;
タグの操作:
ALTER USER alex SET TAGS (a='a', b='b'); NAME VALUE ================ ============================== A a B b ALTER USER alex SET TAGS (b='x', c='d'); NAME VALUE ================ ============================== A a B x C d ALTER USER alex SET TAGS (drop a, c='sample'); NAME VALUE ================ ============================== B x C sample
ユーザーリストの表示:
SELECT CAST(U.SEC$USER_NAME AS CHAR(20)) LOGIN, CAST(A.SEC$KEY AS CHAR(10)) TAG, CAST(A.SEC$VALUE AS CHAR(20)) "VALUE", U.SEC$PLUGIN "PLUGIN" FROM SEC$USERS U LEFT JOIN SEC$USER_ATTRIBUTES A ON U.SEC$USER_NAME = A.SEC$USER_NAME AND U.SEC$PLUGIN = A.SEC$PLUGIN;
LOGIN TAG VALUE PLUGIN
==================== ========== ==================== =============================== SYSDBA <null> <null> Srp ALEX B x Srp ALEX C sample Srp SYSDBA <null> <null> Legacy_UserManager
注意!
この機能はユーザー管理プラグインに大きく依存しています。レガシーのユーザー管理プラグインを使用する場合、一部のオプションが無視されることに注意してください。