MacOS下无法通过Azure Data Studio登录Azure SQL Database求助
解决MacOS Ventura 13.5.2下Azure Data Studio连接Azure SQL Database的SocketException(22)错误
问题背景
使用MacOS Ventura 13.5.2,已配置Azure SQL Database的服务器级和客户端IP防火墙规则,确认服务器名称、SQL认证信息正确,但通过Azure Data Studio连接时抛出以下错误:
System.Net.Sockets.SocketException (22): Invalid argument at System.Net.Sockets.Socket.UpdateStatusAfterSocketErrorAndThrowException(SocketError error, Boolean disconnectOnFailure, String callerName) at System.Net.Sockets.Socket.UpdateStatusAfterSocketOptionErrorAndThrowException(SocketError error, String callerName) at Microsoft.Data.SqlClient.SNI.SNITCPHandle.Receive(SNIPacket& packet, Int32 timeoutInMilliseconds) at Microsoft.Data.SqlClient.SNI.TdsParserStateObjectManaged.ReadSyncOverAsync(Int32 timeoutRemaining, UInt32& error) at Microsoft.Data.SqlClient.TdsParserStateObject.ReadSniSyncOverAsync() at Microsoft.Data.SqlClient.TdsParserStateObject.TryReadNetworkPacket() at Microsoft.Data.SqlClient.TdsParser.ConsumePreLoginHandshake(SqlConnectionEncryptOption encrypt, Boolean trustServerCert, Boolean integratedSecurity, Boolean& marsCapable, Boolean& fedAuthRequired, Boolean tlsFirst, String serverCert) at Microsoft.Data.SqlClient.TdsParser.Connect(ServerInfo serverInfo, SqlInternalConnectionTds connHandler, Boolean ignoreSniOpenTimeout, Int64 timerExpire, SqlConnectionString connectionOptions, Boolean withFailover) at Microsoft.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean ignoreSniOpenTimeout, TimeoutTimer timeout, Boolean withFailover) at Microsoft.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString connectionOptions, SqlCredential credential, TimeoutTimer timeout) at Microsoft.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(TimeoutTimer timeout, SqlConnectionString connectionOptions, SqlCredential credential, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance) at Microsoft.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, SqlCredential credential, Object providerInfo, String newPassword, SecureString newSecurePassword, Boolean redirectedUserInstance, SqlConnectionString userConnectionOptions, SessionData reconnectSessionData, Boolean applyTransientFaultHandling, String accessToken, DbConnectionPool pool) at Microsoft.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, DbConnectionPoolKey poolKey, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection, DbConnectionOptions userOptions) at Microsoft.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup, DbConnectionOptions userOptions) at Microsoft.Data.ProviderBase.DbConnectionFactory.<>c__DisplayClass48_0.<CreateConnection>b__0(Task`1 _) at System.Threading.Tasks.ContinuationResultTaskFromResultTask`2.InnerInvoke() at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) --- End of stack trace from previous location --- at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.Tasks.Task.ExecuteWithThreadLocal(Task& currentTaskSlot, Thread threadPoolThread) --- End of stack trace from previous location --- at Microsoft.SqlTools.ServiceLayer.Connection.ReliableConnection.ReliableSqlConnection.<>c__DisplayClass30_0.<OpenAsync>b__0() in //src/Microsoft.SqlTools.ManagedBatchParser/ReliableConnection/ReliableSqlConnection.cs:line 313 --- End of stack trace from previous location --- at Microsoft.SqlTools.ServiceLayer.Connection.ConnectionService.TryOpenConnection(ConnectionInfo connectionInfo, ConnectParams connectionParams) in //src/Microsoft.SqlTools.ServiceLayer/Connection/ConnectionService.cs:line 711
解决方案
以下是针对该错误的有效排查和解决步骤,按优先级尝试:
强制使用IPv4连接
该错误常因MacOS IPv6兼容性问题导致,可强制客户端使用IPv4:- 在Azure Data Studio的连接对话框中,点击高级选项
- 在附加连接参数中添加:
MultiSubnetFailover=False;IPAddressPreference=IPv4 - 保存配置后重试连接
禁用系统IPv6
- 打开系统设置 -> 网络
- 选中当前使用的网络(Wi-Fi/以太网),点击高级
- 切换到TCP/IP标签,将配置IPv6设置为关闭
- 重启Azure Data Studio后尝试连接
更新Azure Data Studio到最新版本
旧版本的Microsoft.Data.SqlClient驱动可能存在MacOS特定bug,升级到最新版可修复:- 打开Azure Data Studio -> 帮助 -> 检查更新
- 安装可用更新后重启软件重试
重置网络接口
执行终端命令重置当前网络接口(以Wi-Fi为例,接口名为en0,以太网可能为en1):sudo ifconfig en0 down && sudo ifconfig en0 up执行后重启电脑再尝试连接
排查代理/VPN干扰
关闭当前运行的VPN、代理软件,部分代理会篡改网络数据包导致参数错误;若必须使用代理,需确保代理正确转发1433端口的TCP流量
内容的提问来源于stack exchange,提问作者adithyah_nair
相关产品推荐
相关产品推荐

