Post by Josef KollerHallo,
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.) -