You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在MS Access前端获取SharePoint链接表的集成认证用户名?

获取SharePoint集成认证用户名的可行方法

要获取Access连接SharePoint链接表时使用的应用集成认证用户名,Environ("UserName")仅能返回本地Windows用户名,无法满足需求,可通过以下两种方式实现:

方法一:调用SharePoint REST API获取当前认证用户

利用SharePoint的REST API接口,Access发送请求时会自动沿用连接SharePoint的集成认证上下文,返回当前用于连接的用户信息。

VBA代码示例

Public Function GetSPIntegratedUser() As String
    Dim xmlHttp As Object
    Dim spSiteRootUrl As String
    Dim responseContent As String
    Dim loginName As String
    
    ' 替换为你的SharePoint站点根URL(如https://your-tenant.sharepoint.com/sites/your-site)
    spSiteRootUrl = "https://your-sharepoint-site-url"
    
    Set xmlHttp = CreateObject("MSXML2.XMLHTTP.6.0")
    On Error GoTo Cleanup
    
    ' 发送GET请求获取当前用户的登录名
    xmlHttp.Open "GET", spSiteRootUrl & "/_api/web/currentuser?$select=LoginName", False
    xmlHttp.setRequestHeader "Accept", "application/json;odata=verbose"
    xmlHttp.send
    
    If xmlHttp.Status = 200 Then
        responseContent = xmlHttp.responseText
        ' 从JSON响应中提取LoginName(简单字符串解析,复杂场景建议用VBA JSON解析库)
        loginName = Mid(responseContent, InStr(responseContent, """LoginName"":""") + 13)
        loginName = Left(loginName, InStr(loginName, """") - 1)
        GetSPIntegratedUser = loginName
    Else
        GetSPIntegratedUser = "获取失败:" & xmlHttp.Status & " - " & xmlHttp.statusText
    End If
    
Cleanup:
    Set xmlHttp = Nothing
End Function

注意事项

  • 确保Access客户端能访问目标SharePoint站点的REST API,且当前连接用户具有读取用户信息的权限;
  • 若使用旧版Access,可将MSXML2.XMLHTTP.6.0替换为MSXML2.XMLHTTP.3.0;
  • 复杂JSON解析推荐使用第三方VBA JSON库(如VBA-JSON),避免字符串处理的局限性。

方法二:解析SharePoint链接表的连接属性(仅适用于部分场景)

如果你的SharePoint链接表是通过ODBC或OLE DB连接创建的,可以尝试读取链接表的连接字符串属性,从中提取用户名:

VBA代码示例

Public Function GetSPUserFromLinkedTable(tableName As String) As String
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim connStr As String
    Dim userStart As Integer, userEnd As Integer
    
    Set db = CurrentDb()
    On Error GoTo Cleanup
    
    Set tdf = db.TableDefs(tableName)
    connStr = tdf.Connect
    
    ' 从连接字符串中提取用户名(不同连接格式需调整解析逻辑)
    userStart = InStr(connStr, "User ID=") + 8
    If userStart > 8 Then
        userEnd = InStr(userStart, connStr, ";")
        If userEnd > userStart Then
            GetSPUserFromLinkedTable = Mid(connStr, userStart, userEnd - userStart)
        Else
            GetSPUserFromLinkedTable = Mid(connStr, userStart)
        End If
    Else
        GetSPUserFromLinkedTable = "未找到用户名信息"
    End If
    
Cleanup:
    Set tdf = Nothing
    Set db = Nothing
End Function

局限性

这种方法仅适用于连接字符串中明文存储用户名的场景,而现代SharePoint集成认证(如SSO、Azure AD)的连接字符串通常不会包含明文用户名,因此方法一更通用可靠。

内容的提问来源于stack exchange,提问作者Pawel127

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 23:33:02