FirebirdにIBSecurityServiceでユーザー追加

解決


studio-take  2012-04-03 08:31:44  No: 41866

開発用PCを移行して、TIBSecurityServiceでFBのユーザー追加コードを走らせたところ、

unexpected item in service parameter block, expected isc_spb_sec_username

というメッセージが出て、追加できない状態になりました。
以前は、1.5を使用して今回2.0を使ったのが悪かったのかと思い、1.5に戻したのですが、メッセージは変わりませんでした。
fbembed.dllのファイル名をgds32.dllに変更してアプリフォルダに入れたし、何かやり忘れがあるんでしょうか?
Firebirdは、以前も今回もローカル接続です。

Delphi7ent


studio-take  2012-04-03 08:34:04  No: 41867

間違った
×fbembed.dll →  ○fbclient.dll
でした。


studio-take  2012-04-03 16:17:45  No: 41868

古いPCのDelphiでコンパイルして、新しいPCのFBサーバーにユーザー追加を試してみたところ、エラーが出ずに追加されていました。
なので、新しいPCのDelphiに問題があるようです。
7.1updateも試しましたがだめでした。


DEKO  2012-04-03 19:34:48  No: 41869

IBX のバージョンは  Delphi 7 に付属の 6 ですか?
それとも Delphi 2007 IBX (11.11) 相当の 7.11 ですか?

[IBX 7.11]
http://cc.embarcadero.com/Item/24267

"IBConsole 日本語版+α ANSI Edition" でエラーは出ますか?
http://ht-deko.minim.ne.jp/junkbox.html#IBCONSOLE
# Delphi 2007 でコンパイルされていますので IBX は 11.11 です。

IBConsole をアプリフォルダで実行して
エラーになるかならないかで原因を切り分けられると思います。


DEKO  2012-04-03 20:05:15  No: 41870

> 新しいPCのFBサーバーにユーザー追加を試してみたところ
古い PC は XP で、新しい PC は Windows 7 とかですか?
...でしたら、ループバック接続を試してみてください。

[Vistaでの動作 - IBConsoleについての考察]
http://ht-deko.minim.ne.jp/tech029.html#Vista


studio-take  2012-04-03 22:00:25  No: 41871

新旧両方ともXPです。

IBConsoleは加藤大受さんの書籍「FBオープンソースデータベースの導入と運用の実際」についてたのを使っています。
IBConsoleからのユーザーの追加はできます。
IBXはDelphi7の分で11相当のバージョンは入れてないはずです。

最近変わったことをしたのは、FBのODBCドライバを入れてみたことぐらいなんですが。


DEKO  2012-04-03 22:42:59  No: 41872

>IBConsoleからのユーザーの追加はできます。

そうなるとアプリケーションから見えるパスに複数の
GDS32.DLL が存在するというセンは無さそうですね。

「動かない」と仰っている、
"現象を再現できる最低限のコード" を晒して頂けると話は早いと思うのですが。

uses
  ..., IBServices;

var
  IBSecurityService: TIBSecurityService;
begin
  IBSecurityService := TIBSecurityService.Create(nil);
  try
    with IBSecurityService do
      begin
        ServerName  := '127.0.0.1'; // or 'localhost'
        Protocol    := TCP;
        LoginPrompt := False;
        with Params do
          begin
            Clear;
            Values['user_name'] := 'SYSDBA';
            Values['password' ] := 'masterke';
          end;
        Active      := True;
        UserName    := 'TESTUSER';
        Password    := 'TESTUSER';
        Firstname   := '';
        MiddleName  := '';
        LastName    := '';
        AddUser;
        Active      := False;
    end;
  finally
    IBSecurityService.Free;
  end;
end;

このコードでユーザが追加できないのであれば、環境を疑ってみて下さい。
(アプリの 3050 ポート通信がファイアーウォール等でブロックされていないか?等)


studio-take  2012-04-04 03:33:43  No: 41873

上記と同等のソースでコンポーネントのプロパティ設定を設定し、ActiveプロパティがTrueでエラーにならないことを確認して、
IBSecurityService.AddUser;
だけコーディングしています。
もちろん、UserNameプロパティとパスワードもユニークなのを入力しています。

ファイアウォールで3050を例外設定しましたが、同じでした。


studio-take  2012-04-04 04:42:09  No: 41874

Delphi再インストールしましたが、だめでした。
それと、古いPCでシンプルなやつをコンパイルして、新しいPCで動かしたらきちんとユーザーが追加できました。
var
  IBSS:TIBSecurityService;

procedure TForm1.Button1Click(Sender:TObject);
begin
  IBSS.ServerName := 'localhost';
  IBSS.UserName := Edit1.Text;
  IBSS.Password := Edit2.Text;
  IBSS.Active := True;
  IBSS.AddUser;
end;


igy  2012-04-04 04:46:37  No: 41875

>それと、古いPCでシンプルなやつをコンパイルして、新しいPCで動かしたらきちんとユーザーが追加できました。

このソースを新しいPCに再インストールしたDelphiでコンパイルしたら、エラーがでますか?


studio-take  2012-04-04 05:14:29  No: 41876

エラーがでなくなりました。
それと、同じソースを新PCで新規プロジェクトを起こして、コンパイルしたところ、これも通りました。
再インストール前のテストプロジェクトだと、インストール後でコンパイルしてもエラーが出ているということは…。
DelphiのIBAdminコンポーネントが壊れていたということでしょうか…。


studio-take  2012-04-04 06:53:24  No: 41877

DEKOさん、igyさんありがとうございました。


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

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






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