Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从容器中运行的ASP.NET核心应用程序连接到具有集成安全性的Windows Server上的SQL Server_C#_Asp.net_Sql Server_Docker_Asp.net Core - Fatal编程技术网

C# 如何从容器中运行的ASP.NET核心应用程序连接到具有集成安全性的Windows Server上的SQL Server

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

我有一个ASP.NET核心应用程序,其后端使用在Windows Server上运行的Microsoft SQL Server。这个应用程序之前是在Windows虚拟机上运行的,我们正在将它运行在OpenShift中的容器中

应用程序使用集成安全性和Active Directory服务帐户连接到SQL Server。如果我在连接字符串中输入用户名和密码,这是否有效

我还发现了这篇关于使用Kerberos设置()的文章,但我不确定这是一个好的模式。我将感谢任何帮助


编辑:很抱歉没有澄清-它是一个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身份验证”有什么帮助。谢谢你,不幸的是,我在工作中被拉向了不同的方向,并把这个项目无限期地搁置了。我没有完成我想要的身份验证。我将更新评论,以反映我无法使其完全工作。