MS Access有没有办法抓住当前的Active Directory用户?
时间:2020-03-05 18:39:14 来源:igfitidea点击:
我正在为我公司的软件制定规范,并且作为审核系统的一部分,我认为如果有一种方法可以抓住当前的Active Directory用户,那就太好了。
希望是这样的:
Dim strUser as String strUser = ActiveDirectory.User() MsgBox "Welcome back, " & strUser
解决方案
回答
尝试这篇文章,我有一些工作中的代码会出错,如果没有的话,它会工作...
相关报价:
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
回答
依靠环境变量保持有效不是一个好主意,因为可以在用户会话中轻松更改它们。
回答
David很好地说明了使用环境变量的风险。我只能补充一点,环境变量可能还有其他问题。只需看一下我们已有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