pyodbc连接Azure数据库报URI匹配错误 SSMS连接报Windows登录不支持
问题根因
- Azure SQL Database 原生不支持本地 Active Directory 域账号的Windows集成登录,你通过SSMS返回的
Windows logins are not supported in this version of SQL Server是底层真实错误,pyodbc返回的URI匹配报错属于ODBC 17驱动转发AD认证错误时的异常格式输出,和Web场景的同类报错没有关联。 - 你当前连接字符串中使用的
Authentication=ActiveDirectoryPassword参数要求UID不能带DOMAIN\前缀,且对应账号必须是已同步到Azure AD的托管账号或Azure AD原生账号,不能直接使用本地未同步的域账号。
修复方案
方案1:使用Azure AD账号密码认证
如果你的账号已同步到Azure AD,或本身是Azure AD原生账号,直接修改连接字符串即可:
Driver=ODBC Driver 17 for SQL Server;Server=company.database.windows.net;Authentication=ActiveDirectoryPassword;Database=My_Database;UID=user@company.com;PWD=********;
注意事项:
- UID必须填写Azure AD的用户主体名称(UPN),通常为邮箱格式,不要加域前缀
- 提前确认该账号已被设置为Azure SQL Server的Azure AD管理员,或已在目标库中创建了对应Azure AD用户的权限映射
方案2:使用SQL身份验证(适配性最高)
如果不需要强制使用AD认证,直接使用SQL账号登录即可,连接字符串修改为:
Driver=ODBC Driver 17 for SQL Server;Server=company.database.windows.net;Database=My_Database;UID=你的SQL账号;PWD=********;Encrypt=yes;
使用前需要提前在Azure SQL中创建对应SQL认证账号,同时配置服务器IP白名单允许你的客户端访问。
方案3:必须使用本地域账号的替代方案
如果业务要求必须使用本地域账号做Windows身份验证,需要将数据库迁移到Azure SQL Managed Instance(托管实例),只有该产品版本支持本地AD的Windows登录认证,单实例Azure SQL Database不支持该特性。
内容的提问来源于stack exchange,提问作者half of a glazier
相关产品推荐
相关产品推荐

