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

使用SQLx连接非本地SQL Server实例时遇登录失败问题

使用SQLx连接MSSQL时的Windows身份验证问题

我尝试连接公司网络内的非本地MSSQL服务器,用SQLx写了如下代码:

use sqlx::mssql::MssqlPool;

#[tokio::main]
async fn main() -> Result<(), sqlx::Error> 
{
    let pool = MssqlPool::connect("mssql://server/db?trusted_connection=yes&driver=ODBC+Driver+17+for+SQL+Server")
                   .await?;
    
    let result = sqlx::query("select top 100 * from db.dbo.tbl")
                    .execute(&pool)
                    .await?;

    println!("{:?}", result);
    Ok(())
}

代码能正常构建,但连接逻辑有问题。我不想用用户名密码,想实现类似Python中pyodbc结合本地SQL Server驱动的Windows身份验证方式,运行时却报出错误:

Error: Database(MssqlDatabaseError { message: "Login failed for user 'sa'.", number: 18456, state: 1, class: 14, server: "server", procedure: "", line: 1 })

问题原因

trusted_connection=yes是ODBC原生的参数写法,但SQLx的MSSQL驱动没有正确解析这个参数,导致驱动默认尝试使用SQL身份验证,用sa账户登录失败。

解决方法

  1. 修正连接字符串参数
    将trusted_connection=yes替换为integratedSecurity=true,这是SQLx MSSQL驱动认可的Windows身份验证参数。修正后的连接字符串:

    mssql://server/db?integratedSecurity=true&driver=ODBC+Driver+17+for+SQL+Server
    

    注意:如果是命名实例,服务器地址要写成server\instance;如果是非默认端口,写成server,port。

  2. 确认账户权限
    确保运行程序的Windows账户(域账户或本地账户)已被目标MSSQL服务器授权,允许通过Windows身份验证登录,且拥有目标数据库和表的访问权限。

  3. 检查SQLx版本
    确保使用的sqlx和sqlx-mssql是最新稳定版,旧版本可能存在Windows身份验证的兼容性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 18:15:48