Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird+Roles+Rechte (https://www.delphipraxis.net/75175-firebird-roles-rechte.html)

Ati 15. Aug 2006 14:10

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

Firebird+Roles+Rechte
 
Hallo zusammen,

zu o.g. Thema habe ich mir schon einiges durchgelesen, jedoch komme ich nicht wirklich weiter.
Folgendes Problem habe ich ... ich möchte Zugriffe über definierte Rollen steuern. Also habe ich mal mehrere Benutzer angelegt (ohne Rechte speziell zuzuweisen) und entsprechende Roles. Wenn ich nun bei der Anmeldung den User, Passwort und die Role angebe, so kann der User auch nur die definierten Sachen machen. Jetzt finde ich es aber nicht so gut, das der User seine Role immer angeben muß (diese kann ja bei anderen Anwendungen ganz anders aussehen). Melde ich also nur den User mit Passwort an, in der Hoffnung das die Role dadurch automatisch eingebunden wird, so darf der User gar nichts. Wie schaffe ich es also das ich nur User und Passwort eingebe und die Rechte automatisch über die zugeteilte Role definiert sind?

Ati

hoika 15. Aug 2006 14:34

Re: Firebird+Roles+Rechte
 
Hallo,

Die Rollen des Users auslesen und wenn es nur eine ist,
die benutzen.
Ich hätte gedacht, dass geht über die Systemtabellen.
Etwa so

Select
rdb$user_privileges.rdb$relation_name as RoleName
From
rdb$user_privileges
where
(rdb$user_privileges.rdb$user='MYUSER') and
(rdb$user_privileges.rdb$object_type=13)


Der Nutzernamen muss in Grossbuchstaben sein.

Ich bekome die Rolle aber nicht heraus.
Musst du mal kucken.

Ohne das =13 sehen ich alle Privilegien, ausser meine gerade angelegte Rolle*wunder*

Ein gutes Testwerkzeug ist IBExpert (Personal)
Dort gibt es die Option, die Systemtabellen sich anzeigen zu lassen.


Heiko


Heiko

Ati 15. Aug 2006 14:46

Re: Firebird+Roles+Rechte
 
Sowas in der Art habe ich ja schon versucht...hat aber nicht geklappt.

Ati 15. Aug 2006 16:08

Re: Firebird+Roles+Rechte
 
Ich habe jetzt mal folgendes gemacht. Ich stelle die Verbindung unter "SYSDBA" her. Und suche dann einen vorhandenen User um mir seine Role anzeigen zu lassen (in einem Label-Feld). Hier mal der Code:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  qrmain.SQL.Text:='SELECT RDB$RELATION_NAME from RDB$USER_PRIVILEGES where RDB$USER=KLU' ;
  qrmain.ExecSQL;
  label2.Caption:=qrmain.FieldByName('RDB$RELATION_NAME').AsString;
end;
Ich erhalte einen EDatabaseError. Wenn ich die EXE starte sagt das Mistding mir das "KLU" nicht bekannt wäre??

hoika 15. Aug 2006 16:13

Re: Firebird+Roles+Rechte
 
Hallo,

du musst natürlich Open statt ExecSQL nehmen.
Ausserdem fehlt das objecttype=13 (das müßten die Rollen sein).
In der Tabelle stehen alle Felder, auf die ein User Zugriff hat.
Sind ne ganze Menge.

Heiko

hoika 15. Aug 2006 16:15

Re: Firebird+Roles+Rechte
 
Hallo,

lade dir mal bexpert runter,
das hat auch nen Table-Editor (mit Anzeige der Daten)und nen Query-Editor.

Heiko

Ati 15. Aug 2006 16:35

Re: Firebird+Roles+Rechte
 
IBExpert benutze ich schon. Hatte einfach ein Brett vor dem Kopf. Aber Du hast mir den richtigen Denkanstoss gegeben...hier mal der richtige Code:
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
var uname:String;
begin
  uname:='KLU';
  qrmain.SQL.Text:='SELECT RDB$RELATION_NAME from RDB$USER_PRIVILEGES where (rdb$user_privileges.RDB$USER = '''+uname+''') and (rdb$user_privileges.rdb$object_type=13)' ;
  qrmain.open;
  label2.Caption:=qrmain.FieldByName('RDB$RELATION_NAME').AsString;
end;
Werde es morgen wohl so weiterversuchen. Die erste Verbindung wird wohl als Sysdba erfolgen um User, Passwort und Role zu ermitteln. Nach Überprüfung wird die Verbindung dann mit den entsprechenden Userdaten erneut erfolgen....so müßte es doch eigentlich klappen oder?

hoika 15. Aug 2006 17:21

Re: Firebird+Roles+Rechte
 
Jepp,

ich würde das allerdings in eine selectable stored procedure packen,
falls du mal auf ne andere DB umsteigst, sind die rdb$-Tabellenzugriffe hinderlich ;)

Heiko

Ati 16. Aug 2006 05:02

Re: Firebird+Roles+Rechte
 
Hört sich gut an ...... jetzt mal im Ernst ich habe nicht ein Wort verstanden. Kannst Du das mal bitte erklären und vielleicht mit ein bischen Quelltext untermalen?? Danke.

hoika 16. Aug 2006 07:47

Re: Firebird+Roles+Rechte
 
Hallo,

werde ich heute abend mal bauen.
Kurze Info.

Eine selectable stored procedure kann man wie eine
Query aufrufen, z.B.

select * from GetRoles('KLU')

GetRoles ist der Name der stored pro (SP)c.
KLU ist der Username.

Vorteil:
Du kannst die SP auch unter Oracle oder MS-SQL erzeugen
und hast dann eine Unabhängigkeit von der Datenbank.

Nachteil:
Die Syntax zum Erzeugen der SP ist nicht richtig so standardisiert.
Jeder Hersteller kocht da so sein Süppchen.
Der SQL-Standard (99) definiert zwar, wie eine SP aussehen soll,
aber kein Hersteller hält sich 100% ig dran,
ausserdem haben die noch "Spracherweiterungen".


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 Uhr.
Seite 1 von 2  1 2      

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