脱机检查Active Directory组成员身份



vba中是否有可能脱机检查Active Directory组成员身份?

我已经管理了联机和脱机用户凭据检查(用户名、密码(。

在线=与公司域网络(LAN或Wifi(的第3层连接
离线=没有物理网络连接-没有LAN,没有Wifi

Public Declare Function LogonUser Lib "advapi32" Alias "LogonUserA" _
(ByVal lpszUsername As String, ByVal lpszDomain As String, ByVal lpszPassword As String, _
ByVal dwLogonType As Long, ByVal dwLogonProvider As Long, phToken As Long) As Long
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Public Const LOGON32_PROVIDER_DEFAULT As Long = 0&
Public Const LOGON32_LOGON_INTERACTIVE As Integer = 2&
Public Function ADUserLogin(ByVal strUsername As String, ByVal strPassword As String, _
ByVal strDomain As String) As Boolean
On Error GoTo ADUserLogin_Error
Dim tokenHandle As Long

ADUserLogin = LogonUser(strUsername, strDomain, strPassword,  LOGON32_LOGON_INTERACTIVE, _
LOGON32_PROVIDER_DEFAULT, tokenHandle)
CloseHandle tokenHandle

On Error GoTo 0
Exit Function
ADUserLogin_Error:
MsgBox "Error " & Err.Number & " (" & Err.description & ") in procedure ADUserLogin, line " & Erl & "."
End Function

但是它是如何为Active Directory组成员身份工作的呢?

向Ronny 致以亲切的问候

我已经解决了它,如下所示。当用户在线登录时,我会检查他属于哪个组,并保存此信息,包括上次登录的日期和时间。现在,用户有14天的时间离线登录数据库。

如果在此期间再次连接到域,我只需再次检查组成员身份并做出相应反应。

如果有人知道更好的方法,我总是乐于接受建议

Public Function IsMember(ByVal strUsername As String, ByVal strPassword As String, ByVal strGroup As String, Optional ByVal strDomain As String) As Boolean
10        On Error GoTo IsMember_Error
20        If Not Len(strDomain) <> 0 Or IsNull(strDomain) Then
30            strDomain = CreateObject("WScript.Network").UserDomain
40        End If
50        Set objIADS = GetObject("WinNT:").OpenDSObject("WinNT://" & strDomain, strUsername, strPassword, ADS_SECURE_AUTHENTICATION)
60        Set objIADSUser = objIADS.GetObject("user", strUsername)
70        For Each Member In objIADSUser.Groups
80            If Member.Class = "Group" Then
90                If Member.Name = strGroup Then
100                   IsMember = True
110                   SaveUserMembership strUsername, strGroup, strDomain, Date, Time
120                   Exit For
130               End If
140           End If
150       Next
160       On Error GoTo 0
170       Exit Function
IsMember_Error:
180       MsgBox "Error " & Err.Number & " (" & Err.description & ") in procedure IsMember, line " & Erl & "."
End Function

最新更新