【问题标题】:Unable to access SQL Server from WCF service (Windows authenticated) from client (console application) in C#无法从 C# 中的客户端(控制台应用程序)从 WCF 服务(已通过 Windows 身份验证)访问 SQL Server
【发布时间】:2017-07-07 23:57:31
【问题描述】:

我正在使用

  1. WCF 服务(Windows 身份验证和模拟)
  2. SQL Server(Windows 身份验证)
  3. 控制台应用程序(客户端)

所有都在同一个域中。

我正在从作为客户端的控制台应用程序中使用经过 Windows 身份验证的 WCF 服务。但是,当我尝试使用 WCF 服务从控制台应用程序访问 SQL Server 时,出现错误:

用户“NT AUTHORITY\ANONYMOUS LOGON”的帐户登录失败。

我的场景是:我的 WCF 服务和 SQL Server 在一个系统上 (System A),而我的控制台应用程序(我的客户端)在另一个系统上 (System B)。

当我来自System B 的客户端发送请求时,它成功命中了我的服务,但是当服务尝试访问 SQL Server 时

【问题讨论】:

  • 你想完成什么?您是否尝试使用客户端的凭据登录?如果是这样,请参阅此 SO 帖子:stackoverflow.com/questions/5646884/… 对我来说,您似乎试图传递您的服务运行所使用的任何帐户的凭据,并且它没有登录到您连接到的任何服务器。
  • 是的,我已经尝试了您的链接并在我的解决方案中实施了相同的方法,但它再次给了我同样的错误..

标签: c# .net sql-server wcf authentication


【解决方案1】:
  • WCF 服务(Windows 身份验证和模拟)
  • Sql 服务器(Windows 身份验证)
  • 控制台应用程序(客户端)

此方案需要 Kerberos constrained delegation。你不能这样做,你必须寻求域管理员的帮助来为你设置它。阅读并关注How to Implement Kerberos Constrained Delegation with SQL Server

请注意,模拟和委派会将原始客户端(控制台应用程序)的凭据流向后端数据库,这意味着您需要将 SQL 访问权限授予您的服务的实际用户,而不是 WCF 服务帐户。

【讨论】:

  • 我不能使用kerberos ..因为我的要求是针对上述场景..请务必充分
【解决方案2】:

我认为您与 WCF 服务的连接没有问题,但 SQL Server 自己的安全系统将客户端视为超出安全屏障(如防火墙)的用户,因为客户端确实来自外部,而不是机器的管理员。

你为什么不应用WCF的SQL认证模式和Web.Config的非对称加密的常见思想?

如果您必须面对客户端从外部连接到服务器的情况,强烈建议使用加密(安全)。

我在客户端有桌面应用程序 (WPF),在连接到 Cloud SQL Server 的云服务上有 WCF 服务。

【讨论】:

  • 我的数据库无法使用 Sql 身份验证(用户名和密码)。要求是我的数据库的 Windows 身份验证。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-25
  • 2012-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多