C#客户端远程访问SQL Server 2014 Express报用户登录失败如何解决
问题排查解决步骤
第一步:修正连接字符串基础错误
- 前两个连接字符串中的
Data Source=.\\SQLEXPRESS里的.代表当前客户端本机,客户端运行时会尝试访问自身设备上的SQL Server实例,必然连接失败,直接弃用这两种写法。 - 保留第三种写法的基础框架,优先替换为服务端直连网卡的固定静态IP,避免直连组网下的主机名解析失败,参考写法:
若写在App.config配置文件中无需转义,直接写单斜杠即可。如果必须用主机名连接,可在客户端的// 硬编码在C#代码中的写法 @"Data Source=tcp:192.168.xxx.xxx,49172;Initial Catalog=dbposrpc;User ID=sa;Password=12345678;"C:\Windows\System32\drivers\etc\hosts文件中添加服务端IP与主机名的映射规则,避免解析失败。
第二步:验证SQL Server身份认证配置
- 登录服务端SQL Server Management Studio,右键实例→【属性】→【安全性】,确认已勾选SQL Server和Windows身份验证模式,而非仅Windows认证,修改后需重启SQL Server实例生效。
- 检查sa账号状态:【安全性】→【登录名】→【sa】→【属性】,常规页确认密码和配置的一致,可取消勾选强制密码过期;状态页确认登录权限已启用。
第三步:确认程序运行环境权限
- 不要直接从客户端的网络共享路径启动程序,先把整个程序目录复制到客户端本地硬盘任意位置,再运行exe测试。.NET Framework 4.5.2默认会限制网络共享位置运行的程序的远程资源访问权限,容易触发连接失败问题。
- 如果需要使用Windows集成认证(
trusted_connection=true),需要额外确认客户端当前登录的Windows账号,已经被添加到服务端SQL Server的登录名列表中,且授予了dbposrpc数据库的对应读写权限。
第四步:排查端口与防火墙配置
- 服务端防火墙确认已添加入站规则,放行49172端口的TCP连接,同时放行SQL Server主进程
sqlservr.exe的入站访问。 - 客户端打开CMD执行
telnet 服务端IP 49172,确认端口可以连通,没有被拦截。 - 服务端打开SQL Server配置管理器,确认SQL Server网络配置→SQLEXPRESS的协议中TCP/IP已启用,IP地址页拉到最底部,确认TCP端口填写的是49172,动态端口留空,修改后重启SQL Server服务生效。
第五步:抓取详细报错定位
如果以上操作完成后仍报错,修改程序的数据库连接异常捕获逻辑,输出完整的错误堆栈和错误号:
- 错误号18456:可查看服务端SQL Server的错误日志,定位具体失败原因,常见原因包括密码错误、sa账号禁用、默认数据库不存在、权限不足等。
- 错误号40/53:仍为网络连通性问题,回头检查IP、端口、防火墙配置。
内容的提问来源于stack exchange,提问作者Muhammad Sarmad Mahmood Malik
相关产品推荐
相关产品推荐

