Discussion:
Benutzer auslesen, modifizieren, usw.
(zu alt für eine Antwort)
Josef Koller
2005-12-06 09:37:16 UTC
Permalink
Hallo,

wie bekomme ich die eingetragenen Benutzer einer Firebird-Datenbank, um z.
b. die Rechte der eingetragenen User zu ändern, neue anzulegen oder zu
löschen?

Es sollten in einem Grid alle Benutzer ausgelesen werden. Wie bekomme ich
die Daten (Select ????from ???? Wie und wo muss ich denn die Benutzer
suchen?

Dann mit Buttons Überarbeiten, Löschen und Hinzufügen Änderungen zu
bewerkstelligen sein.
Das, denke ich müßte mit Grant und/oder revolke hinzugekommen sein

Die Verwaltung soll nicht über z. B. IB Expert erfolgen, sondern eben über
ein eigenes Formular in der Anwendung.

Vielen Dank

Josef
Peter Lange
2005-12-06 12:06:55 UTC
Permalink
Post by Josef Koller
Hallo,
wie bekomme ich die eingetragenen Benutzer einer Firebird-Datenbank, um z.
b. die Rechte der eingetragenen User zu ändern, neue anzulegen oder zu
löschen?
Es sollten in einem Grid alle Benutzer ausgelesen werden. Wie bekomme ich
die Daten (Select ????from ???? Wie und wo muss ich denn die Benutzer
suchen?
Hallo Josef,

verbinde eine IBDatabase mit der 'security.fdb' im Firebirdverzeichnis,
und nimm daraus die Tabelle USERS. Ich weiß aber nicht genau, wie Du die
Passwörter handhaben mußt, da ich mich damit noch nicht weiter
beschäftigt habe.

Die Rechte der einzelnen Benutzer wiederum setzt Du mit einfachem SQL -
Grant und Revoke, hast Du ja auch schon erwähnt.

Viele Grüße

Peter
Dirk Stein
2005-12-06 14:54:37 UTC
Permalink
Peter Lange wrote:

Hi,
Post by Peter Lange
verbinde eine IBDatabase mit der 'security.fdb' im
Firebirdverzeichnis, und nimm daraus die Tabelle USERS. Ich weiß aber
nicht genau, wie Du die Passwörter handhaben mußt, da ich mich damit
noch nicht weiter beschäftigt habe.
Achtung, auf die Security.fdb nicht mit normalen SQl zugreifen.
Sondern dafür das TSecurityService verwenden.

Passwörter unter Firebird können nicht ausgelesen werden da diese nach
dem anlegen verschlüsselt abgespeichert werden. Und es keinen
Rückgabewert gibt.


hth
Dirk Stein
--
- Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
(Seneca, röm. Dichter u. Phil., 4 v. Chr. - 65 n.Chr.) -
Heiko Luettge
2005-12-06 14:07:17 UTC
Permalink
Hallo Josef,
Use a TIBSecurityService object to manage user access to the InterBase
server.

Aus der Hilfe zu dem IBAdmin (Reiter wird mit íbx installiert).
Also ibx runterladen (sourceforge)
und mal in der Hilfe blättern.

Heiko
Heiko Luettge
2005-12-06 14:13:10 UTC
Permalink
btw ibconsole
du kannst dir ja den Quelltext ansehen

http://cvs.sourceforge.net/viewcvs.py/ibconsole/ibconsole/

frmuUser.X

wäre der Anfang.

Heiko
Dirk Stein
2005-12-06 14:46:19 UTC
Permalink
Post by Josef Koller
Hallo,
wie bekomme ich die eingetragenen Benutzer einer Firebird-Datenbank,
um z. b. die Rechte der eingetragenen User zu ändern, neue anzulegen
oder zu löschen?
Es sollten in einem Grid alle Benutzer ausgelesen werden. Wie bekomme
ich die Daten (Select ????from ???? Wie und wo muss ich denn die
Benutzer suchen?
Dann mit Buttons Überarbeiten, Löschen und Hinzufügen Änderungen zu
bewerkstelligen sein.
Das, denke ich müßte mit Grant und/oder revolke hinzugekommen sein
über ein eigenes Formular in der Anwendung.
Hi, da hast Du Dir aber was vorgenommen.
Womit greifts Du auf Firebird zu IBX oder FibPlus?
Ok, es sind 3 Schritte notwendig.
1.) Auslesen aller Benutzer einer Datenbank.
Das geschieht mit den TSecurityService.[1]

2.) Auslesen aller Tabellen, Views, StoreProc aus der Datenbank
Das geht mit normalen DataSet und etwas SQL[2]


3.) Zuweisen von Privilegien dem Benutzer
Das geht auch mit SQL als Script z.Bsp: [4]
Anzeigen der Privilegien für einen Benutzer mit [5]

Siehe auf meiner WebSeite http://www.dirkstein.de das Tool: SQLScripter2


[1]
function TfrmMain.Get_AllUser: Boolean;
var
i,
x: Integer;
begin
{$IFDEF DEBUG}Debugger.EnterProc('TfrmMain.Get_AllUser');
{$ENDIF}

FIBSecuServ.SecurityAction := ActionDisplayUser;
FIBSecuServ.DisplayUsers; //ActionDisplayUser
AdvStringGridBenutzer.RowCount := FIBSecuServ.UserInfoCount + 1;

AdvStringGridBenutzer.cells[0, 0] := 'Username';
AdvStringGridBenutzer.cells[1, 0] := 'LastName';
AdvStringGridBenutzer.cells[2, 0] := 'MiddleName';
AdvStringGridBenutzer.cells[3, 0] := 'FirstName';
AdvStringGridBenutzer.cells[4, 0] := 'UserId';
AdvStringGridBenutzer.cells[5, 0] := 'GroupId';
X := 1;
for I := 0 to FIBSecuServ.UserInfoCount - 1 do
begin
with FIBSecuServ.UserInfo[i] do
begin
application.ProcessMessages;
AdvStringGridBenutzer.cells[0, X + i] := UserName;
AdvStringGridBenutzer.cells[1, X + i] := LastName;
AdvStringGridBenutzer.cells[2, X + i] := MiddleName;
AdvStringGridBenutzer.cells[3, X + i] := FirstName;
AdvStringGridBenutzer.cells[4, X + i] := IntToStr(UserId);
AdvStringGridBenutzer.cells[5, X + i] := IntToStr(groupId);
end;
end;

{$IFDEF DEBUG}Debugger.LeaveProc('TfrmMain.Get_AllUser');
{$ENDIF}

end;

Siehe auf meiner WebSeite http://www.dirkstein.de das Tool: UserManger


[2]
// alle Tabellen einer Datenbank anzeigen
select RDB$RELATION_NAME Tabellenname
from RDB$RELATIONS where (RDB$VIEW_SOURCE is NULL)
and (RDB$SYSTEM_FLAG = 0)
order by RDB$RELATION_NAME

// alle View 's einer Datenbank anzeigen
select RDB$RELATION_NAME,RDB$View_Source
from RDB$RELATIONS where not (RDB$VIEW_SOURCE is NULL)
order by RDB$RELATION_NAME

// alle PROCEDUREN einer Datenbank anzeigen
Select * from RDB$PROCEDURES


[4]
// Grant oder Revoke auf Tabellen und Views....
ptaScript.StartTransaction;
FIBScript1.Script.Clear;
FIBScript1.Script.ADD('GRANT SELECT, Update, INSERT, DELETE ON ' +
Trim(pdsAllTabellenRDBRELATION_NAME.AsString) + ' to ' +
Trim(sUsername));
FIBScript1.ExecuteScript;
ptaScript.commit;

// Execute auf StoreProc.....

ptaScript.StartTransaction;
FIBScript1.Script.Clear;
sSQL := 'GRANT EXECUTE ON PROCEDURE ' +
Trim(pdsAllProcsRDBPROCEDURE_NAME.AsString) + ' TO ' + Trim(sUsername);

FIBScript1.Script.add(sSQL + ';');
FIBScript1.ExecuteScript;
ptaScript.commit;



[5]

select RDB$RELATION_NAME,

(SELECT Count(RDB$PRIVILEGE) FROM RDB$USER_PRIVILEGES
WHERE RDB$RELATION_NAME = x.RDB$RELATION_NAME
and RDB$USER=:BENUTZER
AND RDB$PRIVILEGE = 'D')D ,

(SELECT Count(RDB$PRIVILEGE) FROM RDB$USER_PRIVILEGES
WHERE RDB$RELATION_NAME = x.RDB$RELATION_NAME
and RDB$USER=:BENUTZER
AND RDB$PRIVILEGE = 'S')S ,

(SELECT Count(RDB$PRIVILEGE) FROM RDB$USER_PRIVILEGES
WHERE RDB$RELATION_NAME = x.RDB$RELATION_NAME
and RDB$USER=:BENUTZER
AND RDB$PRIVILEGE = 'U')U,

(SELECT Count(RDB$PRIVILEGE) FROM RDB$USER_PRIVILEGES
WHERE RDB$RELATION_NAME = x.RDB$RELATION_NAME
and RDB$USER=:BENUTZER
AND RDB$PRIVILEGE = 'I')I

from RDB$USER_PRIVILEGES x
Where RDB$USER=:BENUTZER

group by RDB$RELATION_NAME

---------------------------------------------------------------
Mit diesen Ansätzen sollte es kein Problem sein dein Vorhaben um
zusetzen. Ansonsten Frage nach.

hth
Dirk Stein
--
- Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
(Seneca, röm. Dichter u. Phil., 4 v. Chr. - 65 n.Chr.) -
Josef Koller
2005-12-06 17:31:21 UTC
Permalink
Hallo,

vielen Dank für die Hinweise.
So wie ich das lese verwenden alle Vorschläge Komponenten, die ich nicht
habe:

In Heikos Vorschlag brauche ich eine
TIBSecurityService
bei Dirk eine
TFIBSecuServ

Ich habe Delphi 4 prof. und Zeos installiert. Dann hab ich noch
FreeIBComponents gefunden und installiert. Da ist aber auch kein
SecurityService dabei. Ich kann zwar die Users von dieser Security.fdb in
einem Grid darstellen. Dann setzt es aber mit ZEOS schon aus.
Die FIB Komponenten hatte ich mal zum Ausprobieren. Die haben mich aber vom
Umfang her fast erschlagen. Außerdem denke ich nicht das der SecuServ free
ist.

Heiko hat dann noch "IBX runterladen" empfohlen. Wenn ich in Sourceforge.net
suche finde ich zwar Komponenten dazu. Hier heißt es in der Liste aber dann
lapidar older Version Delphi5/6/7. Also nichts für Delphi 4.

Gibt es noch irgendwo was in Richtung SecurityService für Delphi4?

Vielen Dank

Josef
Dirk Stein
2005-12-07 09:12:21 UTC
Permalink
Josef Koller wrote:

Hallo Josef,
Post by Josef Koller
Hallo,
vielen Dank für die Hinweise.
So wie ich das lese verwenden alle Vorschläge Komponenten, die ich
In Heikos Vorschlag brauche ich eine
TIBSecurityService
Ist von den IBX (Borland) und wird ab D5 mitgeliefert.
Schaumal nach ob Jeff Overcash (Interbase / Delphi Team)
http://codecentral.borland.com/codecentral/ccweb.exe/author?authorid=102
evtl. was für D4 gemacht hat.
Post by Josef Koller
bei Dirk eine
TFIBSecuServ
Ist von FibPlus (DevRace) http://www.devrace.com/
Post by Josef Koller
Ich habe Delphi 4 prof. und Zeos installiert. Dann hab ich noch
FreeIBComponents gefunden und installiert.
Ja, diese greifen auf die Standard Datenbank zu, aber unterstützen
die anderen Bereiche (TIBConfigService; TIBBackupService;
TIBRestoreService; TIBValidationService; TIBStatisticalService;
TIBLogService; TIBSecurityService; TIBServerProperties;
TIBLicensingService; TIBInstall; TIBUnInstall) nicht.
Post by Josef Koller
Die FIB Komponenten hatte ich mal zum Ausprobieren. Die
haben mich aber vom Umfang her fast erschlagen.
Warum, es sind i.d.R. nur die Kompos dabei die man bei IBX auch findet.
IMHO,aber wenn Du ernsthaft was mit Firebird machen möchtest kommst Du
an FibPlus nicht vorbei.
Es gibt noch IBObject, ich finde es aber zu propertär.
IB Object Jason Wharton http://www.ibobjects.com
Post by Josef Koller
Außerdem denke ich
nicht das der SecuServ free ist.
Stimmt.
Post by Josef Koller
Heiko hat dann noch "IBX runterladen" empfohlen. Wenn ich in
Sourceforge.net suche finde ich zwar Komponenten dazu.
Bei SourceForge?, Die gehören doch Borland und werden von Jeff Overcash
mit jeder neuen Interbase Version weiter etwickelt, sonderbar.
http://codecentral.borland.com/codecentral/ccweb.exe/author?authorid=102
Post by Josef Koller
Gibt es noch irgendwo was in Richtung SecurityService für Delphi4?
Es gibt etwas mit Security von TMS http://www.tmssoftware.com habe es
mir aber nicht angesehen.


hth
Dirk Stein
--
- Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
(Seneca, röm. Dichter u. Phil., 4 v. Chr. - 65 n.Chr.) -
Lesen Sie weiter auf narkive:
Loading...