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

使用AzureML Dataprep通过Windows认证登录MS SQL失败排查

问题分析与解决办法

你的登录失败问题主要有两个核心原因:错误的认证方式配置和数据库连接参数格式错误,下面逐一拆解并给出修复方案:

1. 核心问题:混淆了SQL身份验证与Windows集成认证的配置

MSSQLDataSource默认采用SQL Server身份验证模式,当你传入域账号(MYWINDOWSDOMAIN\\MYWINDOWSUSERNAME)和Windows密码时,SQL Server会将其视为一个SQL原生账号去验证——但你的目标数据库是启用Windows认证的,自然找不到对应的SQL账号,导致登录失败。

正确的Windows集成认证配置

Windows集成认证不需要手动传入用户名和密码,而是依赖当前运行Notebook的进程身份(如果你用的是Azure ML Compute Instance,就是该实例的系统身份;如果是本地Notebook,就是你本地的Windows登录身份)。你需要显式启用integrated_auth=True参数:

import azureml.dataprep as dprep

# 启用Windows集成身份验证,无需指定用户名/密码
ds = dprep.MSSQLDataSource(
    server_name="[SERVER-NAME], [PORT]",  # 端口需要放在server_name里,用逗号分隔
    database_name="[DATABASE-NAME]",
    integrated_auth=True
)

dataflow = dprep.read_sql(ds, "SELECT top 100 * FROM [dbo].[MYTABLE]")
dataflow.head(5)

2. 次要但关键的参数错误:端口位置放错了

你原代码中将端口写在了database_name参数里(database_name="[DATABASE-NAME], [PORT]"),这是完全错误的。SQL Server的端口需要附加在server_name后面,用逗号分隔,而database_name只能填写纯数据库名称。这个错误本身也会导致连接目标数据库失败。

3. 进阶场景:必须使用指定域账号而非进程身份

如果由于权限限制,你必须使用特定的域账号(而不是Notebook进程的默认身份),可以直接使用ODBC连接字符串来配置,这样能更灵活地控制认证方式:

import azureml.dataprep as dprep

# 注册密码为安全密钥
secret = dprep.register_secret(value="[YOUR-WINDOWS-PASSWORD]", id="sql-windows-pwd")

# 构建包含域账号的ODBC连接字符串
conn_str = f"Driver={{ODBC Driver 17 for SQL Server}};Server=[SERVER-NAME], [PORT];Database=[DATABASE-NAME];UID=MYWINDOWSDOMAIN\\MYWINDOWSUSERNAME;PWD={secret};Trusted_Connection=NO;"

# 执行查询
dataflow = dprep.read_sql(conn_str, "SELECT top 100 * FROM [dbo].[MYTABLE]")
dataflow.head(5)

额外排查要点

  • 确保你的Notebook运行环境(Azure ML Compute Instance/本地机器)能访问到SQL Server的网络端口(默认1433),比如防火墙规则开放、VNet peering配置正确(如果是Azure云环境)。
  • 确认你使用的域账号已经被授予目标SQL Server和数据库的访问权限(比如在SQL Server中添加了该域账号的登录名,并映射到目标数据库的用户)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:30:09