从ASP.NET Core连接到SQL Server的最佳实践?

Rya*_*one 6 asp.net asp.net-core-mvc asp.net-core asp.net-core-webapi asp.net-core-2.0

我最近遇到了一些SQL Server并不喜欢默认的AppIdentityUser登录的问题,所以我继续创建了一个具有写访问权限的自定义数据库用户.

但它让我想知道 - 这是最好的方法吗?

我想知道Asp.Net Core最好的SQL Server登录方法是什么.我知道有一个类似于普通.NET的问题,但是你无法加密Core web.config/appsettings.json(嗯,以一种快速而直接的方式).

以下是我看到的选项:

通过存储在appsettings.json中的SQL Server ID进行连接.

  • 亲:已经配置好了.
  • 缺点:web.config/appsettings.json中的密码; 必须专门配置SQL Server ID.不集中可撤销.

通过ASP.NET"AppIdentityUser"通过用户NT ID连接.

  • 专业版:appsettings.json中没有密码.
  • 缺点:不可集中撤销.似乎仅限于用户的服务器名称.

通过Active Directory用户连接.

  • 亲:容易可以撤销.
  • 缺点:appsettings.json中的活动目录用户密码.如果有人不小心在公司的另一个应用程序中重用该用户,并且该用户被破坏,那可能会很糟糕.

我还缺少其他选择吗?在哪些情况下使用以下哪些选项?哪个更标准?有没有我不考虑的利弊?

Chr*_*att 5

您绝对应该使用自定义SQL登录名来连接数据库。在后台,SQL登录名可以绑定到本地帐户,服务帐户,网络帐户等。实际上并不重要。

您似乎在这里遇到的真正问题是不想(正确地)以纯文本公开登录凭据。我不确定为什么在这里继续引用Web.config,因为ASP.NET Core不使用它。相反,可以选择使用各种配置提供程序。默认情况下,ASP.NET Core(至少从2.0开始)添加了一个JSON配置提供程序来查找项目,appsettings.jsonappsettings.{environment}.json在您的项目中添加了命令行配置提供程序,用户密钥配置提供程序,最后是环境变量配置提供程序。

对于您的情况,最后两个最有趣。在开发中,应使用用户密码。在生产中,应使用环境变量。但是,它们都不以加密方式存储机密。两种方法的好处都是秘密不在您的项目中,因此也不在您的源代码控制中。即使没有加密,也没有您想的那么大。弄清两者中的秘密都需要直接访问服务器/开发机器。此外,默认情况下,用户机密与特定的用户帐户绑定,只有该用户才能访问,并且可以使用相同的方式设置环境变量。因此,某人将需要同时访问计算机获得对特定帐户的访问权限。这实际上是一个很高的标准,如果要发生的话,在那时,暴露数据库密码确实是您最不用担心的事情。

但是,如果您想要真正的加密,则可以选择使用Azure KeyVault。无论您的应用程序是否实际托管在Azure中,都可以使用KeyVault,尽管它不是免费的,但它却非常便宜。

最后,您始终可以创建自己的配置提供程序或源第三方提供程序。例如,虽然默认的JSON提供程序不支持加密,但您可能会编写一个支持加密的程序。

  • 好吧,可能不使用集成安全性的最大原因是Web服务器和数据库服务器必须是域的一部分,而使用SQL登录名,您可以将其放入从内部网络锁定的DMZ中。大多数IT专业人员建议不要将内部网络的任何部分暴露给外界。使用适当的防火墙配置,它仍然可以保持安全,但是这只是要担心的一件事,最终仍然提供了您无需担心的攻击媒介。 (3认同)