Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Roles in Firebird (https://www.delphipraxis.net/64036-roles-firebird.html)

Jelly 26. Feb 2006 15:59

Datenbank: Firebird • Version: 1.5 • Zugriff über: IBX

Roles in Firebird
 
Nach meinem Verständnis ist Folgendes doch richtig:
1. Logins einer Firebird DB stehen in einer Systemdatenbank
2. Roles sind DB spezifisch, werden also in der Kundendatenbank angelegt.

So, jetzt hab ich also mit IBExpert einen Login erstellt (TOM). Dazu in der Datenbank eine Role (Angestellte), und den Login dort aufgenommen. Der Role hab ich erst mal Zugriff auf alle DB Objekte gegeben... Alles mittels IBExpert.

versuche ich aber jetzt mit IBX eine Tabelle zu öffnen, sagts mir:
no permission for read/select access to TABLE bla

Wie kann ich denn nun die Role verwenden. Habe versucht, in TIBDatabase in der Params Eigenschaft die Zeile:
Delphi-Quellcode:
RoleName=Angestellte
aufzunehmen, beim Connecten meldets dann aber
DFB Constant (Rolename) is unknown

Tell me what's wrong :gruebel:

dataspider 26. Feb 2006 16:13

Re: Roles in Firebird
 
Hi,

es heisst sql_role_name. Wenn die einen Doppelklick auf das Database machst, erscheint ein Editor.
Damit geht es einfacher.

Cu, Frank

Jelly 26. Feb 2006 17:19

Re: Roles in Firebird
 
Dank Dir, so klappts.

Aber nochmal für mein Verständnis:

Ich kann ein Backup meiner DB auf einem anderen Rechner aufspielen, und damit sind die Roles und demnach auch die vergebenen Zugriffsrechte wirksam. Nur die DB Logins selbst muss ich nachträglich noc definieren und der gewünschten Role zuordnen...

mkinzler 26. Feb 2006 19:39

Re: Roles in Firebird
 
Ja, die Rollen sind Teil der Userdatenbank und sind deshalb unabhängig von der security.fdb.

Jelly 26. Feb 2006 21:06

Re: Roles in Firebird
 
Ok, vielen Dank. Ist ja dann nicht viel anders als beim MSSQL Server.

Jetzt müsst ich es noch fertig bringen aus dem eigenen Programm heraus Benutzer zu erstellen und diese dann in einer Role aufzunehmen... Hab das dann mal mit TIBSecurityService probiert, krieg dann aber wieder die Fehlermeldung
This is an Interbase 7.5 function. Please upgrade to Interbase 7.5 to use this functionality
Firebird scheint dann also doch nich so kompatibel zu sein...

Gibts ne andere Möglichkeit, Benutzer anzulegen, z.B. durch direktes Schreiben in die Users-Tabelle der security.fdb Datenbank. Schreiben kann ich ja dort, nur wie wird das Passwort dort gespeichert... Da kommt dann sowieso noch die Frage hinzu, wie ich die security.fdb beim Endanwender lokalisieren kann.

mkinzler 26. Feb 2006 21:11

Re: Roles in Firebird
 
Du kannst die Benutzer natürlich direkt durch Schreiben in die Users Tabelle anlegen, davon ist aber abzuraten.
Der beste Weg ist unter der Verwendung des Hilfsprogrammes gsec (Teil der FireBird bzw. Interbase Distribution).

Jelly 26. Feb 2006 21:45

Re: Roles in Firebird
 
Ich krieg das irgendwie nicht gebacken, das Tool direkt zu nutzen, um einen Benutzer anzulegen:

Code:
gsec -user sysdba -password masterkey add Tester -pw blubb -fname Willy -lname Tester
invalid parameter, no switch defined
error in switch specifications
GSEC> quit

im Interactive Modus gehts, aber das bringt mir nicht viel, da ich dann ja nicht aus dem Delphi Programm heraus einen Benutzer anlegen kann.

Hab gelesen, dass man auch User über eine API erstellen kann, jedoch fehlt mir der Header für Delphi.

Es gibts doch sicherlich irgendwelche Freeware Tools, um diese ganze User und Role Verwaltung in Firebird zu steuern. Ich bin ja wohl nicht der Einzige mit dem Verlangen, das direkt aus meinem Programm heraus zu erledigen.

mkinzler 26. Feb 2006 22:20

Re: Roles in Firebird
 
Liste der Anhänge anzeigen (Anzahl: 1)
Der wurde wohl vergessen, aber von UIB ( jetzt Teil der JVCL) gibt es eine versionsunabhängige Version ( alle Interbase unf Firebird-Versionen) im habe diede mal angehängt.

Jelly 26. Feb 2006 22:30

Re: Roles in Firebird
 
:wall: Was ein Aufwand, nur um einen User anzulegen. Also das kanns doch nicht sein. Ich komm mehr aus dem MSSQL Bereich, dort geht das alles durch simple T-SQL Befehle. Muss ich denn nun die ganze Jedi Lib installieren, um einen Firebird DB User anzulegen. Das leuchtet mir nicht ein.

Naja, vielleicht findet sich ja noch ne einfachere Möglichkeit.

mkinzler 26. Feb 2006 22:41

Re: Roles in Firebird
 
Diese datei wird zwar mit Jedi mitgeliefert, sollte aber auch ohne sie funktionieren. Du kannst ja auch nur die benötigten Teile auslagen ( Def Dtaenstruktur / Importzeile für Befehl aus dll).

Elvis 26. Feb 2006 22:57

Re: Roles in Firebird
 
Zitat:

Zitat von Jelly
:wall: Was ein Aufwand, nur um einen User anzulegen. Also das kanns doch nicht sein. Ich komm mehr aus dem MSSQL Bereich, dort geht das alles durch simple T-SQL Befehle. Muss ich denn nun die ganze Jedi Lib installieren, um einen Firebird DB User anzulegen. Das leuchtet mir nicht ein.

Das User/Rechtesystem aus FB/IB ist einfach schlecht. Es wirkt eher wie ein halbherzig aufgesetztes Addon. IMHO die einzig sinnvolle Lösung wäre es die DB komplett vor dem Client zu verstecken und die Authentifizierung in einem Zwischen-Tier zu erledigen. Ich halte C/S zwar generell für für unskalierbar und unsicher, bei diesem Gefummel in IB/FB sogar...

Zitat:

Naja, vielleicht findet sich ja noch ne einfachere Möglichkeit.
Wenn dir SQLExpres reicht, nimm den. Ansonsten ist pgSQL 8.1 sehr nett. Stumpfsinnige SQLs lassen sich sicher auch mit mySQL lösen. Aber FBs Sinn sehe ich nur wenn es embedded zugeht. ;)

Jelly 26. Feb 2006 23:06

Re: Roles in Firebird
 
Zitat:

Zitat von Elvis
Wenn dir SQLExpres reicht, nimm den. Ansonsten ist pgSQL 8.1 sehr nett. Stumpfsinnige SQLs lassen sich sicher auch mit mySQL lösen. Aber FBs Sinn sehe ich nur wenn es embedded zugeht. ;)

Dieser Meinung bin ich mittlerweilen auch. Mein erster Gedanke war auch, SQL Express zu verwenden. Das Ding ist allerdings etwas zu mächtig, und ich kann nicht davon ausgehen, dass auf jedem Rechner das -NET 2.0 Framework läuft. Ich denk mal, bei etwas antikeren Modellen geht das OS ziemlich in die Knie, wenn ich so ein Hammerding draufhaue.

Deshalb dacht ich Firebird ist schon die richtige Wahl. Aber die ganze Wartung und Nutzbarkeit treibt einen in den Wahnsinn. Aber für meine Anwendung würds absolut ausreichen. Muss jetzt halt nur noch einen einfachen Weg finden, User anzulegen. Ich kann meinem Endkunden nicht zumuten, sich mit gsec anzufreunden.

dataspider 27. Feb 2006 08:09

Re: Roles in Firebird
 
Hi,

ich denke, wenn man auf Firebird aufsetzt, dann sollte man sich die Investition für eine gute Komponentenbibliothek überlegen.
Mit IBO kann man z.B. mit AlterUser Benutzer anlegen. Mit FibPlus geht es sicher auch.

Cu, Frank

hsbc 27. Feb 2006 09:31

Re: Roles in Firebird
 
Hallo,

ich habe das selbe Problem und habe mich deshalb entschieden, die User-/Rechteverwaltung mit einem kleinen externen Programm namens IBEasy+ zu bewerkstelligen. IBEasy+ liefere ich einfach mit dem Installprogramm mit. Es lässt sich sehr einfach bedienen und man kann damit wirklich relativ viel erledigen.

mfg
Herbert

Lemmy 27. Feb 2006 11:24

Re: Roles in Firebird
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,

ich komm aus dem Kopfschütteln nicht mehr raus....

anbei ein kleines Testprogramm (delphi 7, UIB Version 2), das mit JVUIBSecurity einen User anlegt. Was da "schwer" sein soll oder "einen Aufwand" darstellt, kann ich nicht feststellen.

Bzgl. der IB7.5 Fehlermeldung: Stimmen die EInstellungen in der *.inc-Datei der JVUIB? Wurde das Package nach der Einstellung der korrekten Datenbank nochmal kompiliert? Findet das Programm die korrekte Client-DLL?

Grüße
Lemmy

Jelly 27. Feb 2006 11:44

Re: Roles in Firebird
 
Zitat:

Zitat von Lemmy
anbei ein kleines Testprogramm (delphi 7, UIB Version 2), das mit JVUIBSecurity einen User anlegt. Was da "schwer" sein soll oder "einen Aufwand" darstellt, kann ich nicht feststellen.

Nun ja. In meinem Delphi 6 hab ich nun die komplette Jedi installiert, aber ein JVUIBSecurity gibt es da nicht. Unter der Palette JvUIB liegt zwar einiges, aber eben nicht die besagt Komponente... Aber wie gesagt, ist mir der ganze Jedi Overhead etwas zu gross, nur um einen DB User anzulegen.

Zitat:

Zitat von Lemmy
Bzgl. der IB7.5 Fehlermeldung: Stimmen die EInstellungen in der *.inc-Datei der JVUIB? Wurde das Package nach der Einstellung der korrekten Datenbank nochmal kompiliert? Findet das Programm die korrekte Client-DLL?

Ich hab bislang nicht versucht, mit der Jedi den User anzulegen, sondern nur über IBX. Dort kam die besagte Meldung.[/quote]

Jelly 27. Feb 2006 11:56

Re: Roles in Firebird
 
OK, mit den IBX Komponenten gehts jetzt auch. Vielleicht lag es also wirklich an einer falschen gds32.dll Bibliothek, zumal ich mir mal testweis die beta vom Firebird 2.0 aufgesetzt hatte. Da ja gerade die Passwortkodierung dort auch geändert, kann ich mir vorstellen dass es da zu Probleme kommen kann.

Also mit den IBX Komponenten klappts jetzt eben auch. Bleibt jetzt nur noch abzuwarten, wie ich dann irgendwann auf Firebird 2.0 upgraden kann.

Lemmy 27. Feb 2006 12:01

Re: Roles in Firebird
 
Zitat:

Zitat von Jelly
Nun ja. In meinem Delphi 6 hab ich nun die komplette Jedi installiert, aber ein JVUIBSecurity gibt es da nicht. Unter der Palette JvUIB liegt zwar einiges, aber eben nicht die besagt Komponente... Aber wie gesagt, ist mir der ganze Jedi Overhead etwas zu gross, nur um einen DB User anzulegen.

Dann die "richtigen" UIB-Komponenten runterladen:
http://www.progdigy.com/modules.php?name=UIB

Die Jedi-UIB sind veraltet!


Zitat:

Zitat von Jelly
Ich hab bislang nicht versucht, mit der Jedi den User anzulegen, sondern nur über IBX. Dort kam die besagte Meldung.

Welche Version hat die gds32.dll von Firebird? Du darfst die Datei nicht einfach nur umbenennen, sonst bekommt die ne Version mit 1.5.x und das mag IBX gar nicht! Es gibt im BIN von Firebird das Programm instclient.exe mit dem Du eine Kopie der FBClient.dll erzeugen kannst, die ne Versionsnummer von 6.3 hat, dann sollte IBX wieder ohne Probleme funktionieren. Allerdings habe ich mit Delphi 7 und den neuesten IBX-Versionen etwas Probleme mit Firebird gehabt, so dass ich eine ältere Version eingesetzt habe. Ich weiß nicht, ob das mit der aktuellsten IBX immer noch so ist.....

Lad Dir mal die UIB von oben runter. Zur Installation musst Du die JediUIB allerdings aus Delphi rauswerfen!

Grüße
Lemmy

P.S.: Bin zu langsam beim tippen ;-))

Aufgrund der FB2.0 Kompatibilität würde ich mich auf obige Krücke (Clientinst) nicht verlassen und alles was mit Security, backup und Restore zusammenhängt nicht mehr mit den IBX machen! Die UIB sind nicht so riesig, dass die das fertige Produkt unverhältnismäßig aufblasen....

Und noch was: ClientInst legt die Kopie der fbClient.dll im Windows/system32-Verzeichnis an! Wenn also Interbase und Firebird auf dem Rechner sind, bitte nach der Ausführung die korrekte gds32.dll im system-Verzeichnis wieder herstellen!

Jelly 27. Feb 2006 12:22

Re: Roles in Firebird
 
Zitat:

Zitat von Lemmy
Aufgrund der FB2.0 Kompatibilität würde ich mich auf obige Krücke (Clientinst) nicht verlassen und alles was mit Security, backup und Restore zusammenhängt nicht mehr mit den IBX machen! Die UIB sind nicht so riesig, dass die das fertige Produkt unverhältnismäßig aufblasen....

Heisst das, die UIB wird mit Firebird 2.0 keine Probleme haben ?

Hab deine Demo jetzt mit den neuen UIB Kompos ans Laufen gebracht, und es klappt wunderbar. Ich kann hier leider nicht testen, ob das auch auf einem Firebird Server im Netz klappt, da ich zur Zeit nur meinen Laptop zur Verfügung habe.

Noch eine Frage jetzt zu den Roles... Ich habe in meiner DB ja die Role "Angestellte". Wie kann ich jetzt meinen frisch angelegten User Test1 dort aufnehmen?

Lemmy 27. Feb 2006 12:35

Re: Roles in Firebird
 
Zitat:

Zitat von Jelly
Heisst das, die UIB wird mit Firebird 2.0 keine Probleme haben ?

das kann niemand sagen... Aber da der Entwickler die UIB auch unter FreePascal unterstützt, neben Interbase und Firebrid auch Yaffil, gehe ich davon aus, dass das Projekt nicht übermorgen sterben wird....

Zitat:

Zitat von Jelly
Hab deine Demo jetzt mit den neuen UIB Kompos ans Laufen gebracht, und es klappt wunderbar. Ich kann hier leider nicht testen, ob das auch auf einem Firebird Server im Netz klappt, da ich zur Zeit nur meinen Laptop zur Verfügung habe.

Welchen Grund soll es geben, dass das nicht geht? Genau das ist ein Vorteil von Firebird, egal ob lokal, im Netz oder die embedded, alle haben die selbe Schnittstelle nach außen. Lediglich der embedded verhält sich (insbesondere bei der Security) anders als der "echte" Server.

Zitat:

Zitat von Jelly
Noch eine Frage jetzt zu den Roles... Ich habe in meiner DB ja die Role "Angestellte". Wie kann ich jetzt meinen frisch angelegten User Test1 dort aufnehmen?

Ich habe mit Roles noch nie gearbeitet, gehe aber davon aus dass ein

Delphi-Quellcode:
  JvUIBSecurity1.Role:='TestRole';
ausreichen sollte:

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
begin
  JvUIBSecurity1.User:='Test1';
  JvUIBSecurity1.Pass:='test1';
  JvUIBSecurity1.Role:='TestRole'; //**
 JvUIBSecurity1.AddUser;
end;

Jelly 27. Feb 2006 12:43

Re: Roles in Firebird
 
Die Roles sind an die Userdatenbank gebunden, und nicht an die security.fdb. Ich bezweifele also, dass da über JvUIBSecurity gehen wird.

Ausserdem kann ein User in mehreren Roles aufgenommen werden, genauso wie ein Role mehrere User beherbergen kann... Also eine klassische n:m Beziehung.

Noch was Erstaunlichs zu den UIB, was ich fast nicht glauben kann: Ist JvUIBDataset wirklich nur zum Lesen von Daten gedacht, nicht jedoch zum Editieren?

Jelly 27. Feb 2006 12:54

Re: Roles in Firebird
 
OK, das mit dem Zuordnen der Roles wäre hiermit nun auch geklärt... Eingeloggt als sysdba in der Userdatenbank und ein simples:
SQL-Code:
grant ANGESTELLTE to Test1

Lemmy 27. Feb 2006 13:13

Re: Roles in Firebird
 
Hi,

eine Grundsatzfrage: Was ist bei dir die Userdatenbank?

Natürlich kannst Du mit JVUIBDataSet auch Daten ändern, nur eben nicht so wie Du es von TIBDataSet gewöhnt bist (einfach mit einem DBEdit verbinden und fertig), sondern Du verwendest eben eine entsprechende SQL-Anweisung, die Du zusammenbauen musst.

Lemmy

mkinzler 27. Feb 2006 13:17

Re: Roles in Firebird
 
Ich nehme die Datenbank, in der auch die Daten sind.

Jelly 27. Feb 2006 13:45

Re: Roles in Firebird
 
Zitat:

Zitat von Lemmy
eine Grundsatzfrage: Was ist bei dir die Userdatenbank?

Die User und Passwörter an sich liegen bei mir in der Systemdatenbank. Zusäzlich dazu wollte ich in der Userdatenbank die User anlegen, und einige Zusatzinfos darin speichern... Somit muss ich mich nicht ums Loginsystem kümmern, und kann den Loginnamen einfach in meiner DB nachschlagen und die programminternen Rechte zuweisen. Lege ich vom Programm aus einen neuen Benutzer an, so erstelle ich den Eintrag in der security.fdb DB und in meiner DB. Existiert der Login schon in der Systemdatenbank, so erstelle ich nur in meiner DB den Benutzer. Beim Löschen des Benutzer lösche ich allerdings immer nur den Eintrag in meiner Datenbank.


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:50 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz