AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird+Roles+Rechte

Ein Thema von Ati · begonnen am 15. Aug 2006 · letzter Beitrag vom 18. Aug 2006
Antwort Antwort
Seite 2 von 2     12   
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#11

Re: Firebird+Roles+Rechte

  Alt 16. Aug 2006, 08:09
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.
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: Firebird+Roles+Rechte

  Alt 16. Aug 2006, 12:57
Hallo,

die kurze Antwort zur Benutzung wäre,
überall, wo es möglich ist

http://www.ibphoenix.com/main.nfs?a=..._intro_sp_trig


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
Heiko
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#13

Re: Firebird+Roles+Rechte

  Alt 16. Aug 2006, 14:49
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.
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#14

Re: Firebird+Roles+Rechte

  Alt 17. Aug 2006, 16:01
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:

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
- Compile (der Blitz)
- 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

  (rdb$user_privileges.rdb$user=:TheUserName) schreiben.

- 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.
Heiko
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#15

Re: Firebird+Roles+Rechte

  Alt 17. Aug 2006, 20:58
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
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: Firebird+Roles+Rechte

  Alt 18. Aug 2006, 06:33
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
Heiko
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#17

Re: Firebird+Roles+Rechte

  Alt 18. Aug 2006, 10:23
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:
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;
Ati
Miniaturansicht angehängter Grafiken
sp2_641.jpg  
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
Ati

Registriert seit: 16. Okt 2003
Ort: Gelsenkirchen
406 Beiträge
 
Delphi 3 Professional
 
#18

Re: Firebird+Roles+Rechte

  Alt 18. Aug 2006, 11:15
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:
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;
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?
Ich weiß das ich nichts weiß

Sokrates
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#19

Re: Firebird+Roles+Rechte

  Alt 18. Aug 2006, 15:15
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
Heiko
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz