Re: Benutzer auslesen, modifizieren, usw.
- From: "Dirk Stein" <ds-spam@xxxxxx>
- Date: 6 Dec 2005 14:46:19 GMT
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.) -
.
- Follow-Ups:
- Re: Benutzer auslesen, modifizieren, usw.
- From: Josef Koller
- Re: Benutzer auslesen, modifizieren, usw.
- References:
- Benutzer auslesen, modifizieren, usw.
- From: Josef Koller
- Benutzer auslesen, modifizieren, usw.
- Prev by Date: Re: "Group By" problem
- Next by Date: Re: Benutzer auslesen, modifizieren, usw.
- Previous by thread: Re: Benutzer auslesen, modifizieren, usw.
- Next by thread: Re: Benutzer auslesen, modifizieren, usw.
- Index(es):
Relevant Pages
|