AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Userrechte in einer Domain auslesen

Userrechte in einer Domain auslesen

Ein Thema von gargano · begonnen am 20. Jul 2007 · letzter Beitrag vom 23. Jul 2007
Antwort Antwort
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#1

Userrechte in einer Domain auslesen

  Alt 20. Jul 2007, 10:38
Hallo,

vielleicht gibt es dieses Thema schon an anderer Stelle, ich habe lange gesucht, aber nichts Passendes gefunden.

Folgendes Problem :

In meinem Programm habe ich eine eigene Anmeldung mit eigener Rechteverwaltung.
Dies ist keine Windowsverwaltung, sondern darin wird definiert ob einer eine Aktion durchführen darf oder nicht.

Nun möchte ich die Domain User verwenden um die Rechte zu indentifizieren :
Also : User1 hat in der Domain Administratorrechte, User2 nur Userrechte.

Wie man die User in eine Doamin findet und wie man eine SID in Klartext umwandelt habe ich schon gefunden.

Was noch fehlt ist die Funktion wie man die Rechte eines User in der Domain findet .

ähnlich wie : function GetUserRights (Domain,User:String):String;
also GetUserRights ('','User1') und hearuskommt 'Administrator'.

Wobei bei leerem Domainstring die aktuelle Domain verwendet werden soll.

Hat sowas jemand schon gemacht ?

Gruß
gargano
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#2

Re: Userrechte in einer Domain auslesen

  Alt 20. Jul 2007, 12:19
Willst du nur wissen, ob der Benutzer (Domain) Administrator ist?

Oder willst du wissen, ob der Benutzer auf bestimmte Ressourcen (Datei, usw) zugriff hat?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Userrechte in einer Domain auslesen

  Alt 20. Jul 2007, 12:41
Ich möchte nur wissen ob der Benutzer ein Administrator, User mit bestimmten Rechten oder in sonst einer Gruppe ist.
Die Sache ist die, daß der Benutzer meines Programms aber nicht der angemeldete User sein muß.

Z.B. Frau Huber hat sich ins System eingeloggt, Frau Mayer will das Programm benutzen und dazu muß ich in der Domain überprüfen welche Rechte (Admin,User...) Frau Mayer hat.

Gruß
gargano
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

Re: Userrechte in einer Domain auslesen

  Alt 20. Jul 2007, 13:34
Also du willst nur wissen, zu welcher Domain-Gruppe ein Benutzer gehört, der sich bei dir anmeldet?
Dann nimm NetUserGetGroups. Dabei nicht vergessen, dass die Gruppennamen ausgeschrieben sind und auf anderssprachigen Systemen auch anders heißen können.

Oder willst du auch Privilegien der Benutzer wissen?

Um Zugriffsrechte an Dateien usw. festzustellen brauchst du immer ein Token, (vereinfacht )eine ACL und einen Zugrifftyp (AccessMask).
Um das Token zu bekommen must du den Prozess (Thread) personifizieren, d.h. du meldest den Benutzer kurzzeitig am System an, um den Zugriff zu testen.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Userrechte in einer Domain auslesen

  Alt 20. Jul 2007, 14:37
Danke für den Tip,

entschuldige bitte meine unverschämte Frage : Du hast nicht zufällig ein Beispiel für NetUserGetGroups in Delphi zur Hand ?

Gruß
gargano
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#6

Re: Userrechte in einer Domain auslesen

  Alt 20. Jul 2007, 14:45
Hab ich nicht.
Jedoch das Internet stellt sogar mehrere zur Verfügung :

http://www.delphipages.com/threads/t...=19807&G=19804

und schau dir auch das an:
http://entwickler-forum.de/showthread.php?t=37120
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#7

Re: Userrechte in einer Domain auslesen

  Alt 20. Jul 2007, 18:16
Danke, das dachte ich mir das in der Art gehen könnte.

Gehen könnte, dachte ich.
Leider bringt mir die Funktion immer den Code für 'User not found' wenn ich den Domain Namen leer lass. Wenn im Domain was drin steht, dann dauert es etwas länger und er bringt 'Domain not found'.

Der Name ist richtig als PWideChar eingetragen.

Hast Du ein Idee an was das liegen kann ?

Gruß
gargano
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Userrechte in einer Domain auslesen

  Alt 20. Jul 2007, 18:30
Moin Gargano,

zeig' doch mal, wie Du die Funktion benutzt.
Erfahrungsgemäss sind die NetXXX-Funktionen manchmal etwas tricky in der Anwendung.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
gargano

Registriert seit: 2. Okt 2006
76 Beiträge
 
Delphi 2007 Enterprise
 
#9

Re: Userrechte in einer Domain auslesen

  Alt 23. Jul 2007, 13:00
Hallo Chris,
manchmal liegt die Lösung doch näher als erwartet. Ich habe anstatt des Domains den Domainnamen verwendet.
Mit NetGetDCName(nil,pointer(DomainName),pointer(Domai n)); bekommt man die Domain heraus.

Für die, die es interessiert hier der ganze Code :

Delphi-Quellcode:
Function NetUserGetGroups(ServerName, UserName : lpWStr; Level : DWord; Var Buffer : Pointer; PrefMaxLen : DWord; EntriesRead, TotalEntries : lpDWord) : LongInt; stdcall; External 'NETAPI32.DLL';

procedure TForm1.Button3Click(Sender: TObject);
Type
USER_INFO_0 = Record
 Group_Name : PWideChar;
End;
    TBuffer = array[0..1024] of Pointer;

var
    Level : DWORD;
    PrefMaxLen :DWORD;
    PAdr : DWord;
    PBuffer : ^TBuffer;
    Buffer:TBuffer;
    entriesRead, totalEntries : DWORD;
    ResultNetApiStatus :NetAPIStatus;
    TheUser:Array[0..255] Of WideChar;
    User_Info_0_Struct : USER_INFO_0;
    i:Integer;
    domain,DomainName : PWideChar;
begin
     Level:=0;
     PrefMaxLen:= 1024 ;
     StringToWideChar(DomainNameEdit.text,@DomainName,255);

//get Domain Controller
     NetGetDCName(nil,pointer(DomainName),pointer(Domain));
 
     DomainEdit.Text:=WideCharToString(domain); // nur zur Ansicht

     StringToWideChar(UserEdit.text,@TheUser,255);
     UserGroupMemo.Clear;

     ResultNetApiStatus:=NetUserGetGroups (domain,@TheUser, level, pointer(Pbuffer) , PrefMaxLen, @entriesRead, @totalEntries);

     If ResultNetApiStatus = 0 Then Begin
        For I := 0 To EntriesRead - 1 Do begin
            User_Info_0_Struct := USER_INFO_0(PBuffer[i]);
            UserGroupMemo.Lines.Add(WideCharToString(User_Info_0_Struct.Group_Name));
        end;
        if (Domain <> nil) then NetApiBufferFree(Domain);
        if (pBuffer <> nil) then NetApiBufferFree(pBuffer);
 End;
End;
[edit=Luckie]Delphi-Tags. Mfg, Luckie[/edit]
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:49 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