提问人:gin93r 提问时间:9/12/2023 最后编辑:Charliefacegin93r 更新时间:9/13/2023 访问量:104
从 WSL 连接到 SQL Express - SQL 网络接口,错误:25
Connecting to SQL Express from WSL - SQL Network Interfaces, error: 25
问:
我已经工作了将近两天,我别无选择。也许你们可以帮忙。
背景:我将 .netcore api 从 Windows 迁移到 WSL2 (Ubuntu 20.04)。My Database 正在 Windows 上运行。尝试运行时,它给了我错误:dotnet ef database update
A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 25 - Connection string is not valid: Connection string is not valid)
我的连接字符串(ip 是占位符):
"Server=192.168.0.1,1433/SQLEXPRESS,1433;Database=MyDatabase;Integrated Security=True;MultipleActiveResultSets=True;Encrypt=no"
我已经在谷歌上搜索了该错误并尝试(或已经完成)许多建议的解决方案,包括:
- 确保我的入站端口已针对 Windows 防火墙设置;1433 用于 SQL Server,1434 用于 Sql Server 浏览器
- 已确保 SQL Server 和 SQL Server Browser 正在运行
- 确保在 SQLEXPRESS 的 SQL Server 网络配置>协议中启用了 TCP/IP
- 已确保 wsl 的 IP 地址处于“活动”、“已启用”状态,并且具有 TCP 端口 1433 TCP/IP 属性
- 已确保将 TCP/IP 属性的 TCP 端口设置为 1433,> IPAll
- 我可以成功ping通ip
- 我可以成功telnetip
- 我已经检查了实例名称是否为 SQLEXPRESS
- 确保我的数据库允许远程连接
- 确保数据库允许混合 SQL Server 和 Windows 身份验证
- 我尝试了连接字符串的许多变体 - 带和不带 Encrypt、TrustServerCertificate、用户 ID 和密码(使用 sa)
- 我尝试了服务器的几种变体:IP,Port,IP,Port/InstanceName,IP/InstanceName,InstanceName,localhost/InstanceName,MachineName/InstanceName,IP/InstanceName,Port
- 我试过用 tcp 作为上述前缀:
在Windows端使用powershell,我运行了以下命令:
$sqlConn = New-Object System.Data.SqlClient.SqlConnection
$sqlConn.ConnectionString = "Server=localhost,1433;Database=MyDatabase;Encrypt=no;TrustServerCertificate=True;User ID=sa;Password='';Integrated Security=True;MultipleActiveResultSets=True"
$sqlConn
它打印出所有正确的信息。省略会给我一个错误 40,这与自签名的 ssl 证书有关。省略用户 ID 和密码仍能成功连接。Encrypt=no
我错过了什么?
答:
1赞
Charlieface
9/13/2023
#1
如果您使用的是固定端口,则需要删除实例名称。当然,您不应该在实例名称之后指定端口。
而 SQL 身份验证使用 .如果是,则它使用 Windows 身份验证,传递用户名和密码是没有意义的。不能从 WSL 使用 Windows 身份验证。Integrated Security=False
true
Server=192.168.0.1,1433;Database=MyDatabase;MultipleActiveResultSets=True;User ID=sa;Password=''
如果确实有必要,请添加,请注意这是安全风险。TrustServerCertificate=True
评论
0赞
gin93r
9/13/2023
TrustServerCertificate 仅在本地使用。谢谢查理法斯。
评论
Integrated Security=true
Integrated Security=true
Integrated Security=true
Integrated Security
sqlcmd