繁体   English   中英

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

[英]How to connect from ASP.NET Core application running in a container to SQL Server on Windows Server with Integrated Security

我有一个 ASP.NET 核心应用程序,其后端使用在 Windows 服务器上运行的 Microsoft SQL 服务器。 此应用程序事先在 Windows 虚拟机上运行,我们正准备让它在 OpenShift 的容器中运行。

该应用程序使用带有 Active Directory 服务帐户的集成安全性连接到 SQL 服务器。 如果我在连接字符串中传递用户名和密码,那会起作用吗?

我还发现了这篇关于使用 Kerberos 进行设置的文章( https://www.codeproject.com/Articles/1272546/Authenticate-NET-Core-Client-of-SQL-Server-with-In ),但我不是当然这是一个很棒的模式。 我将不胜感激任何帮助。

编辑:抱歉没有澄清 - 它是一个 Linux 容器。

所以我想我基本上想通了,只是想分享我的发现。 在 .NET Core 2.x 中,可以在 Linux 容器中拥有一个应用程序,该容器与 Microsoft SQL 服务器进行通信,以更新具有集成安全性的服务器,但它需要一些运行脚本并定期更新的 Kerberos Kerberos 票证和密钥表文件。 我不是这个实现的超级粉丝,但它在我原来问题的链接中讨论过。 但是,看起来 .NET Core 3.0 中确实需要原生支持。 所以我可能会推迟这个迁移,直到 3.0 发布,以使自己更容易。 围绕此的整个讨论的记录比我在这里写的要好得多: https://github.com/aspnet/AspNetCore/issues/4662

感谢所有评论的人 - 我感谢您的意见。

EDIT: .NET Core 3.0 is out: Implementation of Windows Authentication can be found here: https://docs.microsoft.com/en-us/aspnet/core/security/authentication/windowsauth?view=aspnetcore-3.0&tabs=visual-工作室

EDIT2:不幸的是,我最终被拉向了另一个方向,无法完成实施。 上面的链接在实际获得集成安全性以与 SQL 服务器一起使用时可能没有用。

如果您使用的是 Windows 容器,我认为您是,当前用户不是您所期望的。 当您运行容器时,除非您将用户添加到该特定容器,否则您会发现该用户是为此目的创建的“容器用户”。 因此,无法与 Integrated Security 连接。

连接到 shell 中的容器并检查自己:

docker exec -it [yourrunningcontainer] cmd

C:\somefolder\echo %username%

将 output "ContainerUser"

可以在容器内创建用户,但可以肯定他们不属于您的 Active Directory,并且真诚地说,我没有看到一种简单的方法来安装很多东西来从容器中伪造它(您在 AD 中的用户context 不容易“伪造”,实际上非常难而且我不知道有一种方法不是非常庞大的 hack 来做到这一点)

有一种方法可以连接不同的用户,但您将通过 id 引用容器用户。 同样,没有一种简单的方法可以模仿 Active Directory 用户,我想这就是您想要做的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM