|
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
|