Windows环境下JupyterLab如何以Active Directory用户身份连接SQL Server
实现Windows域凭据连接SQL Server(JupyterLab环境)
完全可以通过当前Windows登录的Active Directory域凭据实现免密连接SQL Server,和SSMS的免密登录逻辑一致,核心是启用Windows集成身份验证(Active Directory Integrated认证),具体实现方法如下:
正确配置连接字符串
之前的连接字符串未指定认证方式,导致驱动默认尝试无凭据登录,因此报错用户名空。需要在连接字符串中明确指定集成认证方式,有两种等效写法:
写法1:使用现代AD认证参数(推荐,适配Azure SQL/本地AD域)
DRIVER={ODBC Driver 18 for SQL Server};SERVER=<server>.database.windows.net;PORT=1433;DATABASE=<database>;Authentication=ActiveDirectoryIntegrated;Encrypt=yes
写法2:使用传统信任连接参数
DRIVER={ODBC Driver 18 for SQL Server};SERVER=<server>.database.windows.net;PORT=1433;DATABASE=<database>;Trusted_Connection=yes;Encrypt=yes
注:
Encrypt=yes是ODBC Driver 18的默认配置,连接Azure SQL时必须启用,本地SQL Server可根据实际加密要求调整。
完整代码示例
import pyodbc # 替换为你的服务器和数据库名称 conn_str = ( "DRIVER={ODBC Driver 18 for SQL Server};" "SERVER=<server>.database.windows.net;" "PORT=1433;" "DATABASE=<database>;" "Authentication=ActiveDirectoryIntegrated;" "Encrypt=yes;" ) try: # 建立连接 conn = pyodbc.connect(conn_str) print("数据库连接成功") # 执行测试查询,验证登录用户 cursor = conn.cursor() cursor.execute("SELECT SUSER_SNAME();") print(f"当前登录域用户:{cursor.fetchone()[0]}") # 关闭连接 conn.close() except pyodbc.Error as e: print(f"连接失败:{e}")
关键注意事项
- 确保JupyterLab以当前域用户身份启动:如果通过Anaconda Prompt/CMD启动JupyterLab,默认就是当前登录用户的上下文;如果以Windows服务方式运行JupyterLab,需将服务登录账号改为目标域用户。
- 不要在连接字符串中添加
UID或PWD参数,否则会覆盖集成认证的凭据。 - 确认目标SQL Server/Azure SQL已配置AD身份验证权限:当前域用户需被授予数据库访问权限(可通过SSMS或Azure Portal配置)。
- 驱动架构匹配:ODBC Driver 18的架构(x64/x86)需与Python运行环境的架构一致,否则会出现驱动找不到的问题。
内容的提问来源于stack exchange,提问作者Mike
相关产品推荐
相关产品推荐

