无法从 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的主要内容,如果未能解决你的问题,请参考以下文章