无法从 C# 中的客户端(控制台应用程序)从 WCF 服务(已通过 Windows 身份验证)访问 SQL Server

Posted

技术标签:

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

我正在使用

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

所有都在同一个域中。

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

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

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

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

【问题讨论】:

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

以上是关于无法从 C# 中的客户端(控制台应用程序)从 WCF 服务(已通过 Windows 身份验证)访问 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

我无法将数据从 c# 服务器传递到 GCM 应用程序

从 PowerShell 调用时无法在 dll 中转换透明代理,但在 C# 控制台应用程序中成功

身份验证 c# 的 Jabber 客户端问题

如何从 c# 控制台应用程序中的用户输入创建多个对象?

从 ASP.NET Core 中的控制器操作运行后台任务

如何从 C# 控制台应用程序中的目录获取路径?