お知らせ

電子会議

ライブラリ

パレット

Delphi FAQ検索

Delphi FAQ一覧

サンプル蔵





FDelphi FAQ
16番会議室「玉石混淆みんなで作るSample蔵」に寄せられたサンプル

"InterBaseの User管理"



こんにちは、kondo です。

InterBase の User管理をAPIで行うための Unit です。
Inprise社のサイトにある資料を参考に致しました。
  http://www.inprise.co.jp/interbase/tech/index.html

単純な機能しかありませんので、必要に応じて拡張してください。
他によい方法があるかもしれませんし、おかしなところもあるかも
しれませんので、ご指摘ください。

{-------------------------------------------------------
  InterBase5.6 User Maintenance Tool for Delphi5

  s.kondo @Denno Labo. 29Oct00

  ※下記のファイルを使用するのでpathの通ったフォルダに
   存在することを確認すること。
   ibexternals.pas
    ibheader.pas
  ※Inprise社のサイトにある資料を参考に致しました。
  http://www.inprise.co.jp/interbase/tech/index.html
---------------------------------------------------------}
unit IBUserApi;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls,
  Forms, Dialogs,StdCtrls,
  IBExternals,   // in 'ibexternals.pas',
  IBHeader;      // in 'ibheader.pas';

procedure ib_regUser(  name         : String;//  追加するユーザー名
                      password      : String;//  追加するユーザーのパスワード
                      dba_password : String  //  DBAユーザーのパスワード
                      );
procedure ib_delUser(  name         : String;//  追加するユーザー名
                      dba_password : String  //  DBAユーザーのパスワード
                      );
procedure ib_modUser(name           : String;//  変更するユーザー名パスワード
                     password      : String; //  変更するパスワード
                     uid            : Integer;  //  変更するID
                     dba_password  : String     //  DBAユーザーのパスワード
                     );

implementation

function  isc_add_user(  ISC_FAR:PISC_STATUS;
                        USER_SEC_DATA:PUserSecData )  :Integer;
                          cdecl; external 'gds32.dll';
function  isc_delete_user(ISC_FAR:PISC_STATUS;
                          USER_SEC_DATA:PUserSecData ):Integer;
                          cdecl; external 'gds32.dll';
function  isc_modify_user(ISC_FAR:PISC_STATUS;
                          USER_SEC_DATA:PUserSecData ):Integer;
                          cdecl; external 'gds32.dll';

{-----------------------------------------------
    user の追加
}
procedure ib_regUser(  name         : String; //  追加するユーザー名
                      password      : String; //  追加するユーザーのパスワード
                      dba_password : String   //  DBAユーザーのパスワード
                      );
var
   userData: TUserSecData;
   userDataPtr: PUserSecData;
   status: array[0..19] of ISC_STATUS;
   isc_status: PISC_STATUS;
   retVal : Integer;
begin
  { isc_statusポインタの準備 }
  isc_status := @status;
  { ユーザーデータ構造体のポインタの準備 }
  userDataPtr := @userData;
  { ユーザーデータ構造体の作成}
  userData.user_name :=   PChar(name);
  userData.password  :=   PChar(password);
  userData.protocol  :=   sec_protocol_local;
  userData.dba_user_name := 'SYSDBA';
  userData.dba_password  := PChar(dba_password);
  userData.sec_flags := sec_password_spec
                        or sec_dba_user_name_spec
                        or sec_dba_password_spec;

  { セキュリティデータベースにユーザーを追加}
  try
    retVal := isc_add_user(isc_status, userDataPtr);
  except
    showMessage('Error Occurred/ib_regUser/IBUserApi');
  end;
end;

{-----------------------------------------------
    user の削除
}
procedure ib_delUser(  name         : String; //  追加するユーザー名
                      dba_password : String   //  DBAユーザーのパスワード
                      );
var
   userData: TUserSecData;
   userDataPtr: PUserSecData;
   status: array[0..19] of ISC_STATUS;
   isc_status: PISC_STATUS;
   errorBuffer: array[0..256] of char;
   buffer  : PChar;
   retVal : Integer;
begin
   { isc_statusポインタの準備 }
   isc_status := @status;
   { ユーザーデータ構造体のポインタの準備 }
   userDataPtr := @userData;
   {エラーバッファ用のポインタの準備 }
   buffer := errorBuffer;
   { ユーザーデータ構造体の準備}
   userData.user_name := PChar(name);
   userData.protocol := sec_protocol_local;
   userData.dba_user_name := 'SYSDBA';
   userData.dba_password := PChar(dba_password);
   userData.sec_flags :=   sec_dba_user_name_spec
                           and sec_dba_password_spec;
   { セキュリティデータベースから削除}
   try
       retVal := isc_delete_user(isc_status, userDataPtr);
   except
      showMessage('Error Occurred/ib_delUser/IBUserApi');
   end;
end;

{-----------------------------------------------
    パスワード、id の変更
}
procedure ib_modUser(name         : String; //  変更するユーザー名パスワード
                     password     : String; //  変更するパスワード
                     uid          : Integer;//  変更するID
                     dba_password : String  //  DBAユーザーのパスワード
                     );
var
   userData: TUserSecData;
   userDataPtr: PUserSecData;
   status: array[0..19] of ISC_STATUS;
   isc_status: PISC_STATUS;
   errorBuffer: array[0..256] of char;
   retVal : Integer;
begin
  { isc_status ポインタの準備 }
  isc_status := @status;
  { ユーザーデータ構造体のポインタの準備  }
  userDataPtr := @userData;
  { ユーザーデータ構造体の準備 }
  userData.user_name      :=   PChar(name);
  userData.password       :=   PChar(password);
  userData.protocol       :=   sec_protocol_local;
  userData.dba_password   :=   PChar(dba_password);
  userData.dba_user_name  :=   'SYSDBA';
  userData.uid            :=  uid;
  userData.sec_flags := sec_uid_spec
                        or sec_password_spec
                        or sec_dba_user_name_spec
                        or sec_dba_password_spec;
  { セキュリティデータベースのユーザーを変更}
  try
    isc_modify_user(isc_status, userDataPtr);
  except
    showMessage('Error Occurred/ib_modUser/IBUserApi');
  end;
end;

end.
----------------------------------------------------------------------
                              00/10/29(Sun) 07:43pm  TBE02010 kondo
 


- FDELPHI  MES(16):玉石混淆みんなで作るSample蔵【見本蓄積】 00/11/14 -

Original document by kondo           氏 ID:(TBE02010)


ここにあるドキュメントは NIFTY SERVEの Delphi Users' Forum の16番会議室「玉石混淆みんなで作るSample蔵」に投稿されたサンプルです。これらのサンプルはボーランド株式会社がサポートする公式のものではありません。また、必ずしも動作が検証されているものではありません。これらのサンプルを使用したことに起因するいかなる損害も投稿者、およびフォーラムスタッフはその責めを負いません。使用者のリスクの範疇でご使用下さい。

Copyright 1996-2002 Delphi Users' Forum