使用Ruby(TinyTds)连接Azure SQL数据库时遇超时错误求助
解决Azure SQL Server连接TinyTds超时(重定向连接失败)问题
检查TinyTds连接参数的重定向支持
Azure SQL Server默认会将连接重定向到实际数据库节点,TinyTds需要正确配置参数才能支持这一特性。确保你的连接代码包含以下关键参数:client = TinyTds::Client.new( username: "你的SQL身份验证用户名", password: "你的SQL身份验证密码", host: "<mydb>.database.windows.net", database: "目标数据库名", port: 1433, encrypt: true, # Azure SQL强制要求加密连接 trust_server_certificate: false, # 验证服务器证书,避免证书信任问题 tds_version: "7.4", # 适配Azure SQL的TDS版本,支持重定向 login_timeout: 30 # 延长登录超时时间,避免短时间内连接失败 )其中
encrypt: true是强制要求,tds_version: "7.4"确保支持Azure SQL的重定向逻辑。确认本地/网络的出站端口权限
重定向连接会使用Azure SQL的高范围端口(11000-11999),如果本地防火墙、路由器或公司网络策略限制了这些端口的出站访问,就会导致超时。- 检查本地防火墙是否允许出站到11000-11999端口;
- 联系网络管理员确认公司网络是否放行这些端口的流量。
修改Azure SQL Server的连接策略
如果重定向端口无法放行,可以将Azure SQL的连接策略改为代理模式,强制所有连接通过1433端口通信:- 登录Azure门户,找到目标SQL Server;
- 进入「连接安全性」选项卡;
- 在「连接策略」下拉菜单中选择「代理」;
- 保存设置后等待数分钟,再尝试连接。
注意:代理模式会带来轻微的性能损耗,但能绕过重定向端口限制。
升级TinyTds到最新版本
旧版本的TinyTds可能不支持Azure SQL的重定向特性,运行以下命令检查并升级:# 查看当前版本 gem list tiny_tds # 升级到最新版 gem install tiny_tds或者在Rails项目的Gemfile中指定版本:
gem "tiny_tds", ">= 2.1.0"执行
bundle install完成升级。验证防火墙规则的准确性
确保你添加的Azure SQL防火墙规则使用的是本地机器的公网IP地址(而非内网IP)。查询自己的公网IP后,在Azure门户的SQL Server「防火墙和虚拟网络」中添加该IP的单个范围(如x.x.x.x到x.x.x.x),等待5-10分钟让规则生效后重试。
内容的提问来源于stack exchange,提问作者pinch
相关产品推荐
相关产品推荐

