FireBirdでログインしているユーザー名を取得したい(追加)

解決


ぼくどらえもん  2013-09-21 02:59:00  No: 45302

2013/09/13の60のおじんさんの質問と同じく
私も困っておりました。

DECOさんのとおり、
下記SQLを実行したところ、エラーがでました。

/* 現在接続しているクライアントのユーザ名を取得する */
SELECT rdb$get_context('SYSTEM', 'CURRENT_USER') FROM rdb$database;

Function Unknown

どうしたらよいのでしょうか??


ぼくどらえもん  2013-09-21 03:00:36  No: 45303

9/18でした。


DEKO  2013-09-21 06:53:48  No: 45304

スミマセン rdb$get_contex() は Firebird 2.0 以降でした。

それ以前の Firebird から一貫してユーザ情報を取得するとなると、
SELECT CURRENT_USER FROM rdb$database;
なのですが、よく考えてみたら CURRENT_USER では現在のユーザしか取れませんね。

...そうなると TIBSecurityService を使ってユーザリストを取得するしかないと思います。

[TIBSecurityService.DisplayUsers (DocWiki)]
http://docwiki.embarcadero.com/Libraries/ja/IBServices.TIBSecurityService.DisplayUsers


60のおじん  2013-09-21 18:00:05  No: 45305

便乗ですいません。
教えてもらって、あれからいろいろやったんですけど、同じようにエラーが出ていました。原因がわかってよかったです。

DEKOさん、誠にすいませんがInterBaseを使用しないで、できる方法はないんですよね???。
そうなると TIBSecurityService を使ってユーザリストを取得するしかないと思います。・・・と書いてますので。


DEKO  2013-09-21 23:37:11  No: 45306

> InterBaseを使用しないで、できる方法はないんですよね???
Interbase は使っていません。使っているのは IBX です。
(当然 Interbase を別途インストールする必要もありません)

Interbase も Firebird も元は同じなので
IBX を使えば Firebird でも同じ事ができます。

"Firebird の SQL のみを使って" という事であれば、
Firebird 2.0 またはそれ以前では無理なような気がします。

"Firebird かつ IBX を使わないで" となると
...例えば FireDAC の TFDIBSecurity (TADIBSecurity) を使うか、
GDS32.DLL (fbclient.dll) を LoadLibrary() して
直接クライアントの機能を使うしかないでしょうね。
(結局は同じ事をやっているのですけれど...)

・BDE では無理です。
・dbGo (ADO Express) では無理です。
・DBX では無理です。
・ODBC はもちろん無理です。

# Firebird の接続には何をお使いなのでしょう?
# Delphi のバージョンは?

[何度も出てくるので Firebird の接続方法 (Delphi Forum)]
http://ht-deko.minim.ne.jp/delphiforum/?vasthtmlaction=viewtopic&t=1255

[FireDAC.Phys.IBBase.TFDIBSecurity (DocWiki)]
http://docwiki.embarcadero.com/Libraries/XE5/ja/FireDAC.Phys.IBBase.TFDIBSecurity


ぼくどらえもん  2013-09-25 01:18:03  No: 45307

DEKOさんありがとうございます。

IBSecurityServiceを使用してやってみましたが、
DisplayUsersでエラーがでます。
RDB$USRSがないというSQLエラーでした。

ちなみに、Firebird2.1でも同様のエラーがでました。

Delphiは6と2010です。
接続はSQLConnectionをしようしてます。


DEKO  2013-09-25 03:06:31  No: 45308

> IBSecurityServiceを使用してやってみましたが、
> DisplayUsersでエラーがでます。
> RDB$USRSがないというSQLエラーでした。

RDB$USERS のエラーが出るという事は UserDatabase を指定されているのだと思います。

これを指定すると RDB$USERS というシステムテーブルを読みに行きますが、
RDB$USERS は Interbase 7.5 で追加された Interbase 固有のテーブルであるので、
Firebird では使えません (MON$ATTACHMENTS が Firebird 固有なのと同じです)。


ぼくどらえもん  2013-09-25 03:20:21  No: 45309

DEKOさん、ありがとうございます!

確かにUserDatabase指定しておりました。
削除したら、User取得できました。

IBSecurityServiceは初めて使用するので、
わからないのですが、
すみません、これから自分なりに調べてみますが。
登録ユーザー全部取得して、
そのうちのどのユーザーがアクセス中なのかって
取得できるのでしょうか??


DEKO  2013-09-25 03:28:18  No: 45310

...ここまで書いて思ったのですが、60のおじんさんもぼくどらえもんさんも 
"Firebird サーバに接続しているユーザの一覧" ではなく
"Firebird データベースに接続しているユーザの一覧" を取得したいのですかね? 

だとすると、Firebird 2.1 またはそれ降が必要になる思います。

"Firebird サーバに接続しているユーザ一覧" であれば
IBSecurityService を使えばすべてのバージョンの Firebird で取得可能です。
(UserDatabase を指定しなければサーバに接続しているユーザが取れます)


DEKO  2013-09-25 03:31:11  No: 45311

> 登録ユーザー全部取得して、
> そのうちのどのユーザーがアクセス中なのかって
> 取得できるのでしょうか??

TIBSecurityService.ActiveUser := True;
あるいは、
TIBSecurityService.UserInfo[].ActiveUser を調べればいいかと。


60のおじん  2013-09-25 06:19:17  No: 45312

すいません。60のおじんです。
私は、"Firebird データベースに接続しているユーザの一覧" を取得したい
のです。今現在、サーバーマシンにあるXXX.FDBにアクセスしているユーザー名の一覧です。

なお、以前書きましたが、Delphi6でFirebird1.5です。


DEKO  2013-09-25 16:14:32  No: 45313

> 私は、"Firebird データベースに接続しているユーザの一覧" を取得したい
> のです。今現在、サーバーマシンにあるXXX.FDBにアクセスしているユーザー名の一覧です。

であれば、
・サーバは Firebird 2.1 またはそれ以降
・Firebird 2.1 で作った、あるいは 2.1 でリストアした DB
が必要になると思います。この DB に対して

SELECT * FROM MON$ATTACHMENTS してやれば詳細情報が取れます。
(接続しているアプリケーション名すら取れます)

この場合には SQL を投げるだけですから、
BDE / IBX / DBX / dbGo / FireDAC / ODBC etc...
どれでも可能です。

[Trigger (FirebirdSQL)]
http://www.firebirdsql.org/refdocs/langrefupd21-ddl-trigger.html

トリガの構文に CONNECT / DISCONNECT があるので、
テーブルを自前で一つ作ってそこで管理できるような気がしますが、
CONNECT / DISCONNECT を使ったトリガも 2.1 以降なのでこれまた使えません。


60のおじん  2013-09-25 19:16:54  No: 45314

60おじんです。DEKOさんいろいろありがとうございます。
とすると、今サーバーでは、Firebird  1.5で動いているので、上記は無理だと解釈してよろしいのでしょうか。
何度も、恐縮です。


DEKO  2013-09-25 20:11:58  No: 45315

> 上記は無理だと解釈してよろしいのでしょうか。
私は無理だと思っているのですが、
気になるようでしたら以下でお尋ねになってみてはいかがでしょう?

[Firebird-jp-general (Yahoo!グループ)]
http://groups.yahoo.co.jp/group/Firebird-jp-general/

今回の件はどちらかというと Delphi というよりもFirebird の話なので、
詳しい方がいらっしゃる Firebird-jp-general で質問した方が
確実な回答が得られると思います。

# ここの URL を貼っておくと話が早いかと思います。


60のおじん  2013-09-25 22:04:38  No: 45316

DEKOさん、ありがとうございました。
さまざま教えて頂きまして、感謝申し上げます。


ぼくどらえもん  2013-10-02 20:23:39  No: 45317

DEKOさん
いろいろありがとうございました!

下記で検索したところ、
>[Firebird-jp-general (Yahoo!グループ)]

TIBDatabaseInfo.UserNamesで取得できました!
しかも、Firebird1.5でも取得できたんです!

ありがとうございました!


DEKO  2013-10-03 19:28:16  No: 45318

> TIBDatabaseInfo.UserNamesで取得できました!
おー!TIBDatabaseInfo でイケるのですね φ(._.)メモメモ

大変参考になりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加