2008-08-12 1 views
9

Я работаю над спецификацией для части программного обеспечения для своей компании и как часть системы аудита, я думаю, что это было бы аккуратно, если бы был способ захватить текущего пользователя Active Directory.Есть ли способ для доступа к MS Access для захвата текущего пользователя Active Directory?

Надеюсь что-то вроде:

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

ответ

6

Try this article - У меня есть некоторый код на работе, которая будет ERM, работа, если это не ...

Соответствующая цитата:

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" _ 
        (ByVal IpBuffer As String, nSize As Long) As Long 
Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" _ 
        (ByVal lpBuffer As String, nSize As Long) As Long 

Function ThisUserName() As String 
    Dim LngBufLen As Long 
    Dim strUser As String 

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

    If GetUserName(strUser, LngBufLen) = 1 Then 
     ThisUserName = Left(strUser, LngBufLen - 1) 
    Else 
     ThisUserName = "Unknown" 
    End If 
End Function 

Function ThisComputerID() As String 
    Dim LngBufLen As Long 
    Dim strUser As String 

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

    If GetComputerName(strUser, LngBufLen) = 1 Then 
     ThisComputerID = Left(strUser, LngBufLen) 
    Else 
     ThisComputerID = 0 
    End If 
End Function 
+0

У меня возникло соблазн проголосовать за ваш ответ только по ссылке, но, позвольте просто процитировать, к счастью, не гнилую ссылку;) – 2017-04-07 06:10:09

+0

Все хорошо. Был довольно дерьмовым ответом на размышления. Были ранние дни, а не просто ссылки, ответы были не такими жесткими, как сегодня, в моей защите;) В любом случае, спасибо за редактирование. – JamesSugrue 2017-04-09 21:15:13

2

В зависимости от переменные среды остаются действительными - это плохая идея, поскольку их можно легко изменить в пользовательском сеансе.

+0

Очень хорошая точка! – Yarik 2008-10-30 10:14:12

2

Дэвид сделал очень хорошее мнение об опасности использования переменных окружения. Я могу только добавить, что могут быть другие проблемы с переменными среды. Только посмотрите на этот фактический фрагмент кода из нашего 5-летнего проекта:

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 
3

Вот мой вариант: он будет получать все, что угодно:

'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.

Смежные вопросы