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

如何使用AD组而非单个用户链接SQL Server表?

问题解答

首先明确:无法直接在连接串中指定AD组作为身份验证主体,因为Windows集成身份验证(Trusted_Connection=Yes)是基于当前运行Access的Windows用户身份生效的。只要该用户属于目标AD组,SQL Server就会自动应用该组的权限(datareader、datawriter等),无需在连接串中额外配置组信息。

你遇到的UID=myuser自动出现在连接串中的问题,是因为使用了dbAttachSavePWD参数导致的——这个参数用于保存SQL身份验证的密码,而在Windows集成验证场景下完全不需要,Access会错误地填充当前用户的信息。

修正后的实现步骤

  1. 调整连接串:使用纯Windows集成身份验证,不要包含UID、PWD参数:
strConnect = "ODBC;DRIVER=SQL Server;Database=mydatabase;Server=myserver;Trusted_Connection=Yes;"
  1. 修改TableDef创建逻辑:移除dbAttachSavePWD参数(第二个参数传0即可,代表默认属性):
Set td = CurrentDb.CreateTableDef(stlocalTableName, 0, stRemoteTableName, strConnect)
  1. 验证前置条件:
  • 确认当前运行Access的Windows用户已加入目标AD组(可通过命令行执行whoami /groups查看组列表)
  • 确认SQL Server数据库已为该AD组分配了datareader、datawriter权限

完整示例代码

Sub CreateADGroupLinkedTable()
    Dim strConnect As String
    Dim td As TableDef
    Dim stlocalTableName As String
    Dim stRemoteTableName As String
    
    ' 配置参数
    stlocalTableName = "LocalLinkedTable"
    stRemoteTableName = "RemoteSQLTable"
    strConnect = "ODBC;DRIVER=SQL Server;Database=mydatabase;Server=myserver;Trusted_Connection=Yes;"
    
    ' 创建链接表定义
    Set td = CurrentDb.CreateTableDef(stlocalTableName, 0, stRemoteTableName, strConnect)
    
    ' 追加到当前数据库
    CurrentDb.TableDefs.Append td
    
    ' 清理对象
    Set td = Nothing
End Sub

关键说明

  • Windows集成身份验证会自动传递当前用户的身份,SQL Server会根据用户所属的AD组匹配权限,无需手动指定组
  • dbAttachSavePWD仅适用于SQL Server身份验证(需要输入账号密码的场景),在集成验证中使用会导致Access错误写入当前用户信息
  • 若需要以其他AD组用户身份连接,需通过Windows runas命令以该用户身份启动Access,而非在连接串中配置组

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 21:36:07