Re: Benutzer auslesen, modifizieren, usw.



Josef Koller wrote:

> Hallo,
>
> wie bekomme ich die eingetragenen Benutzer einer Firebird-Datenbank,
> um z. b. die Rechte der eingetragenen User zu ändern, neue anzulegen
> oder zu löschen?
>
> Es sollten in einem Grid alle Benutzer ausgelesen werden. Wie bekomme
> ich die Daten (Select ????from ???? Wie und wo muss ich denn die
> Benutzer suchen?
>
> Dann mit Buttons Überarbeiten, Löschen und Hinzufügen Änderungen zu
> bewerkstelligen sein.
> Das, denke ich müßte mit Grant und/oder revolke hinzugekommen sein
> über ein eigenes Formular in der Anwendung.

Hi, da hast Du Dir aber was vorgenommen.
Womit greifts Du auf Firebird zu IBX oder FibPlus?
Ok, es sind 3 Schritte notwendig.
1.) Auslesen aller Benutzer einer Datenbank.
Das geschieht mit den TSecurityService.[1]

2.) Auslesen aller Tabellen, Views, StoreProc aus der Datenbank
Das geht mit normalen DataSet und etwas SQL[2]


3.) Zuweisen von Privilegien dem Benutzer
Das geht auch mit SQL als Script z.Bsp: [4]
Anzeigen der Privilegien für einen Benutzer mit [5]

Siehe auf meiner WebSeite http://www.dirkstein.de das Tool: SQLScripter2


[1]
function TfrmMain.Get_AllUser: Boolean;
var
i,
x: Integer;
begin
{$IFDEF DEBUG}Debugger.EnterProc('TfrmMain.Get_AllUser');
{$ENDIF}

FIBSecuServ.SecurityAction := ActionDisplayUser;
FIBSecuServ.DisplayUsers; //ActionDisplayUser
AdvStringGridBenutzer.RowCount := FIBSecuServ.UserInfoCount + 1;

AdvStringGridBenutzer.cells[0, 0] := 'Username';
AdvStringGridBenutzer.cells[1, 0] := 'LastName';
AdvStringGridBenutzer.cells[2, 0] := 'MiddleName';
AdvStringGridBenutzer.cells[3, 0] := 'FirstName';
AdvStringGridBenutzer.cells[4, 0] := 'UserId';
AdvStringGridBenutzer.cells[5, 0] := 'GroupId';
X := 1;
for I := 0 to FIBSecuServ.UserInfoCount - 1 do
begin
with FIBSecuServ.UserInfo[i] do
begin
application.ProcessMessages;
AdvStringGridBenutzer.cells[0, X + i] := UserName;
AdvStringGridBenutzer.cells[1, X + i] := LastName;
AdvStringGridBenutzer.cells[2, X + i] := MiddleName;
AdvStringGridBenutzer.cells[3, X + i] := FirstName;
AdvStringGridBenutzer.cells[4, X + i] := IntToStr(UserId);
AdvStringGridBenutzer.cells[5, X + i] := IntToStr(groupId);
end;
end;

{$IFDEF DEBUG}Debugger.LeaveProc('TfrmMain.Get_AllUser');
{$ENDIF}

end;

Siehe auf meiner WebSeite http://www.dirkstein.de das Tool: UserManger


[2]
// alle Tabellen einer Datenbank anzeigen
select RDB$RELATION_NAME Tabellenname
from RDB$RELATIONS where (RDB$VIEW_SOURCE is NULL)
and (RDB$SYSTEM_FLAG = 0)
order by RDB$RELATION_NAME

// alle View 's einer Datenbank anzeigen
select RDB$RELATION_NAME,RDB$View_Source
from RDB$RELATIONS where not (RDB$VIEW_SOURCE is NULL)
order by RDB$RELATION_NAME

// alle PROCEDUREN einer Datenbank anzeigen
Select * from RDB$PROCEDURES


[4]
// Grant oder Revoke auf Tabellen und Views....
ptaScript.StartTransaction;
FIBScript1.Script.Clear;
FIBScript1.Script.ADD('GRANT SELECT, Update, INSERT, DELETE ON ' +
Trim(pdsAllTabellenRDBRELATION_NAME.AsString) + ' to ' +
Trim(sUsername));
FIBScript1.ExecuteScript;
ptaScript.commit;

// Execute auf StoreProc.....

ptaScript.StartTransaction;
FIBScript1.Script.Clear;
sSQL := 'GRANT EXECUTE ON PROCEDURE ' +
Trim(pdsAllProcsRDBPROCEDURE_NAME.AsString) + ' TO ' + Trim(sUsername);

FIBScript1.Script.add(sSQL + ';');
FIBScript1.ExecuteScript;
ptaScript.commit;



[5]

select RDB$RELATION_NAME,

(SELECT Count(RDB$PRIVILEGE) FROM RDB$USER_PRIVILEGES
WHERE RDB$RELATION_NAME = x.RDB$RELATION_NAME
and RDB$USER=:BENUTZER
AND RDB$PRIVILEGE = 'D')D ,

(SELECT Count(RDB$PRIVILEGE) FROM RDB$USER_PRIVILEGES
WHERE RDB$RELATION_NAME = x.RDB$RELATION_NAME
and RDB$USER=:BENUTZER
AND RDB$PRIVILEGE = 'S')S ,

(SELECT Count(RDB$PRIVILEGE) FROM RDB$USER_PRIVILEGES
WHERE RDB$RELATION_NAME = x.RDB$RELATION_NAME
and RDB$USER=:BENUTZER
AND RDB$PRIVILEGE = 'U')U,

(SELECT Count(RDB$PRIVILEGE) FROM RDB$USER_PRIVILEGES
WHERE RDB$RELATION_NAME = x.RDB$RELATION_NAME
and RDB$USER=:BENUTZER
AND RDB$PRIVILEGE = 'I')I

from RDB$USER_PRIVILEGES x
Where RDB$USER=:BENUTZER

group by RDB$RELATION_NAME

---------------------------------------------------------------
Mit diesen Ansätzen sollte es kein Problem sein dein Vorhaben um
zusetzen. Ansonsten Frage nach.

hth
Dirk Stein


--
- Lang ist der Weg durch Lehren, kurz und wirksam durch Beispiele.
(Seneca, röm. Dichter u. Phil., 4 v. Chr. - 65 n.Chr.) -
.



Relevant Pages

  • Re: CheckSum
    ... > SELECT GetDate(), dbo.sysobjects.name, CHECKSUM_AGG ... > d.h. sie liefert mir pro Ausführung die aggregierten Checksummen für ... > alle Objecte in der Datenbank. ... FROM dbo.syscomments ...
    (microsoft.public.de.sqlserver)
  • Re: SQL und Schema-Angabe
    ... Select * from SOA.MyTable ... des Datenbank-Benutzers verwendet. ... "Trennung von Benutzer und Schema" ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: MS-Access Datensatz aktualisieren
    ... Die tblFahrten enthält ca. 60 Felder. ... Nehme ich mal eine andere Tabelle, mit lediglich 10 Feldern und rufe die Daten ebenfalls mit SELECT * FROM Tabelle2 auf, kann ich Sie problemlos ändern und in die Datenbank zurückschreiben. ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: A2000: Abfrageproblem
    ... >> FROM (SELECT DISTINCT * FROM Tab) ... >> GROUP BY Jahr, Monat, Benutzer ... (SELECT DISTINCT Jahr, Monat,Tag, Benutzer FROM... ...
    (microsoft.public.de.access)
  • VB6, ADO, SQL, MS Access: Timing-Problem beim Kopieren von einer Tabelle in eine andere DB
    ... Damit kopiere ich eine Tabelle von einer DB in eine andere. ... SELECT MAXFROM clonebooks ... Also dass die Datenbank noch nicht mitgekriegt hat, dass es jetzt eine neue Tabelle gibt? ...
    (microsoft.public.de.vb.datenbank)