Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Verarbeiten von DB-Berechtigungen (https://www.delphipraxis.net/75617-verarbeiten-von-db-berechtigungen.html)

Ati 22. Aug 2006 13:12

Datenbank: Firebird • Version: 1.5 • Zugriff über: Zeos/SQLDB

Verarbeiten von DB-Berechtigungen
 
Hallo mal wieder,

ich hoffe es ist mir gestattet mal mehrere Sachen auf einmal anzusprechen (ich weiß das das nicht gerne gesehen ist), aber irgendwie stehen die Punkte im Zusammenhang. Fangen wir an.
1.) wie sollten Berechtigungen verteilt werden. Einzeln pro User oder über Role´s
2.) wenn über Role´s kann man doch für spezielle User Berechtigungen erweitern (ein Test hierzu schlug leider fehl)
3.) die Berechtigungen werden ja über die Systemtabelle RDB$USER_PRIVILEGES abgefragt. Aber wie kann ich diese Berechtigungen an mein Hauptformular übergeben. Sinn ist es sofort bei der Erstellung/Öffnen des Formulares entsprechende Sachen auszublenden.

Ich weiß das alle Punkte hier schonmal angerissen bzw. besprcohen wurden, jedoch noch nicht im Zusammenhang (jedenfalls nicht von mir gefunden). Wenn doch dann bitte ich um Vergebung ;-).

Ati

mkinzler 22. Aug 2006 13:36

Re: Verarbeiten von DB-Berechtigungen
 
Zitat:

1.) wie sollten Berechtigungen verteilt werden. Einzeln pro User oder über Role´s
kommt darauf an, wieviel Benutzer und Datenbanken es sind. Und auch wie differenziert die Rechte sind. hast du z.B. viele Benutzer mit gleichen Rechten sind Roles besser. hat jeder Benutzer andere Rechte, wäre es umständlich erst für jeden Benutzer noch ne Rolle anzulgen.

Zitat:

3.) die Berechtigungen werden ja über die Systemtabelle RDB$USER_PRIVILEGES abgefragt. Aber wie kann ich diese Berechtigungen an mein Hauptformular übergeben. Sinn ist es sofort bei der Erstellung/Öffnen des Formulares entsprechende Sachen auszublenden.
Du mußt dich zuerst mit einem Benutzer anmelden, der zumindest Leserechte auf die Systemtabellen hat, dann kannst du die Rechte auslesen und dich anschließend ummelden.

Ati 22. Aug 2006 14:03

Re: Verarbeiten von DB-Berechtigungen
 
Nun ich möchte schon das nur spezielle Gruppen gewisse Sachen machen können, deshalb favorisiere ich ja auch die Role´s. Aber wie ihr es ja vielleicht auch kennt, kommt oftmals im laufenden Betrieb jemand und möchte dies oder das auch machen können. Daher auch meine Frage,ob es geht das ein User Rechte über seine Role hinaus bekommen kann.

Zitat:

Du mußt dich zuerst mit einem Benutzer anmelden, der zumindest Leserechte auf die Systemtabellen hat, dann kannst du die Rechte auslesen und dich anschließend ummelden.
So ist/soll mein Programm auch aufgebaut werden. Mit dem Login-Formular melde ich mich als SYSDBA an und frage die Role ab. Die entsprechende Daten gebe ich dann an die Komponenten auf meinem DataModul.

Ati 22. Aug 2006 14:39

Re: Verarbeiten von DB-Berechtigungen
 
So ich habe mir jetzt mal eine Testprozedure gebastelt. Hier mal das erste Ergebnis meiner geistigen Ergüsse:
Delphi-Quellcode:
procedure TfrmLogin.btnloginClick(Sender: TObject);
var rolle:String;
begin
  {frmMain.Visible:= true;
  close;
  frmLogin := nil;}
  qrlog.SQL.Text:='SELECT RDB$RELATION_NAME,RDB$PRIVILEGE from RDB$USER_PRIVILEGES where (rdb$user_privileges.RDB$USER = '''+eduser.Text+''') and (rdb$user_privileges.rdb$object_type=13)' ;
  qrlog.open;
  label3.Caption:=qrlog.FieldByName('RDB$RELATION_NAME').AsString;
  rolle:=qrlog.FieldByName('RDB$RELATION_NAME').AsString;
  label4.Caption:=qrlog.FieldByName('rdb$privilege').AsString;
  qrlog.Close;
  qrlog.SQL.Clear;
  qrlog.SQL.Text:='SELECT RDB$PRIVILEGE from RDB$USER_PRIVILEGES where (rdb$user_privileges.RDB$USER='''+rolle+''')' ;
  qrlog.Open;
  label5.Caption:=qrlog.FieldByName('rdb$privilege').AsString;

end;
Jetzt zeigt mir die Abfrage ja nur die erste Berechtigung an. Wie kann ich alle sichtbar machen?

mkinzler 22. Aug 2006 14:43

Re: Verarbeiten von DB-Berechtigungen
 
Delphi-Quellcode:
...
while not qrlog.Eof do
begin
   ...
   qrlog.Next;
end;

Ati 22. Aug 2006 15:02

Re: Verarbeiten von DB-Berechtigungen
 
Genau der richtige Hinweis. Für die Allgemeinheit nochmal die ganze Prozedure:
Delphi-Quellcode:
procedure TfrmLogin.btnloginClick(Sender: TObject);
var rolle,level:String;
begin
  {frmMain.Visible:= true;
  close;
  frmLogin := nil;}
  qrlog.SQL.Text:='SELECT RDB$RELATION_NAME,RDB$PRIVILEGE from RDB$USER_PRIVILEGES where (rdb$user_privileges.RDB$USER = '''+eduser.Text+''') and (rdb$user_privileges.rdb$object_type=13)' ;
  qrlog.open;
  label3.Caption:=qrlog.FieldByName('RDB$RELATION_NAME').AsString;
  rolle:=qrlog.FieldByName('RDB$RELATION_NAME').AsString;
  qrlog.Close;
  qrlog.SQL.Clear;
  qrlog.SQL.Text:='SELECT RDB$PRIVILEGE from RDB$USER_PRIVILEGES where (rdb$user_privileges.RDB$USER='''+rolle+''')' ;
  qrlog.Open;
  while not qrlog.EOF do
  begin
    level:= level+qrlog.FieldByName('rdb$privilege').AsString;
    qrlog.next;
  end;
  qrlog.Close;
  showmessage(level);
end;
So möchte ich jetzt eigentlich weitergehen...die Variable "Level" an das Hauptformular übergeben (weiß aber noch nicht genau wie) und dort dann den String Zeichen für Zeichen auseinander nehmen um so die einzelnen Controls zu aktivieren bzw. deaktivieren. Ist das so richtig??


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:45 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