VBA:使用Windows身份验证登录

时间:2012-08-27 14:46:50

标签: vba authentication ms-access ldap

我有一个Access应用程序,要求用户输入他们的Windows域用户和密码才能输入。我使用了以下VBA代码来完成此任务:

Function WindowsLogin(ByVal strUserName As String, ByVal strpassword As String, ByVal strDomain As String) As Boolean
    'Authenticates user and password entered with Active Directory. 

    On Error GoTo IncorrectPassword

    Dim oADsObject, oADsNamespace As Object
    Dim strADsPath As String

    strADsPath = "WinNT://" & strDomain
    Set oADsObject = GetObject(strADsPath)
    Set oADsNamespace = GetObject("WinNT:")
    Set oADsObject = oADsNamespace.OpenDSObject(strADsPath, strDomain & "\" & strUserName, strpassword, 0)

    WindowsLogin = True    'ACCESS GRANTED

ExitSub:
    Exit Function

IncorrectPassword:
    WindowsLogin = False   'ACCESS DENIED
    Resume ExitSub
End Function

我注意到有时正确输入信息时,访问被拒绝。我试图调试一次,它给出了错误:“找不到网络路径。 “在Set oADsObject = oADsNamespace.OpenDSObject)行。

不确定为什么会发生这种情况。是否更好地转换为LDAP?我已经尝试但无法正确构建LDAP URL。

2 个答案:

答案 0 :(得分:3)

如果用户已通过Windows登录验证,为什么要让他们再次输入详细信息?

如果您需要知道登录的是哪个用户,可以通过以下功能轻松获取用户名:

Declare Function IGetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal sBuffer As String, lSize As Long) As Long

Function GetUserName() As String

    On Error Resume Next

    Dim sBuffer As String
    Dim lSize As Long
    Dim x As Long

    sBuffer = Space$(32)
    lSize = Len(sBuffer)
    x = IGetUserName(sBuffer, lSize)
    GetUserName = left$(sBuffer, lSize - 1)

End Function

答案 1 :(得分:0)

在GxP环境中,还需要输入至少密码。如果您登录到Windows无关紧要,则需要再次确认。