使用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账户登录失败。
解决方法
修正连接字符串参数
将trusted_connection=yes替换为integratedSecurity=true,这是SQLx MSSQL驱动认可的Windows身份验证参数。修正后的连接字符串:mssql://server/db?integratedSecurity=true&driver=ODBC+Driver+17+for+SQL+Server注意:如果是命名实例,服务器地址要写成
server\instance;如果是非默认端口,写成server,port。确认账户权限
确保运行程序的Windows账户(域账户或本地账户)已被目标MSSQL服务器授权,允许通过Windows身份验证登录,且拥有目标数据库和表的访问权限。检查SQLx版本
确保使用的sqlx和sqlx-mssql是最新稳定版,旧版本可能存在Windows身份验证的兼容性问题。
内容的提问来源于stack exchange,提问作者Coldchain9
相关产品推荐
相关产品推荐

