2011-04-29 103 views
1

我們有基於MSAccess 2007構建的應用程序。我們希望爲此應用程序添加一個新的用戶登錄概念。 我想驗證用戶使用Active Directory/Windows身份驗證。我想爲此用戶創建一個日誌文件。 (就像我們爲使用表單身份驗證的.net應用程序所做的那樣) 我該如何在MS Access 2007上執行此操作。在MS Access 2007中使用Active Directory/Windows身份驗證對用戶進行身份驗證

此外,此應用程序運行24小時,它不會關閉。可以有多個用戶使用這個應用程序。 正如我所說這個應用程序是全天候使用,有多個班次運行,不同的用戶登錄和註銷。 在用戶登錄和註銷會話期間,我們需要跟蹤特定用戶的日誌。 此應用程序使用SQL Server 2005作爲數據庫服務器。
您的意見對我來說是一個很大的幫助,開發這種模塊上的MS Access 2007

+0

我不相信你可以做你問什麼。使用Windows用戶登錄(AD不是特別的 - 它只是NTFS用戶/安全性的用戶界面),您必須強制用戶註銷Windows並重新登錄。 – 2011-04-30 19:09:38

+0

老版本Access的相同(?)問題:https://stackoverflow.com/q/1425893/321973 – 2017-04-07 06:13:00

+0

也許相關:https://support.microsoft.com/en-us/help/316748/how-to -authenticate-against-the-active-directory-by-using-forms-authentication-and-visual-c-.net – 2017-04-07 09:33:39

回答

0

由於用戶必須登錄到計算機上,那麼你可以通過使用代碼http://www.mvps.org/access/api/api0008.htm只是抓住他們的登錄:

' This code was originally written by Dev Ashish. 
' It is not to be altered or distributed, 
' except as part of an application. 
' You are free to use it in any application, 
' provided the copyright notice is left unchanged. 
' 
' Code Courtesy of 
' Dev Ashish 
' 
Private Declare Function apiGetUserName Lib "advapi32.dll" Alias _ 
    "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long 

Function fOSUserName() As String 
' Returns the network login name 
Dim lngLen As Long, lngX As Long 
Dim strUserName As String 
    strUserName = String$(254, 0) 
    lngLen = 255 
    lngX = apiGetUserName(strUserName, lngLen) 
    If (lngX > 0) Then 
     fOSUserName = Left$(strUserName, lngLen - 1) 
    Else 
     fOSUserName = vbNullString 
    End If 
End Function 

而且,下面是一個VBS腳本,但它應該在Access工作得很好也:

Displays Group Membership and Active Directory Location

下面的代碼可以運行顯示 Active Directory組的組成員,也讓你知道每個成員的LDAP 專有名稱。輸出會將文本文件命名爲組名 ,並將包含所有成員及其在Active 目錄中的位置。只需將其複製到txt文件並重命名爲.vbs即可享受!

Set objGroup = GetObject(「LDAP://cn=GroupName,ou=OUName,DC=DomainName,DC=local「) 
Set objFileSystem = CreateObject(「Scripting.FileSystemObject」) 
Set objFile = objFileSystem.OpenTextFile(objGroup.Get(「name」) & 」 – Members.txt「, 2, True, 0) 
For Each objMember in objGroup.Members 
    objFile.WriteLine objMember.Get(「sAMAccountName」) & VbTab & _ 
    objMember.Get(「cn」) & VbTab & _ 
    objMember.Parent 
Next 
Set objFile = Nothing 
Set objFileSystem = Nothing 
Set objGroup = Nothing 
+0

謝謝Albert D. Kallal。 它的作品太棒了。是的,我其實想知道網絡用戶名。當用戶登錄並註銷時,我可以記錄詳細信息。感謝這是一個很大的幫助。我們是否也可以在Access中保持會話超時,就像我們在.net環境中做的那樣。 – abhi 2011-05-02 14:29:45

0

在C#.NET中使用

Console.WriteLine("UserName: {0}", Environment.UserName); 
相關問題