Linux虚拟机连接Azure SQL Server时出现登录超时错误求助
Linux虚拟机上Python+SQLAlchemy连接Azure SQL Server(AD密码认证)遇登录超时问题
我正尝试在Linux虚拟机上使用Python和SQLAlchemy连接Azure SQL Server(采用Active Directory密码认证),但遇到登录超时错误:
sqlalchemy.exc.OperationalError: (pyodbc.OperationalError) ('HYT00', '[HYT00] [unixODBC][Microsoft][ODBC Driver 18 for SQL Server]Login timeout expired (0) (SQLDriverConnect)') (Background on this error at: https://sqlalche.me/e/14/e3q8)
虚拟机上已安装的ODBC驱动信息:
[ODBC Driver 18 for SQL Server] Description=Microsoft ODBC Driver 18 for SQL Server Driver=/opt/microsoft/msodbcql18/lib64/libmsodbcsql-18.1.so.2.1 UsageCount=1
使用的连接字符串代码如下:
driver= "ODBC Driver 18 for SQL Server", endpoint="####-####.database.windows.net", dbname="sql#####", user="xxxxx@xxx.com", password="abc123" connection_string = "DRIVER={};SERVER={},port=1433;DATABASE={};UID={};PWD={};Authentication=ActiveDirectoryPassword;".format(driver, endpoint, dbname, user, password) connection_url = URL.create("mssql+pyodbc", query={"odbc_connect": connection_string}) engine = sqlalchemy.create_engine(connection_url, fast_executemany=True, pool_size=100) conn = engine.connect()
备注:
- SQL Server仅启用Active Directory密码认证
- 已尝试使用IP地址替代端点,问题仍未解决
排查与解决建议
1. 网络连通性验证
- 在Linux虚拟机执行以下命令,检查1433端口连通性:
若不通,检查:nc -zv ####-####.database.windows.net 1433- 虚拟机出站防火墙是否允许访问1433端口
- Azure SQL Server防火墙规则是否添加了该虚拟机的公网IP
- 若使用VNet集成,确认虚拟网络 peering 或服务端点配置正确
2. 修正连接字符串参数
- 端口分隔符错误:将
SERVER={},port=1433改为SERVER={}:1433,正确的连接字符串格式:connection_string = "DRIVER={};SERVER={}:1433;DATABASE={};UID={};PWD={};Authentication=ActiveDirectoryPassword;".format(driver, endpoint, dbname, user, password) - 若遇证书验证问题,可临时添加
Encrypt=Optional参数测试(生产环境建议保持加密):connection_string = "DRIVER={};SERVER={}:1433;DATABASE={};UID={};PWD={};Authentication=ActiveDirectoryPassword;Encrypt=Optional;".format(driver, endpoint, dbname, user, password)
3. 检查ODBC驱动依赖
- 确认安装
unixODBC开发包:# CentOS/RHEL sudo yum install unixODBC-devel # Debian/Ubuntu sudo apt-get install unixodbc-dev - 检查驱动路径拼写:原驱动信息中
msodbcql18疑似笔误,应为msodbcsql18,执行ls /opt/microsoft/确认目录是否正确
4. AD账号与权限验证
- 在Azure Portal的SQL Server查询编辑器中,使用该AD账号(
xxxxx@xxx.com)登录,验证账号有效性与密码正确性 - 检查虚拟机是否能访问Azure AD认证端点:
curl https://login.microsoftonline.com
内容的提问来源于stack exchange,提问作者Nirmal
相关产品推荐
相关产品推荐

