![]() |
Re: Firebird+Roles+Rechte
Also ist jetzt wohl der Zeitpunkt gekommen, wo ich mich mit "Stored Procedures" beschäftigen muß wie? Hatte mich bisher immer davor gedrückt, da es mir schwierig und kompliziert erschien. Aber naja kann ja eigentlich nur förderlich sein. Wobei ich bei meinen bisherigen Berührungspunkte nie unterscheiden konnte, wo eine SP Sinn macht und wo nicht.
|
Re: Firebird+Roles+Rechte
Hallo,
die kurze Antwort zur Benutzung wäre, überall, wo es möglich ist ;) ![]() Probleme gibt es aber auch: - Aktualisierung (z.B. neuer Parameter) ist nicht ganz so leicht wie in Delphi. - Sprach- / Funktionsunterschiede der einzelnen Datenbank-Server. Gerade der 1. Punkt ist hart. Heiko |
Re: Firebird+Roles+Rechte
Nun ich bin noch ziemlich am Anfang der DB-Programmierung deswegen sagt mir Punkt 1 nicht viel. Jedoch habe ich die letzten Stunden viel mit experimentieren und lesen bezgl. SP´s verbracht...gerade dadurch will mir noch nicht so richtig klar werden wie die Abfrage der "Role" und das entsprechende zuweisen der Berechtigungen mit einer SP geht. Bin also ganz begierig auf Deinen Beispielcode, für den ich mich jetzt schonmal bedanken möcht.
|
Re: Firebird+Roles+Rechte
So,
das ganze unter IBExpert. - DB registrieren - dann bei Procedures Rechts-Klick New(Neu) - auf der rechten Seite in der Toolbar "LazyMode aus" (das ist links vom Compile, also dem Blitz) - alles aus dem Editor rauslöschen - jetzt gaaanz nach oben , ALLES raus ;) (der Cursor steht nicht in der 1. Zeile) - Folgendes von Hand eintippen Schlaue Leute Copy&Paste *fg*
SQL-Code:
- Compile (der Blitz)Create Procedure SP_GETROLESONUSER ( THEUSERNAME VarChar(31)) Returns ( THEROLES VarChar(31)) As Begin For Select rdb$user_privileges.rdb$relation_name as RoleName From rdb$user_privileges Where (rdb$user_privileges.rdb$user=:TheUserName) and (rdb$user_privileges.rdb$object_type=13) into :TheRoles do Begin Suspend; End End - die Meldung bestätigen - F12 (Query-Editor) select * from SP_GETROLESONUSER('KLU'); - F9 Ergebnis sind die Roles (auch mehrere). Diese "selectable stored procedure" wird also wie eine Query benutzt, die allerdings einen Parameter hat. Kurze Erklärung: - THEUSERNAME ist der Input-Parameter es wird Groß-Buchstaben verlangt sonst muesste man in der SP ein
SQL-Code:
schreiben.
(rdb$user_privileges.rdb$user=:TheUserName)
- THEROLES ist Ausgabeparameter - Das "For Select Into" erzeugt einen Cursor - das Suspend wartet solange, bis der Client den Datensatz abholt (fetch) UND WOZU DAS ALLES ? 1. Der Code kann von verschiedenen Programmen benutzt werden. 2. Die gleiche SP, allerdings mit einem anderen Code intern, kann man für mehrere Datenbanken (Oracle) schreiben Heiko PS: Die SP hat nichts mit der Role-Zuweisung zu tun, dafür gibt es GRANT. |
Re: Firebird+Roles+Rechte
Vorab erstmal vielen Dank für Deine Mühe und Hilfe. Nun mal zurück zum Programm. Ich werde den Programmablauf mal mit meinen Worten fassen okay?
Ich erstelle ein Anmeldeformular in welchem Username und das Passwort angegeben weden muß. Nach der Eingabe rufe ich die SP auf (hier müßte doch eigentlich auch noch das Passwort auf Richtigkeit geprüft werden oder??), welche die zugewiesene Role ermittelt. Aber wie geht es dann am besten weiter?? Soll die SP die Role zurückgeben und das Programm meldet sich nochmal mit allen drei Variablen (User,Pass,Role) an oder soll per GRANT dem User die Rechte der Role zugewiesen werden. Und wenn ja was macht man wenn ein User mehrer Roles hat? Werde aber morgen früh Deine Anleitung erstmal ausprobieren. Ati |
Re: Firebird+Roles+Rechte
Hallo,
1. UserName, Passwort abfragen (editor) 2. anmelden als SYSDBA und alle Rollen des Users abfragen hat der User keine Rollen tja 2.a Abbruch 2.b ohne Rolle anmelden 3. wenn es nur eine Rolle ist (die Rollen packt man z.B. in eine StringList) anmelden unter dieser Rolle wenn er mehrere hat, ComboBox einblenden, wo die Rollen angeeigt / vom User eingestellt werden 4. Die Richtigkeit des Passwortes bekommst du nur mit, wenn das Connect erfolgreicht war. eine andere Möglichkeit gibt es afaik nicht Heiko |
Re: Firebird+Roles+Rechte
Liste der Anhänge anzeigen (Anzahl: 1)
Irgendeine Kleinigkeit mache ich wohl noch falsch. Also wenn ich die SP in IBExpert ausführe funktioniert alles. Versuche ich die SP durch mein Delphi/Lazarus-Programm aufzurufen kommt eine Fehlermeldung (s.Anhang). Aber es gibt ja eindeutig diesen User. HAbe zu Testzwecken auch mal einen weiteren angelegt aber auch mit dem klappt es nicht. Hier mal mein Code:
Delphi-Quellcode:
Ati
procedure TForm2.Button1Click(Sender: TObject);
var user,rolle,pass:String; begin user:=upcase(eduser.Text); pass:=edpass.Text; qrlog.sql.text:='select * from SP_GETROLESONUSER('''+user+''')'; qrlog.open; label3.Caption:=qrlog.FieldByName('THEROLES').AsString; end; |
Re: Firebird+Roles+Rechte
Ich verstehe es einfach nicht... wenn ich die Abfrage der Role aus dem Program heraus mache funktioniert alles (hier mal der entsprechende Code):
Delphi-Quellcode:
Aber hier wird doch nichts anderes gemacht als in der SP. Zumal in der Fehlermeldung ja der USER 'KLU' auch angezeigt wird, demnach kann es doch kein Fehler in der Parameterübergabe geben oder?
user:=upcase(eduser.Text);
qrlog.SQL.Text:='SELECT RDB$RELATION_NAME from RDB$USER_PRIVILEGES where (rdb$user_privileges.RDB$USER = '''+user+''') and (rdb$user_privileges.rdb$object_type=13)' ; qrlog.open; label3.Caption:=qrlog.FieldByName('RDB$RELATION_NAME').AsString; |
Re: Firebird+Roles+Rechte
Hallo,
- Anmeldung als SYSDBA, und hole der Rollen des Users - hat er mehr als eine -> Abfrage (Combobox ?) - Anmeldung des Users+Pass+Role Die Prüfung ob das Passwort gültig ist erfolgt beim Login. Eine Abfrage wie "Ist Passwort gültig?" gibt es nicht. Heiko |
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:45 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-2025 by Thomas Breitkreuz