C# 如何从容器中运行的ASP.NET核心应用程序连接到具有集成安全性的Windows Server上的SQL Server
我有一个ASP.NET核心应用程序,其后端使用在Windows Server上运行的Microsoft SQL Server。这个应用程序之前是在Windows虚拟机上运行的,我们正在将它运行在OpenShift中的容器中 应用程序使用集成安全性和Active Directory服务帐户连接到SQL Server。如果我在连接字符串中输入用户名和密码,这是否有效 我还发现了这篇关于使用Kerberos设置()的文章,但我不确定这是一个好的模式。我将感谢任何帮助C# 如何从容器中运行的ASP.NET核心应用程序连接到具有集成安全性的Windows Server上的SQL Server,c#,asp.net,sql-server,docker,asp.net-core,C#,Asp.net,Sql Server,Docker,Asp.net Core,我有一个ASP.NET核心应用程序,其后端使用在Windows Server上运行的Microsoft SQL Server。这个应用程序之前是在Windows虚拟机上运行的,我们正在将它运行在OpenShift中的容器中 应用程序使用集成安全性和Active Directory服务帐户连接到SQL Server。如果我在连接字符串中输入用户名和密码,这是否有效 我还发现了这篇关于使用Kerberos设置()的文章,但我不确定这是一个好的模式。我将感谢任何帮助 编辑:很抱歉没有澄清-它是一个Li
编辑:很抱歉没有澄清-它是一个Linux容器。如果您使用的是我假设的Windows容器,则当前用户不是您所期望的。当您运行容器时,除非您将用户添加到该特定容器中,否则您将发现该用户是为此目的创建的“容器用户”。因此,与集成安全性连接将不起作用 连接到外壳中的容器并检查自己:
docker exec -it [yourrunningcontainer] cmd
C:\somefolder\echo %username%
将输出“ContainerUser”
在容器中创建用户是可能的,但可以肯定他们不属于您的Active Directory,老实说,我不认为有一种简单的方法可以从容器中安装很多东西来伪造它(在广告上下文中,您的用户不容易“伪造”,事实上,非常困难,而且我不知道有什么方法可以不进行大规模的黑客攻击)
有一种方法可以连接到不同的用户,但您将通过id引用容器用户。同样,没有一种简单的方法可以像Active Directory用户一样模拟,我想这就是您要做的。所以我想我基本上已经解决了这个问题,只想分享我的发现。在.NET Core 2.x中,Linux容器中的应用程序可以与Microsoft SQL Server进行集成安全通信,但它需要一些Kerberos配置,甚至更重要的是,需要一个运行脚本的侧车来定期更新Kerberos票证和密钥表文件。我不是这个实现的超级粉丝,但是在我最初的问题的链接中已经讨论过了。然而,看起来.NETCore3.0中确实需要本机支持。因此,我可能会将此迁移延迟到3.0发布之前,以使其对我自己更方便。关于这一点的整个讨论记录得比我在这里说的要好得多: 感谢所有发表评论的人-我感谢你的意见 编辑:.NET Core 3.0已退出!Windows身份验证的实现可在以下位置找到:
EDIT2:不幸的是,我最终被拉向了另一个方向,无法完成这个任务。上述链接在实际使用SQL Server实现集成安全性时可能没有用处。将“OpenShift中的容器”改为“过于宽泛”。你的容器的底部是什么?windows还是linux?很抱歉,这是一个linux容器。很抱歉没有澄清-这实际上是一个linux容器。不过,感谢您的评论。Linux容器的行为不会如此不同。您可以在容器内创建用户,但这些用户将不是网络用户。我正在想一个方法,你可以克服这一点。再次感谢你所有的投入。我在下面写了一个额外的答案,这个答案是基于我在aspnetcore GitHub项目中最终找到的一个长线程得出的,如果你对它感兴趣的话。这对任何人都有效吗@约瑟夫,你能不能说点细节explanation@Josef您是如何使用集成安全性从AKS Linux容器连接到SQL的?我也有同样的问题,但我不清楚你发布的文章“Windows身份验证”有什么帮助。谢谢你,不幸的是,我在工作中被拉向了不同的方向,并把这个项目无限期地搁置了。我没有完成我想要的身份验证。我将更新评论,以反映我无法使其完全工作。