Există o modalitate prin care MS Access să poată apuca actualul utilizator Active Directory?

Lucrez la o specificație pentru un software pentru compania mea și, ca parte a sistemului de audit, cred că ar fi bine dacă ar exista un mod de a apuca actualul utilizator Active Directory.

Sperăm ceva de genul:

Dim strUser as String
strUser = ActiveDirectory.User()
MsgBox "Welcome back, " & strUser
0
fr hi bn

4 răspunsuri

Try this article - I have some code at work that will erm, work if this doesn't...

Citat relevant:

  Funcția privată Declare GetUserName Lib "advapi32.dll" Alias ​​"GetUserNameA" _
                    (ByVal IpBuffer ca șir, nSize atât de lung) cât de lung
Funcția de declarare privată GetComputerName Lib "kernel32" Alias ​​"GetComputerNameA" _
                    (ByVal lpBuffer ca șir, nSize la fel de lung) cât mai mult timp

Funcția ThisUserName() ca String
    Dim LngBufLen Atât timp
    Dim strUser ca șir

    strUser = String $ (15, "")
    LngBufLen = 15

    Dacă GetUserName (strUser, LngBufLen) = 1 Apoi
        ThisUserName = Stânga (strUser, LngBufLen - 1)
    altfel
        ThisUserName = "Necunoscut"
    Sfârșit Dacă
Terminați funcția

Funcția ThisComputerID() ca șir
    Dim LngBufLen Atât timp
    Dim strUser ca șir

    strUser = String $ (15, "")
    LngBufLen = 15

    Dacă GetComputerName (strUser, LngBufLen) = 1 Apoi
        Acest CodComputerID = Stânga (strUser, LngBufLen)
    altfel
        Acest codComputerID = 0
    Sfârșit Dacă
Terminați funcția
 
0
adăugat
Toate bune. A fost un raspuns destul de rahat la reflectie. Au fost primele zile tho, nu doar link-ul de răspunsuri lucrurile nu au fost la fel de rigid ca este astăzi, în apărarea mea) Oricum, mulțumesc pentru editare.
adăugat autor JamesSugrue, sursa
Am fost ispitit sa votez un raspuns doar la link-ul tau, dar eu, hai sa citez link-ul din nenorocire;)
adăugat autor Tobias Kienzler, sursa

Iată versiunea mea: va aduce tot ce vă place:

'gets firstname, lastname, fullname or username
Public Function GetUser(Optional whatpart = "username")
    Dim returnthis As String
    If whatpart = "username" Then GetUser = Environ("USERNAME"): Exit Function
    Set objSysInfo = CreateObject("ADSystemInfo")
    Set objUser = GetObject("LDAP://" & objSysInfo.USERNAME)
    Select Case whatpart
        Case "fullname": returnthis = objUser.FullName
        Case "firstname", "givenname": returnthis = objUser.givenName
        Case "lastname": returnthis = objUser.LastName
        Case Else: returnthis = Environ("USERNAME")
    End Select
    GetUser = returnthis
End Function

I got the original idea from Spiceworks.

0
adăugat

În funcție de variabilele de mediu care rămân valabile, este o idee proastă, deoarece acestea pot fi ușor modificate în cadrul unei sesiuni de utilizator.

0
adăugat
Punct foarte bun!
adăugat autor Yarik, sursa

David a făcut o idee foarte bună despre riscul folosirii variabilelor de mediu. Pot adăuga că pot exista și alte probleme cu variabilele de mediu. Uita-te la acest fragment de cod actual din proiectul nostru vechi de 5 ani:

Public Function CurrentWorkbenchUser() As String

    ' 2004-01-05, YM: Using Application.CurrentUser for identification of 
    ' current user is very problematic (more specifically, extremely 
    ' cumbersome to set up and administer for all users). 
    ' Therefore, as a quick fix, let's use the OS-level user's 
    ' identity instead (NB: the environment variables used below must work fine
    ' on Windows NT/2000/2003 but may not work on Windows 98/ME)
    ' CurrentWorkbenchUser = Application.CurrentUser
    '
    ' 2005-06-13, YM: Environment variables do not work in Windows 2003. 
    ' Use Windows Scripting Host (WSH) Networking object instead.
    ' CurrentWorkbenchUser = Environ("UserDomain") & "\" & Environ("UserName")
    '
    ' 2007-01-23, YM: Somewhere between 2007-01-09 and 2007-01-20, 
    ' the WshNetwork object stopped working on CONTROLLER3. 
    ' We could not find any easy way to fix that.
    ' At the same time, it turns out that environment variables 
    ' do work on Windows 2003.
    ' (Apparently, it was some weird configuration problem back in 2005: 
    ' we had only one Windows 2003 computer at that time and it was 
    ' Will's workstation).
    '
    ' In any case, at the time of this writing, 
    ' returning to environment variables 
    ' appears to be the simplest solution to the problem on CONTROLLER3.
    ' Dim wshn As New WshNetwork
    ' CurrentWorkbenchUser = wshn.UserDomain & "\" & wshn.UserName

    CurrentWorkbenchUser = Environ("USERDOMAIN") & "\" & Environ("USERNAME")

End Function
0
adăugat
Nu există nimic în neregulă cu CurrentUser() dacă utilizați de fapt securitate Jet la nivel de utilizator. Pe de altă parte, dacă nu aveți nevoie de Jet ULS, atunci logarea Windows este o alternativă excelentă (deși este posibil să trebuiască să mențineți un anumit tip de membru al grupului în aplicația dvs.).
adăugat autor David-W-Fenton, sursa