使用ngrok无法登录SQL Server,错误码18456状态码1求助
解决ngrok TCP隧道连接本地SQL Server出现18456错误码(状态码1)的问题
针对你通过ngrok TCP隧道连接本地SQL Server时出现错误码18456、状态码1,但本地常规方式可正常登录的情况,可按以下步骤排查解决:
1. 确认身份验证模式及登录方式匹配
- SQL Server状态码1的错误通常关联身份验证方式不兼容:若你本地用Windows身份验证(
MACHINE\SERVERNAME这类格式)登录,通过ngrok公网隧道无法直接使用Windows身份验证(无法跨公网传递域凭据),需切换为SQL Server身份验证账户登录。 - 检查SQL Server身份验证模式:在SSMS中右键服务器 → 属性 → 安全性,确认已勾选“SQL Server和Windows身份验证模式”,若未开启需重启SQL Server服务生效。
2. 验证SQL Server远程连接配置
- 启用TCP/IP协议:打开SQL Server配置管理器 → SQL Server网络配置 → 对应实例的协议 → 启用TCP/IP,重启SQL Server服务。
- 允许远程连接:在SSMS中右键服务器 → 属性 → 连接,勾选“允许远程连接到此服务器”。
3. 确保连接字符串格式正确
通过ngrok连接时,服务器地址需填写ngrok提供的公网地址,端口号(例如0.tcp.ngrok.io,12345),而非本地机器名/实例名。连接工具需选择SQL Server身份验证,输入对应的账户名和密码。
4. 检查登录账户权限
- 若使用SQL Server身份验证账户:确认该账户已启用、密码正确,且在服务器层面拥有登录权限(在SSMS的“安全性 → 登录名”中查看),同时目标数据库拥有对应的用户映射权限。
- 若坚持使用Windows身份验证:需配置Kerberos约束委派或使用VPN替代ngrok,但公网场景下不推荐,优先使用SQL Server身份验证。
5. 排查防火墙与安全软件拦截
- 本地Windows防火墙:添加入站规则,允许SQL Server服务(默认端口1433)和ngrok进程的网络访问权限。
- 第三方安全软件:暂时关闭杀毒软件、防火墙类工具,测试是否能正常连接,排除拦截可能。
6. 验证ngrok隧道连通性
执行以下PowerShell命令测试ngrok隧道是否正常连通:
Test-NetConnection [ngrok公网地址] -Port [ngrok端口号]
若返回“TcpTestSucceeded : True”则隧道正常,否则需检查ngrok配置或网络环境。
内容的提问来源于stack exchange,提问作者Dorian
相关产品推荐
相关产品推荐

